仍然闪烁

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
+10 -7
View File
@@ -22,14 +22,15 @@ struct Label_Input_Data : Latest_Input_Data {
struct Label_Private : Typed_Render_Data<Label, Label_Render_State, Label_Input_Data> {
std::pmr::vector<Label_Item> prepared_items{memory_resource(Memory_Domain::Other)};
bool use_prepared_items = false;
void prepare_data(const Render_Frame_Snapshot&) override {
sync_state_pipeline();
Label_Input_Data* input = render_input_data();
void prepare_data(const Render_Frame_Snapshot&, const Renderable_Frame_View& frame_view) override {
Label_Input_Data* input = render_input_data(frame_view);
if (!input)
return;
if (!input->pending)
return;
prepared_items.swap(input->items);
use_prepared_items = true;
clear_render_input();
frame_view.consume_input();
}
void draw_item(Canvas& canvas, const Label_Item& item, const Axis_Mapping_2D& mapping) {
if (item.text.empty())
@@ -59,13 +60,15 @@ struct Label_Private : Typed_Render_Data<Label, Label_Render_State, Label_Input_
canvas.draw_text(rect, Text_Align::Left | Text_Align::Vertical_Center, item.text);
canvas.restore();
}
void draw(Canvas& canvas, const Render_Frame_Snapshot&) override {
Label_Render_State* s = render_state();
void draw(Canvas& canvas, const Render_Frame_Snapshot& snapshot, const Renderable_Frame_View& frame_view) override {
Label_Render_State* s = render_state(frame_view);
if (!s)
return;
auto domain_axis = s->domain_axis.lock();
auto value_axis = s->value_axis.lock();
if (!domain_axis || !value_axis)
return;
Axis_Mapping_2D mapping = Axis_Render_Access::mapping(domain_axis.get(), value_axis.get());
Axis_Mapping_2D mapping = Axis_Render_Access::mapping(domain_axis.get(), value_axis.get(), snapshot);
if (use_prepared_items) {
for (const Label_Item& item : prepared_items)
draw_item(canvas, item, mapping);