Serenity Operating System
at master 79 lines 3.2 kB view raw
1/* 2 * Copyright (c) 2022, MacDue <macdue@dueutil.tech> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include "HighlightWidget.h" 8 9#include <Applications/MouseSettings/HighlightWidgetGML.h> 10#include <LibGUI/ConnectionToWindowServer.h> 11 12HighlightWidget::HighlightWidget() 13{ 14 load_from_gml(highlight_widget_gml).release_value_but_fixme_should_propagate_errors(); 15 16 m_highlight_preview = find_descendant_of_type_named<GUI::Frame>("preview_frame")->add<MouseSettings::HighlightPreviewWidget>(palette()); 17 18 auto current_highlight_color = GUI::ConnectionToWindowServer::the().get_cursor_highlight_color(); 19 auto current_highlight_color_no_alpha = current_highlight_color; 20 current_highlight_color_no_alpha.set_alpha(255); 21 m_highlight_color_input = *find_descendant_of_type_named<GUI::ColorInput>("highlight_color_input"); 22 m_highlight_color_input->set_color(current_highlight_color_no_alpha); 23 m_highlight_color_input->on_change = [&]() { 24 m_highlight_preview->set_color(highlight_color()); 25 set_modified(true); 26 }; 27 28 m_highlight_opacity_slider = *find_descendant_of_type_named<GUI::Slider>("highlight_opacity_slider"); 29 m_highlight_opacity_slider->set_value(current_highlight_color.alpha()); 30 m_highlight_opacity_slider->on_change = [&](int) { 31 m_highlight_preview->set_color(highlight_color()); 32 set_modified(true); 33 }; 34 35 m_highlight_radius_slider = *find_descendant_of_type_named<GUI::Slider>("highlight_radius_slider"); 36 m_highlight_radius_slider->set_value(GUI::ConnectionToWindowServer::the().get_cursor_highlight_radius()); 37 m_highlight_radius_slider->on_change = [&](int) { 38 m_highlight_preview->set_radius(highlight_radius()); 39 set_modified(true); 40 }; 41 42 m_highlight_preview->set_color(highlight_color()); 43 m_highlight_preview->set_radius(highlight_radius()); 44} 45 46Gfx::Color HighlightWidget::highlight_color() 47{ 48 auto color = m_highlight_color_input->color(); 49 color.set_alpha(m_highlight_opacity_slider->value()); 50 return color; 51} 52 53int HighlightWidget::highlight_radius() 54{ 55 return m_highlight_radius_slider->value(); 56} 57 58void HighlightWidget::apply_settings() 59{ 60 GUI::ConnectionToWindowServer::the().async_set_cursor_highlight_radius(highlight_radius()); 61 GUI::ConnectionToWindowServer::the().async_set_cursor_highlight_color(highlight_color()); 62} 63 64void HighlightWidget::reset_default_values() 65{ 66 constexpr auto default_highlight_color = Gfx::Color::NamedColor::Red; 67 constexpr auto default_highlight_opacity = 110; // (in range of 0-255) 68 // Disable the highlighting by default. 69 // The range of radii you can configure the highlight to is 20 to 60px, 70 // anything less than that is treated as 'no highlighting'. 71 constexpr auto default_highlight_radius_length = 25; 72 m_highlight_opacity_slider->set_value(default_highlight_opacity); 73 m_highlight_color_input->set_color(default_highlight_color); 74 m_highlight_radius_slider->set_value(default_highlight_radius_length); 75 deferred_invoke([&] { 76 // Avoid artifact due to setting both color and opacity sliders: 77 m_highlight_preview->update(); 78 }); 79}