Route quick slider preview through app core

This commit is contained in:
2026-06-05 01:26:02 +02:00
parent 31c26c3127
commit e95861e9b7
9 changed files with 324 additions and 32 deletions

View File

@@ -525,6 +525,17 @@ struct PlanQuickOperationArgs {
bool fire_event = false;
};
struct PlanQuickSliderPreviewArgs {
bool rtl = false;
float slider_x = 10.0F;
float slider_y = 20.0F;
float slider_height = 40.0F;
float zoom = 2.0F;
bool pen_mode = true;
bool line_mode = false;
bool bad_float = false;
};
struct PlanToolsMenuArgs {
std::string command = "shortcuts";
bool sonarpen_available = false;
@@ -1996,6 +2007,7 @@ void print_help()
<< " plan-history-operation --kind undo|redo|clear [--undo-count N] [--redo-count N] [--memory-bytes N]\n"
<< " plan-main-toolbar --command open|save|undo|redo|clear-history|clear-canvas|message-box|settings [--undo-count N] [--redo-count N] [--memory-bytes N] [--no-canvas]\n"
<< " plan-quick-operation --kind brush|color|restore|reset [--current-index N] [--slot-index N] [--brush-index N] [--color-index N] [--slot-count N] [--fire-event]\n"
<< " plan-quick-slider-preview [--rtl] [--slider-x N] [--slider-y N] [--slider-height N] [--zoom N] [--pen-mode|--no-pen-mode] [--line-mode|--no-line-mode] [--bad-float]\n"
<< " plan-share-file [--path FILE]\n"
<< " plan-picked-path [--path FILE]\n"
<< " plan-display-file [--path FILE]\n"
@@ -7129,6 +7141,94 @@ int plan_quick_operation(int argc, char** argv)
return 0;
}
pp::foundation::Status parse_plan_quick_slider_preview_args(
int argc,
char** argv,
PlanQuickSliderPreviewArgs& args)
{
for (int i = 2; i < argc; ++i) {
const std::string_view key(argv[i]);
if (key == "--slider-x" || key == "--slider-y" || key == "--slider-height" || key == "--zoom") {
if (i + 1 >= argc) {
return pp::foundation::Status::invalid_argument("missing value for option");
}
const auto value = parse_float_arg(argv[++i]);
if (!value) {
return value.status();
}
if (key == "--slider-x") {
args.slider_x = value.value();
} else if (key == "--slider-y") {
args.slider_y = value.value();
} else if (key == "--slider-height") {
args.slider_height = value.value();
} else {
args.zoom = value.value();
}
} else if (key == "--rtl") {
args.rtl = true;
} else if (key == "--pen-mode") {
args.pen_mode = true;
} else if (key == "--no-pen-mode") {
args.pen_mode = false;
} else if (key == "--line-mode") {
args.line_mode = true;
} else if (key == "--no-line-mode") {
args.line_mode = false;
} else if (key == "--bad-float") {
args.bad_float = true;
} else {
return pp::foundation::Status::invalid_argument("unknown option");
}
}
return pp::foundation::Status::success();
}
int plan_quick_slider_preview(int argc, char** argv)
{
PlanQuickSliderPreviewArgs args;
const auto status = parse_plan_quick_slider_preview_args(argc, argv, args);
if (!status.ok()) {
print_error("plan-quick-slider-preview", status.message);
return 2;
}
const auto plan = pp::app::plan_quick_slider_preview(pp::app::QuickSliderPreviewInput {
.ui_rtl = args.rtl,
.slider_x = args.bad_float ? std::nanf("") : args.slider_x,
.slider_y = args.slider_y,
.slider_height = args.slider_height,
.zoom = args.zoom,
.has_pen_mode = args.pen_mode,
.has_line_mode = args.line_mode,
});
if (!plan) {
print_error("plan-quick-slider-preview", plan.status().message);
return 2;
}
const auto& value = plan.value();
std::cout << "{\"ok\":true,\"command\":\"plan-quick-slider-preview\""
<< ",\"state\":{\"rtl\":" << json_bool(args.rtl)
<< ",\"sliderX\":" << args.slider_x
<< ",\"sliderY\":" << args.slider_y
<< ",\"sliderHeight\":" << args.slider_height
<< ",\"zoom\":" << args.zoom
<< ",\"penMode\":" << json_bool(args.pen_mode)
<< ",\"lineMode\":" << json_bool(args.line_mode)
<< "},\"plan\":{\"cursorX\":" << value.cursor_x
<< ",\"cursorY\":" << value.cursor_y
<< ",\"updatesPenMode\":" << json_bool(value.updates_pen_mode)
<< ",\"updatesLineMode\":" << json_bool(value.updates_line_mode)
<< ",\"drawsTip\":" << json_bool(value.draws_tip)
<< ",\"disablesPenOutline\":" << json_bool(value.disables_pen_outline)
<< ",\"redrawsBrushPreview\":" << json_bool(value.redraws_brush_preview)
<< ",\"invokesChangeCallback\":" << json_bool(value.invokes_change_callback)
<< "}}\n";
return 0;
}
pp::foundation::Status parse_plan_share_file_args(
int argc,
char** argv,
@@ -9669,6 +9769,10 @@ int main(int argc, char** argv)
return plan_quick_operation(argc, argv);
}
if (command == "plan-quick-slider-preview") {
return plan_quick_slider_preview(argc, argv);
}
if (command == "plan-share-file") {
return plan_share_file(argc, argv);
}