Route canvas view execution through app core

This commit is contained in:
2026-06-05 05:47:42 +02:00
parent 9373e07d3e
commit e42afcc83f
15 changed files with 456 additions and 33 deletions

View File

@@ -2033,6 +2033,8 @@ void print_help()
<< " plan-canvas-tool --kind draw|erase|line|camera|grid|copy|cut|fill|mask-free|mask-line|bucket|pick|touch-lock [--current-mode-draw]\n"
<< " plan-canvas-tool-state [--mode draw|erase|line|camera|grid|copy|cut|fill|mask-free|mask-line|bucket] [--picking] [--touch-lock]\n"
<< " plan-canvas-camera-reset\n"
<< " plan-canvas-view-density [--density N] [--bad-float]\n"
<< " plan-canvas-view-cursor-mode [--mode N]\n"
<< " plan-canvas-cursor [--mode draw|erase|line|camera|grid|copy|cut|fill|mask-free|mask-line|bucket] [--visibility never|small-brush|not-painting|always] [--brush-size N] [--no-brush] [--drawing] [--alt] [--resizing] [--picking] [--bad-size]\n"
<< " plan-grid-operation --kind pick|load|reload|clear|render|commit [--path FILE] [--no-heightmap] [--no-canvas] [--float32] [--float16] [--texture-resolution N] [--samples N]\n"
<< " plan-history-operation --kind undo|redo|clear [--undo-count N] [--redo-count N] [--memory-bytes N]\n"
@@ -6770,6 +6772,78 @@ int plan_canvas_camera_reset(int argc, char** argv)
return 0;
}
int plan_canvas_view_density(int argc, char** argv)
{
float density = 1.0F;
bool bad_float = false;
for (int i = 2; i < argc; ++i) {
const std::string_view key(argv[i]);
if (key == "--density") {
if (i + 1 >= argc) {
print_error("plan-canvas-view-density", "missing value for option");
return 2;
}
const auto value = parse_float_arg(argv[++i]);
if (!value) {
print_error("plan-canvas-view-density", value.status().message);
return 2;
}
density = value.value();
} else if (key == "--bad-float") {
bad_float = true;
} else {
print_error("plan-canvas-view-density", "unknown option");
return 2;
}
}
const auto plan = pp::app::plan_canvas_view_density(bad_float ? std::nanf("") : density);
if (!plan) {
print_error("plan-canvas-view-density", plan.status().message);
return 2;
}
std::cout << "{\"ok\":true,\"command\":\"plan-canvas-view-density\""
<< ",\"density\":" << plan.value().density
<< ",\"recreatesBuffers\":" << json_bool(plan.value().recreates_buffers)
<< "}\n";
return 0;
}
int plan_canvas_view_cursor_mode(int argc, char** argv)
{
int mode = 0;
for (int i = 2; i < argc; ++i) {
const std::string_view key(argv[i]);
if (key == "--mode") {
if (i + 1 >= argc) {
print_error("plan-canvas-view-cursor-mode", "missing value for option");
return 2;
}
const auto value = parse_i32_arg(argv[++i]);
if (!value) {
print_error("plan-canvas-view-cursor-mode", value.status().message);
return 2;
}
mode = value.value();
} else {
print_error("plan-canvas-view-cursor-mode", "unknown option");
return 2;
}
}
const auto plan = pp::app::plan_canvas_view_cursor_mode(mode);
if (!plan) {
print_error("plan-canvas-view-cursor-mode", plan.status().message);
return 2;
}
std::cout << "{\"ok\":true,\"command\":\"plan-canvas-view-cursor-mode\""
<< ",\"mode\":" << static_cast<int>(plan.value().mode)
<< "}\n";
return 0;
}
pp::foundation::Status parse_plan_canvas_cursor_args(
int argc,
char** argv,
@@ -9933,6 +10007,14 @@ int main(int argc, char** argv)
return plan_canvas_camera_reset(argc, argv);
}
if (command == "plan-canvas-view-density") {
return plan_canvas_view_density(argc, argv);
}
if (command == "plan-canvas-view-cursor-mode") {
return plan_canvas_view_cursor_mode(argc, argv);
}
if (command == "plan-canvas-cursor") {
return plan_canvas_cursor(argc, argv);
}