Centralize legacy app preferences

This commit is contained in:
2026-06-04 14:18:18 +02:00
parent ca5b94b044
commit f8243566c4
9 changed files with 352 additions and 22 deletions

View File

@@ -1,5 +1,7 @@
#pragma once
#include "foundation/result.h"
#include <cstddef>
#include <span>
@@ -44,6 +46,18 @@ struct StoredBooleanPreferencePlan {
bool value = false;
};
class AppPreferenceServices {
public:
virtual ~AppPreferenceServices() = default;
virtual void apply_ui_scale(const ScaleApplicationPlan& plan) = 0;
virtual void apply_viewport_scale(const ScaleApplicationPlan& plan) = 0;
virtual void apply_interface_direction(const InterfaceDirectionPlan& plan) = 0;
virtual void apply_vr_controllers_preference(const StoredBooleanPreferencePlan& plan) = 0;
virtual void apply_timelapse_preference(const TimelapsePreferencePlan& plan) = 0;
virtual void apply_canvas_cursor_mode(const StoredIntegerPreferencePlan& plan) = 0;
};
[[nodiscard]] constexpr ScaleApplicationPlan plan_ui_scale(
float requested_scale,
float display_density) noexcept
@@ -111,4 +125,55 @@ struct StoredBooleanPreferencePlan {
return { mode };
}
[[nodiscard]] inline pp::foundation::Status execute_ui_scale_preference(
float requested_scale,
float display_density,
AppPreferenceServices& services)
{
services.apply_ui_scale(plan_ui_scale(requested_scale, display_density));
return pp::foundation::Status::success();
}
[[nodiscard]] inline pp::foundation::Status execute_viewport_scale_preference(
float requested_scale,
float display_density,
AppPreferenceServices& services)
{
services.apply_viewport_scale(plan_viewport_scale(requested_scale, display_density));
return pp::foundation::Status::success();
}
[[nodiscard]] inline pp::foundation::Status execute_interface_direction_preference(
bool right_to_left,
AppPreferenceServices& services)
{
services.apply_interface_direction(plan_interface_direction(right_to_left));
return pp::foundation::Status::success();
}
[[nodiscard]] inline pp::foundation::Status execute_vr_controllers_preference(
bool enabled,
AppPreferenceServices& services)
{
services.apply_vr_controllers_preference(plan_vr_controllers_preference(enabled));
return pp::foundation::Status::success();
}
[[nodiscard]] inline pp::foundation::Status execute_timelapse_preference(
bool enabled,
bool recording_running,
AppPreferenceServices& services)
{
services.apply_timelapse_preference(plan_timelapse_preference(enabled, recording_running));
return pp::foundation::Status::success();
}
[[nodiscard]] inline pp::foundation::Status execute_canvas_cursor_mode_preference(
int mode,
AppPreferenceServices& services)
{
services.apply_canvas_cursor_mode(plan_canvas_cursor_mode(mode));
return pp::foundation::Status::success();
}
}