diff --git a/scripts/autoload/ccs_service.gd b/scripts/autoload/ccs_service.gd index ac446bf..b555d0a 100644 --- a/scripts/autoload/ccs_service.gd +++ b/scripts/autoload/ccs_service.gd @@ -17,6 +17,9 @@ signal request_failed(message: String) const TEXT_SCALE_MIN := 0.85 const TEXT_SCALE_MAX := 1.35 const TEXT_SCALE_STEP := 0.1 +const TEXT_SCALE_SETTINGS_PATH := "user://settings.cfg" +const TEXT_SCALE_SETTINGS_SECTION := "study" +const TEXT_SCALE_SETTINGS_KEY := "ccs_text_scale" var api_url := DEFAULT_API_URL var request: HTTPRequest @@ -37,6 +40,7 @@ var request_access_token := "" func _ready() -> void: api_url = EndpointConfig.resolve(str(ProjectSettings.get_setting("step3/ccs_api_url", DEFAULT_API_URL)), "/api/ccs") + text_scale = _load_text_scale_preference() request = HTTPRequest.new() request.request_completed.connect(_on_request_completed) add_child(request) @@ -100,6 +104,23 @@ func submit_report(attempt_id: String, category: String, details: String) -> voi func adjust_text_scale(delta: float) -> void: text_scale = clampf(text_scale + delta, TEXT_SCALE_MIN, TEXT_SCALE_MAX) + _save_text_scale_preference(text_scale) + + +func _load_text_scale_preference() -> float: + var config := ConfigFile.new() + if config.load(TEXT_SCALE_SETTINGS_PATH) == OK: + var saved: float = config.get_value(TEXT_SCALE_SETTINGS_SECTION, TEXT_SCALE_SETTINGS_KEY, 1.0) + return clampf(saved, TEXT_SCALE_MIN, TEXT_SCALE_MAX) + return 1.0 + + +func _save_text_scale_preference(value: float) -> void: + var config := ConfigFile.new() + config.load(TEXT_SCALE_SETTINGS_PATH) + config.set_value(TEXT_SCALE_SETTINGS_SECTION, TEXT_SCALE_SETTINGS_KEY, value) + if config.save(TEXT_SCALE_SETTINGS_PATH) != OK: + push_warning("Unable to save CCS text scale preference.") func toggle_highlight(attempt_id: String, region_id: String, start: int, end: int) -> void: diff --git a/scripts/ui/question_player.gd b/scripts/ui/question_player.gd index 9aa0b38..d9e6591 100644 --- a/scripts/ui/question_player.gd +++ b/scripts/ui/question_player.gd @@ -18,6 +18,9 @@ const CORRECT_ADVANCE_DELAY_SECONDS := 1.25 const TEXT_SCALE_MIN := 0.85 const TEXT_SCALE_MAX := 1.35 const TEXT_SCALE_STEP := 0.1 +const TEXT_SCALE_SETTINGS_PATH := "user://settings.cfg" +const TEXT_SCALE_SETTINGS_SECTION := "study" +const TEXT_SCALE_SETTINGS_KEY := "question_text_scale" const REPORT_DETAILS_MIN := 10 const REPORT_DETAILS_MAX := 2000 const MEDIA_ZOOM_MIN := 0.25 @@ -146,6 +149,7 @@ var shake_origin := Vector2.ZERO func _ready() -> void: theme_service = get_node("/root/UIThemeService") + question_text_scale = _load_text_scale_preference() set_anchors_preset(Control.PRESET_FULL_RECT) add_theme_constant_override("separation", 10) if not QuestionBankService.choice_percentages_updated.is_connected(_on_choice_percentages_updated): @@ -2121,11 +2125,28 @@ func _adjust_question_text_scale(delta: float) -> void: if is_equal_approx(next_scale, question_text_scale): return question_text_scale = next_scale + _save_text_scale_preference(next_scale) _refresh_scaled_fonts(self) _render_stem() _apply_saved_choice_state() +func _load_text_scale_preference() -> float: + var config := ConfigFile.new() + if config.load(TEXT_SCALE_SETTINGS_PATH) == OK: + var saved: float = config.get_value(TEXT_SCALE_SETTINGS_SECTION, TEXT_SCALE_SETTINGS_KEY, 1.0) + return clamp(saved, TEXT_SCALE_MIN, TEXT_SCALE_MAX) + return 1.0 + + +func _save_text_scale_preference(value: float) -> void: + var config := ConfigFile.new() + config.load(TEXT_SCALE_SETTINGS_PATH) + config.set_value(TEXT_SCALE_SETTINGS_SECTION, TEXT_SCALE_SETTINGS_KEY, value) + if config.save(TEXT_SCALE_SETTINGS_PATH) != OK: + push_warning("Unable to save question text scale preference.") + + func _set_scaled_label(label: Label, base_size: int, color: Color = Style.TEXT) -> void: label.set_meta("question_base_font_size", base_size) label.add_theme_color_override("font_color", color)