126 lines
3.4 KiB
C++
126 lines
3.4 KiB
C++
#include "pch.h"
|
|
#include "app.h"
|
|
#include "node_text.h"
|
|
#include "node_panel_floating.h"
|
|
#include "app_core/about_menu.h"
|
|
#include "app_core/app_preferences.h"
|
|
#include "app_core/document_layer.h"
|
|
#include "app_core/document_canvas.h"
|
|
#include "app_core/app_status.h"
|
|
#include "app_core/tools_menu.h"
|
|
#include "legacy_app_preference_services.h"
|
|
#include "legacy_app_shell_services.h"
|
|
#include "legacy_document_layer_services.h"
|
|
#include "legacy_preference_storage.h"
|
|
#include "font.h"
|
|
|
|
namespace pp::panopainter {
|
|
void bind_legacy_main_toolbar(App& app);
|
|
void bind_legacy_file_menu(App& app);
|
|
void bind_legacy_edit_menu(App& app);
|
|
void bind_legacy_about_menu(App& app);
|
|
void bind_legacy_layer_menu(App& app);
|
|
void bind_legacy_tools_menu(App& app);
|
|
void init_layout_bootstrap(App& app);
|
|
}
|
|
|
|
namespace {
|
|
|
|
[[nodiscard]] bool should_open_tools_panel(const pp::app::ToolsPanelPlan& plan) noexcept
|
|
{
|
|
return plan.action == pp::app::ToolsPanelAction::open_floating_panel;
|
|
}
|
|
|
|
void apply_tools_panel_chrome(NodePanelFloating& panel, const pp::app::ToolsPanelPlan& plan)
|
|
{
|
|
if (plan.width > 0 && plan.height > 0) {
|
|
panel.SetSize(static_cast<float>(plan.width), static_cast<float>(plan.height));
|
|
} else {
|
|
if (plan.width > 0)
|
|
panel.SetWidth(static_cast<float>(plan.width));
|
|
if (plan.height > 0)
|
|
panel.SetHeight(static_cast<float>(plan.height));
|
|
}
|
|
if (plan.min_width > 0)
|
|
panel.SetMinWidth(static_cast<float>(plan.min_width));
|
|
if (plan.min_height > 0)
|
|
panel.SetMinHeight(static_cast<float>(plan.min_height));
|
|
panel.m_title->set_text(plan.title.data());
|
|
panel.m_droppable = plan.droppable;
|
|
}
|
|
|
|
void execute_tools_menu_plan(App& app, const pp::app::ToolsMenuPlan& plan)
|
|
{
|
|
pp::panopainter::execute_legacy_tools_menu_plan(app, plan);
|
|
}
|
|
|
|
void execute_document_layer_merge_plan(App& app, const pp::app::DocumentLayerMergePlan& plan)
|
|
{
|
|
const auto status = pp::panopainter::execute_legacy_document_layer_merge_plan(app, plan);
|
|
if (!status.ok())
|
|
LOG("Layer merge failed: %s", status.message);
|
|
}
|
|
|
|
} // namespace
|
|
|
|
void App::title_update()
|
|
{
|
|
if (auto docname = layout[main_id]->find<NodeText>("txt-docname"))
|
|
{
|
|
const auto title = pp::app::make_document_title(
|
|
doc_name,
|
|
canvas->m_canvas->m_unsaved,
|
|
canvas->m_canvas->m_width);
|
|
docname->set_text(title.c_str());
|
|
}
|
|
if (auto node = layout[main_id]->find<NodeText>("txt-dpi"))
|
|
{
|
|
const auto label = pp::app::make_dpi_label(zoom);
|
|
node->set_text(label.c_str());
|
|
}
|
|
}
|
|
|
|
void App::init_toolbar_main()
|
|
{
|
|
pp::panopainter::bind_legacy_main_toolbar(*this);
|
|
}
|
|
|
|
void App::init_menu_file()
|
|
{
|
|
pp::panopainter::bind_legacy_file_menu(*this);
|
|
}
|
|
|
|
void App::init_menu_edit()
|
|
{
|
|
pp::panopainter::bind_legacy_edit_menu(*this);
|
|
}
|
|
|
|
void App::init_menu_tools()
|
|
{
|
|
pp::panopainter::bind_legacy_tools_menu(*this);
|
|
}
|
|
|
|
void App::init_menu_about()
|
|
{
|
|
pp::panopainter::bind_legacy_about_menu(*this);
|
|
}
|
|
|
|
void App::init_menu_layer()
|
|
{
|
|
pp::panopainter::bind_legacy_layer_menu(*this);
|
|
}
|
|
|
|
void App::initLayout()
|
|
{
|
|
pp::panopainter::init_layout_bootstrap(*this);
|
|
}
|
|
|
|
void App::set_ui_scale(float scale)
|
|
{
|
|
const auto plan = pp::app::plan_ui_scale(scale, display_density);
|
|
zoom = plan.scale;
|
|
FontManager::change_scale(plan.font_scale);
|
|
pp::panopainter::save_legacy_ui_scale_preference(plan.scale);
|
|
App::I->title_update();
|
|
}
|