From 63486b8438a9d1ec001adc1476a75b276ee308b3 Mon Sep 17 00:00:00 2001 From: Christopher Dumas Date: Sat, 25 May 2019 09:26:23 -0700 Subject: [PATCH] implemented settings for window manager. --- Base/home/anon/WindowManager.ini | 4 +- Servers/WindowServer/WSCompositor.cpp | 6 +- Servers/WindowServer/WSWindowManager.cpp | 87 ++++++++++++------------ Servers/WindowServer/WSWindowManager.h | 2 + Servers/WindowServer/main.cpp | 6 +- 5 files changed, 54 insertions(+), 51 deletions(-) diff --git a/Base/home/anon/WindowManager.ini b/Base/home/anon/WindowManager.ini index 0ab8dc8f8e..2d5f54b422 100644 --- a/Base/home/anon/WindowManager.ini +++ b/Base/home/anon/WindowManager.ini @@ -5,7 +5,7 @@ Height=1080 [Cursor] Arrow=/res/cursors/arrow.png ResizeH=/res/cursors/resize-horizontal.png -ResizeV=/res/cursor/resize-vertical.png +ResizeV=/res/cursors/resize-vertical.png ResizeDTLBR=/res/cursors/resize-diagonal-tlbr.png ResizeDBLTR=/res/cursors/resize-diagonal-bltr.png IBeam=/res/cursors/i-beam.png @@ -29,3 +29,5 @@ DraggingWindowTitle=255,255,255 HighlightWindowBorder=161,13,13 HighlightWindowBorder2=250,187,187 HighlightWindowTitle=255,255,255 + +MenuSelectionColor=132,53,26 diff --git a/Servers/WindowServer/WSCompositor.cpp b/Servers/WindowServer/WSCompositor.cpp index 77b7268317..6e3f842577 100644 --- a/Servers/WindowServer/WSCompositor.cpp +++ b/Servers/WindowServer/WSCompositor.cpp @@ -76,10 +76,8 @@ void WSCompositor::compose() for (auto& dirty_rect : dirty_rects.rects()) { if (wm.any_opaque_window_contains_rect(dirty_rect)) continue; - if (!m_wallpaper) - m_back_painter->fill_rect(dirty_rect, wm.m_background_color); - else - m_back_painter->blit(dirty_rect.location(), *m_wallpaper, dirty_rect); + m_back_painter->fill_rect(dirty_rect, wm.m_background_color); + m_back_painter->blit(dirty_rect.location(), *m_wallpaper, dirty_rect); } auto compose_window = [&] (WSWindow& window) -> IterationDecision { diff --git a/Servers/WindowServer/WSWindowManager.cpp b/Servers/WindowServer/WSWindowManager.cpp index cea9fbb7ac..52d943ddb8 100644 --- a/Servers/WindowServer/WSWindowManager.cpp +++ b/Servers/WindowServer/WSWindowManager.cpp @@ -38,11 +38,10 @@ WSWindowManager::WSWindowManager() { s_the = this; - m_wm_config = CConfigFile::get_for_app("WindowManager"); m_username = getlogin(); - m_menu_selection_color = Color::from_rgb(0x84351a); + reload_config(); struct AppMenuItem { const char *binary_name; @@ -117,44 +116,6 @@ WSWindowManager::WSWindowManager() }; } - dbgprintf("WindowManager: Loaded config from %s\n", - m_wm_config->file_name().view().characters()); - dbgprintf("WindowManager: Screen size is %dx%d\n", - m_wm_config->read_num_entry("Screen", "Width", 800), - m_wm_config->read_num_entry("Screen", "Height", 600)); - set_resolution(m_wm_config->read_num_entry("Screen", "Width", 800), - m_wm_config->read_num_entry("Screen", "Height", 600)); - - dbgprintf("WindowManager: Loading cursors (arrow: %s)\n", m_wm_config->read_entry("Cursor", "Arrow", "").characters()); - m_arrow_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "Arrow", "")), { 2, 2 }); - m_resize_horizontally_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "ResizeH", ""))); - m_resize_vertically_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "ResizeV", ""))); - m_resize_diagonally_tlbr_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "ResizeDTLBR", ""))); - m_resize_diagonally_bltr_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "ResizeDBLTR", ""))); - m_i_beam_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "IBeam", ""))); - m_disallowed_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "Disallowed", ""))); - m_move_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "Move", ""))); - - dbgprintf("WindowManager: Loading colors\n"); - m_background_color = m_wm_config->read_color_entry("Colors", "Background", Color::Red); - dbgprintf("-- BGColor: %s\n", m_background_color.to_string()); - - m_active_window_border_color = m_wm_config->read_color_entry("Colors", "ActiveWindowBorder", Color::Red); - m_active_window_border_color2 = m_wm_config->read_color_entry("Colors", "ActiveWindowBorder2", Color::Red); - m_active_window_title_color = m_wm_config->read_color_entry("Colors", "ActiveWindowTitle", Color::Red); - - m_inactive_window_border_color = m_wm_config->read_color_entry("Colors", "InactiveWindowBorder", Color::Red); - m_inactive_window_border_color2 = m_wm_config->read_color_entry("Colors", "InactiveWindowBorder2", Color::Red); - m_inactive_window_title_color = m_wm_config->read_color_entry("Colors", "InactiveWindowTitle", Color::Red); - - m_dragging_window_border_color = m_wm_config->read_color_entry("Colors", "DraggingWindowBorder", Color::Red); - m_dragging_window_border_color2 = m_wm_config->read_color_entry("Colors", "DraggingWindowBorder2", Color::Red); - m_dragging_window_title_color = m_wm_config->read_color_entry("Colors", "DraggingWindowTitle", Color::Red); - - m_highlight_window_border_color = m_wm_config->read_color_entry("Colors", "HighlightWindowBorder", Color::Red); - m_highlight_window_border_color2 = m_wm_config->read_color_entry("Colors", "HighlightWindowBorder2", Color::Red); - m_highlight_window_title_color = m_wm_config->read_color_entry("Colors", "HighlightWindowTitle", Color::Red); - // NOTE: This ensures that the system menu has the correct dimensions. set_current_menubar(nullptr); @@ -176,6 +137,40 @@ WSWindowManager::~WSWindowManager() { } +void WSWindowManager::reload_config() +{ + m_wm_config = CConfigFile::get_for_app("WindowManager"); + + m_arrow_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "Arrow", "")), { 2, 2 }); + m_resize_horizontally_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "ResizeH", ""))); + m_resize_vertically_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "ResizeV", ""))); + m_resize_diagonally_tlbr_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "ResizeDTLBR", ""))); + m_resize_diagonally_bltr_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "ResizeDBLTR", ""))); + m_i_beam_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "IBeam", ""))); + m_disallowed_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "Disallowed", ""))); + m_move_cursor = WSCursor::create(*GraphicsBitmap::load_from_file(m_wm_config->read_entry("Cursor", "Move", ""))); + + m_background_color = m_wm_config->read_color_entry("Colors", "Background", Color::Red); + + m_active_window_border_color = m_wm_config->read_color_entry("Colors", "ActiveWindowBorder", Color::Red); + m_active_window_border_color2 = m_wm_config->read_color_entry("Colors", "ActiveWindowBorder2", Color::Red); + m_active_window_title_color = m_wm_config->read_color_entry("Colors", "ActiveWindowTitle", Color::Red); + + m_inactive_window_border_color = m_wm_config->read_color_entry("Colors", "InactiveWindowBorder", Color::Red); + m_inactive_window_border_color2 = m_wm_config->read_color_entry("Colors", "InactiveWindowBorder2", Color::Red); + m_inactive_window_title_color = m_wm_config->read_color_entry("Colors", "InactiveWindowTitle", Color::Red); + + m_dragging_window_border_color = m_wm_config->read_color_entry("Colors", "DraggingWindowBorder", Color::Red); + m_dragging_window_border_color2 = m_wm_config->read_color_entry("Colors", "DraggingWindowBorder2", Color::Red); + m_dragging_window_title_color = m_wm_config->read_color_entry("Colors", "DraggingWindowTitle", Color::Red); + + m_highlight_window_border_color = m_wm_config->read_color_entry("Colors", "HighlightWindowBorder", Color::Red); + m_highlight_window_border_color2 = m_wm_config->read_color_entry("Colors", "HighlightWindowBorder2", Color::Red); + m_highlight_window_title_color = m_wm_config->read_color_entry("Colors", "HighlightWindowTitle", Color::Red); + + m_menu_selection_color = m_wm_config->read_color_entry("Colors", "MenuSelectionColor", Color::Red); +} + const Font& WSWindowManager::font() const { return Font::default_font(); @@ -207,11 +202,13 @@ void WSWindowManager::set_resolution(int width, int height) WSClientConnection::for_each_client([&] (WSClientConnection& client) { client.notify_about_new_screen_rect(WSScreen::the().rect()); }); - /*dbgprintf("Saving resolution: %dx%d to config file at %s.\n", width, height, - m_wm_config->file_name().characters()); - m_wm_config->write_num_entry("Screen", "Width", width); - m_wm_config->write_num_entry("Screen", "Height", height); - m_wm_config->sync();*/ + if (m_wm_config) { + dbgprintf("Saving resolution: %dx%d to config file at %s.\n", width, height, + m_wm_config->file_name().characters()); + m_wm_config->write_num_entry("Screen", "Width", width); + m_wm_config->write_num_entry("Screen", "Height", height); + m_wm_config->sync(); + } } diff --git a/Servers/WindowServer/WSWindowManager.h b/Servers/WindowServer/WSWindowManager.h index 86a766471d..b76db2a558 100644 --- a/Servers/WindowServer/WSWindowManager.h +++ b/Servers/WindowServer/WSWindowManager.h @@ -156,6 +156,8 @@ private: void tell_wm_listener_about_window_rect(WSWindow& listener, WSWindow&); void pick_new_active_window(); + void reload_config(); + RetainPtr m_arrow_cursor; RetainPtr m_resize_horizontally_cursor; RetainPtr m_resize_vertically_cursor; diff --git a/Servers/WindowServer/main.cpp b/Servers/WindowServer/main.cpp index b8320b1858..d4e889c1f5 100644 --- a/Servers/WindowServer/main.cpp +++ b/Servers/WindowServer/main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -18,7 +19,10 @@ int main(int, char**) } WSEventLoop loop; - WSScreen screen(1024, 768); + + auto wm_config = CConfigFile::get_for_app("WindowManager"); + WSScreen screen(wm_config->read_num_entry("Screen", "Width", 1024), + wm_config->read_num_entry("Screen", "Height", 768)); WSCompositor::the(); WSWindowManager window_manager;