仍然闪烁

This commit is contained in:
2026-08-02 18:58:35 +08:00
parent ffaca5b05f
commit 9a39f88427
54 changed files with 2257 additions and 2424 deletions
+8 -6
View File
@@ -1,9 +1,9 @@
#include "Hover_Tooltip.h"
#include "../Axis/Abs_Axis_p.h"
namespace renderive {
void Hover_Tooltip_State::draw_hover_tooltip(Canvas* canvas, Abs_Axis* domain_axis, Abs_Axis* value_axis, Hover_Tooltip_Provider* renderable) {
void Hover_Tooltip_State::draw_hover_tooltip(Canvas* canvas, Abs_Axis* domain_axis, Abs_Axis* value_axis, Hover_Tooltip_Provider* renderable, const Render_Frame_Snapshot* snapshot) {
Point pos = hover_position;
std::vector<std::string> lines = renderable->build_hover_lines(domain_axis, value_axis, pos);
std::vector<std::string> lines = renderable->build_hover_lines(domain_axis, value_axis, pos, snapshot);
double max_width = 0;
double line_height = 0;
for (const std::string& s : lines) {
@@ -28,13 +28,15 @@ bool Hover_Tooltip_State::can_show_hover(Renderable* able) const {
auto tmp = dynamic_cast<Hover_Tooltip_Provider*>(able);
return use_hover_tooltip && hover_info_active && tmp->hit_test_hover(hover_position);
}
std::vector<std::string> Hover_Tooltip_Provider::build_hover_lines(Abs_Axis* h, Abs_Axis* v, Point pos) {
Axis_Mapping_2D mapping = Axis_Render_Access::mapping(h, v);
std::vector<std::string> Hover_Tooltip_Provider::build_hover_lines(Abs_Axis* h, Abs_Axis* v, Point pos, const Render_Frame_Snapshot* snapshot) {
Axis_Mapping_2D mapping = snapshot ? Axis_Render_Access::mapping(h, v, *snapshot) : Axis_Render_Access::mapping(h, v);
PointF screen_point{static_cast<double>(pos.x), static_cast<double>(pos.y)};
double tick1 = mapping.domain.pixel_to_coord(mapping.domain_pixel(screen_point));
double tick2 = mapping.value.pixel_to_coord(mapping.value_pixel(screen_point));
std::string line1 = Axis_Render_Access::tick_label(h, tick1) + h->unit_text();
std::string line2 = Axis_Render_Access::tick_label(v, tick2) + v->unit_text();
std::string line1 = (snapshot ? Axis_Render_Access::tick_label(h, tick1, *snapshot) : Axis_Render_Access::tick_label(h, tick1))
+ (snapshot ? Axis_Render_Access::unit_text(h, *snapshot) : h->unit_text());
std::string line2 = (snapshot ? Axis_Render_Access::tick_label(v, tick2, *snapshot) : Axis_Render_Access::tick_label(v, tick2))
+ (snapshot ? Axis_Render_Access::unit_text(v, *snapshot) : v->unit_text());
return {line1, line2};
}
} // namespace renderive