forked from 1b-agent/opencadstudio-upstream
feat: web automation wrapper (#1349), DATALINK table on web, System theme; honest decode accounting
Ported from2c38de53(#1717). Main already carries the hatch PDF draw order fix (#1345), the numeric set_properties compare (#1348) and the web open from bytes, so those parts stay out; what remains: #1349 — window.ocsControl.ready/request promise wrapper with an ocs-ready event (web/ocs-control.js, loaded by the web page), and the startup donation prompt is suppressed once a control request is seen (opt-in pre-boot via localStorage["opencadstudio.automation"] = "1"). docs/automation/web.md documents both. The control protocol stays at 1. DATALINK CSV-to-table works on web (picker + bytes through the session registry — was std::fs, silently dead); COLORSCHEME accepts System (prefers-color-scheme on web, AppsUseLightTheme on Windows). Decode accounting, made honest per the fix-of-fix review: into_rgba8 allocates the RGBA destination while the native buffer is alive for every non-Rgba8 layout (L8 5, La8 6, Rgb8 7, L16 6, La16 8 B/px peaks — the formula now says so), GIF bills the screen+frame coexistence at 8 B/px, and TIFF drops the 3x multipliers both ways — tiff 0.11 splits the given budget between frame and scratch (a total ceiling), so the old double-billing refused honest 16-bit GeoTIFFs ~2.25x early while admitting hostile chunk transients at 3x. (cherry picked from commit2c38de53)
This commit is contained in:
1 parent
f015c3b5fa
commit
db8db14006
37 files changed
+436
-52
No files matched your search
@@ -1348,6 +1348,14 @@ impl OpenCADStudio {
|
||||
pub(in crate::app) fn apply_config(&mut self, cfg: crate::app::config::AppConfig) {
|
||||
self.apply_settings(&cfg.settings);
|
||||
self.ui_theme = cfg.theme.clone();
|
||||
// A saved `System` scheme re-resolves at boot: the stored palette is
|
||||
// whatever the last resolution produced, so refresh it alongside the
|
||||
// live theme (COLORSCHEME SYSTEM documents this boot-time read).
|
||||
if self.ui_theme.name.eq_ignore_ascii_case("System") {
|
||||
self.ui_theme.palette = crate::app::config::UiThemePalette::from_iced(
|
||||
crate::app::config::resolve_system_theme().seed(),
|
||||
);
|
||||
}
|
||||
self.active_theme = self.ui_theme.to_iced();
|
||||
self.theme_color_inputs = self.ui_theme.palette.hex_values();
|
||||
self.model_space = cfg.model_space;
|
||||
|
||||
@@ -2964,6 +2964,12 @@ impl OpenCADStudio {
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
Message::ScriptFilePicked(None) => Task::none(),
|
||||
|
||||
// Web DATALINK: the picked .csv's bytes arrived — register them
|
||||
// as the link's in-session source, then run the same table-insert
|
||||
// path the native typed-path command feeds.
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
Message::DataLinkCsvPicked(picked) => self.on_datalink_csv_picked(picked),
|
||||
|
||||
// Web CENTERLTYPEFILE: the picked .lin/.dnl file's text arrived —
|
||||
// load its linetypes, then record the setting under the file's
|
||||
// name (the native command reads the typed path inside
|
||||
|
||||
Reference in new issue
Block a user