Extract app frame and export dialog helpers
This commit is contained in:
131
src/app.cpp
131
src/app.cpp
@@ -33,37 +33,6 @@
|
||||
App* App::I = nullptr; // singleton
|
||||
|
||||
namespace {
|
||||
|
||||
pp::app::CanvasToolMode canvas_tool_mode_from_canvas_mode(kCanvasMode mode) noexcept
|
||||
{
|
||||
switch (mode) {
|
||||
case kCanvasMode::Draw:
|
||||
return pp::app::CanvasToolMode::draw;
|
||||
case kCanvasMode::Erase:
|
||||
return pp::app::CanvasToolMode::erase;
|
||||
case kCanvasMode::Line:
|
||||
return pp::app::CanvasToolMode::line;
|
||||
case kCanvasMode::Camera:
|
||||
return pp::app::CanvasToolMode::camera;
|
||||
case kCanvasMode::Grid:
|
||||
return pp::app::CanvasToolMode::grid;
|
||||
case kCanvasMode::Copy:
|
||||
return pp::app::CanvasToolMode::copy;
|
||||
case kCanvasMode::Cut:
|
||||
return pp::app::CanvasToolMode::cut;
|
||||
case kCanvasMode::Fill:
|
||||
return pp::app::CanvasToolMode::fill;
|
||||
case kCanvasMode::MaskFree:
|
||||
return pp::app::CanvasToolMode::mask_free;
|
||||
case kCanvasMode::MaskLine:
|
||||
return pp::app::CanvasToolMode::mask_line;
|
||||
case kCanvasMode::FloodFill:
|
||||
return pp::app::CanvasToolMode::flood_fill;
|
||||
default:
|
||||
return pp::app::CanvasToolMode::draw;
|
||||
}
|
||||
}
|
||||
|
||||
void apply_app_viewport(pp::renderer::gl::OpenGlViewportRect viewport)
|
||||
{
|
||||
const auto status = pp::renderer::gl::apply_opengl_viewport(
|
||||
@@ -215,6 +184,9 @@ namespace pp::panopainter
|
||||
{
|
||||
bool process_legacy_recording_worker_iteration(App& app);
|
||||
void update_legacy_recording_frame_label(App& app);
|
||||
bool update_legacy_app_ui_observer(App& app, Node* n);
|
||||
void watch_legacy_app_ui_children(App& app, const std::function<bool(Node*)>& observer, bool skip_first_main_child);
|
||||
void update_legacy_canvas_toolbar(App& app);
|
||||
}
|
||||
|
||||
bool App::check_license()
|
||||
@@ -359,67 +331,7 @@ void App::async_swap()
|
||||
|
||||
bool App::update_ui_observer(Node *n)
|
||||
{
|
||||
std::vector<pp::app::AppUiObserverParentClip> parent_clips;
|
||||
if (n) {
|
||||
for (Node* p = n->m_parent; p; p = p->m_parent) {
|
||||
parent_clips.push_back(pp::app::AppUiObserverParentClip {
|
||||
.clip = pp::app::AppUiObserverRect {
|
||||
.x = p->m_clip_uncut.x,
|
||||
.y = p->m_clip_uncut.y,
|
||||
.width = p->m_clip_uncut.z,
|
||||
.height = p->m_clip_uncut.w,
|
||||
},
|
||||
.padding_top = YGNodeLayoutGetPadding(p->y_node, YGEdgeTop),
|
||||
.padding_right = YGNodeLayoutGetPadding(p->y_node, YGEdgeRight),
|
||||
.padding_bottom = YGNodeLayoutGetPadding(p->y_node, YGEdgeBottom),
|
||||
.padding_left = YGNodeLayoutGetPadding(p->y_node, YGEdgeLeft),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const auto plan = pp::app::plan_app_ui_observer(
|
||||
n != nullptr,
|
||||
n && n->m_display,
|
||||
n && n->m_on_screen,
|
||||
n
|
||||
? pp::app::AppUiObserverRect {
|
||||
.x = n->m_clip_uncut.x,
|
||||
.y = n->m_clip_uncut.y,
|
||||
.width = n->m_clip_uncut.z,
|
||||
.height = n->m_clip_uncut.w,
|
||||
}
|
||||
: pp::app::AppUiObserverRect {},
|
||||
parent_clips,
|
||||
height,
|
||||
zoom,
|
||||
off_x,
|
||||
off_y);
|
||||
if (!plan) {
|
||||
LOG("UI observer plan failed: %s", plan.status().message);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!n)
|
||||
return false;
|
||||
|
||||
if (plan.value().notify_leave_screen)
|
||||
n->handle_on_screen(true, false);
|
||||
if (plan.value().notify_enter_screen)
|
||||
n->handle_on_screen(false, true);
|
||||
n->m_on_screen = plan.value().next_on_screen;
|
||||
|
||||
if (!plan.value().draw_node)
|
||||
return false;
|
||||
|
||||
apply_app_scissor(pp::renderer::gl::OpenGlScissorRect {
|
||||
.enabled = 1U,
|
||||
.x = plan.value().scissor_x,
|
||||
.y = plan.value().scissor_y,
|
||||
.width = plan.value().scissor_width,
|
||||
.height = plan.value().scissor_height,
|
||||
});
|
||||
n->draw();
|
||||
return true;
|
||||
return pp::panopainter::update_legacy_app_ui_observer(*this, n);
|
||||
}
|
||||
|
||||
void App::draw(float dt)
|
||||
@@ -446,11 +358,7 @@ void App::draw(float dt)
|
||||
.height = static_cast<std::int32_t>(uirtt.getHeight()),
|
||||
});
|
||||
apply_app_scissor_test(true);
|
||||
for (int i = 1; i < layout[main_id]->m_children.size(); i++)
|
||||
layout[main_id]->m_children[i]->watch(observer);
|
||||
for (int i = 0; layout_designer.get(main_id) && i < layout_designer[main_id]->m_children.size(); i++)
|
||||
layout_designer[main_id]->m_children[i]->watch(observer);
|
||||
//msgbox->watch(observer);
|
||||
pp::panopainter::watch_legacy_app_ui_children(*this, observer, true);
|
||||
apply_app_scissor_test(false);
|
||||
uirtt.unbindFramebuffer();
|
||||
}
|
||||
@@ -465,11 +373,7 @@ void App::draw(float dt)
|
||||
.height = static_cast<std::int32_t>(height),
|
||||
});
|
||||
apply_app_scissor_test(true);
|
||||
for (int i = 0; i < layout[main_id]->m_children.size(); i++)
|
||||
layout[main_id]->m_children[i]->watch(observer);
|
||||
for (int i = 0; layout_designer.get(main_id) && i < layout_designer[main_id]->m_children.size(); i++)
|
||||
layout_designer[main_id]->m_children[i]->watch(observer);
|
||||
//msgbox->watch(observer);
|
||||
pp::panopainter::watch_legacy_app_ui_children(*this, observer, false);
|
||||
apply_app_scissor_test(false);
|
||||
}
|
||||
|
||||
@@ -492,28 +396,7 @@ void App::update(float dt)
|
||||
if (!update_plan.refresh_canvas_toolbar)
|
||||
return;
|
||||
|
||||
{
|
||||
auto mode = Canvas::I->m_current_mode;
|
||||
|
||||
CanvasModePen* pm = (CanvasModePen*)canvas->m_canvas->modes[(int)kCanvasMode::Draw][0];
|
||||
const auto toolbar = pp::app::plan_canvas_tool_button_state(
|
||||
canvas_tool_mode_from_canvas_mode(mode),
|
||||
pm && pm->m_picking,
|
||||
canvas->m_canvas->m_touch_lock);
|
||||
layout[main_id]->find<NodeButtonCustom>("btn-pick")->set_active(toolbar.pick_active);
|
||||
layout[main_id]->find<NodeButtonCustom>("btn-touchlock")->set_active(toolbar.touch_lock_active);
|
||||
|
||||
layout[main_id]->find<NodeButtonCustom>("btn-pen")->set_active(toolbar.pen_active);
|
||||
layout[main_id]->find<NodeButtonCustom>("btn-erase")->set_active(toolbar.erase_active);
|
||||
layout[main_id]->find<NodeButton>("btn-cam")->set_active(toolbar.camera_active);
|
||||
layout[main_id]->find<NodeButtonCustom>("btn-line")->set_active(toolbar.line_active);
|
||||
layout[main_id]->find<NodeButton>("btn-grid")->set_active(toolbar.grid_active);
|
||||
layout[main_id]->find<NodeButton>("btn-copy")->set_active(toolbar.copy_active);
|
||||
layout[main_id]->find<NodeButton>("btn-cut")->set_active(toolbar.cut_active);
|
||||
layout[main_id]->find<NodeButtonCustom>("btn-mask-free")->set_active(toolbar.mask_free_active);
|
||||
layout[main_id]->find<NodeButtonCustom>("btn-mask-line")->set_active(toolbar.mask_line_active);
|
||||
layout[main_id]->find<NodeButtonCustom>("btn-bucket")->set_active(toolbar.flood_fill_active);
|
||||
}
|
||||
pp::panopainter::update_legacy_canvas_toolbar(*this);
|
||||
}
|
||||
|
||||
void App::terminate()
|
||||
|
||||
Reference in New Issue
Block a user