Fixed sigsev caused by modifying UI from outside the UI thread.

WIP on jogging layout.
This commit is contained in:
2023-05-05 16:58:34 +03:00
parent 3f9eb049b7
commit 3913549b9e
+46 -4
View File
@@ -167,6 +167,34 @@ public:
cnc.go_to_zero(true, true, true);
});
// jogging
layer->add<Label>("Jogging", "sans-bold", 20);
auto holder = new Widget(layer);
holder->set_layout(new GridLayout(Orientation::Horizontal, 2, Alignment::Middle, 0, 0));
auto jogBtnsHolder = holder->add<Widget>();
jogBtnsHolder->set_layout(new GridLayout(Orientation::Horizontal, 3, Alignment::Middle, 0, 6));
jogBtnsHolder->add<Label>("");
jogBtnsHolder->add<ToolButton>(FA_ARROW_ALT_CIRCLE_UP);
jogBtnsHolder->add<Label>("");
jogBtnsHolder->add<ToolButton>(FA_ARROW_ALT_CIRCLE_LEFT);
jogBtnsHolder->add<ToolButton>(FA_HOME);
jogBtnsHolder->add<ToolButton>(FA_ARROW_ALT_CIRCLE_RIGHT);
jogBtnsHolder->add<Label>("");
jogBtnsHolder->add<ToolButton>(FA_ARROW_ALT_CIRCLE_DOWN);
jogBtnsHolder->add<Label>("");
auto jogZBtnsHolder = holder->add<Widget>();
jogZBtnsHolder->set_layout(new BoxLayout(Orientation::Vertical, Alignment::Minimum, 0, 6));
jogZBtnsHolder->add<ToolButton>(FA_ANGLE_UP);
jogZBtnsHolder->add<ToolButton>(FA_HOME);
jogZBtnsHolder->add<ToolButton>(FA_ANGLE_DOWN);
// work parameters
layer->add<Label>("Work parameters", "sans-bold", 20);
auto x = new Widget(layer);
@@ -359,11 +387,11 @@ public:
grbl::realtime_status_report last_report;
volatile bool machine_initialized = false;
void on_init_completed() override {
fill_in_settings();
fill_in_parameters();
refresh_offset();
update_dro();
machine_initialized = true;
// need to do UI related things in UI thread
}
void on_realtime_status_report(grbl::realtime_status_report report) override {
@@ -555,6 +583,20 @@ public:
}
}
void draw(NVGcontext *ctx) override {
// not pretty but need to do this in UI thread
if (machine_initialized) {
fill_in_settings();
fill_in_parameters();
refresh_offset();
update_dro();
machine_initialized = false;
}
Widget::draw(ctx);
}
virtual void draw_contents() {
auto fb_size = framebuffer_size();