SystemTheme.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include <LibCore/CConfigFile.h>
  2. #include <LibDraw/SystemTheme.h>
  3. static SystemTheme dummy_theme;
  4. static const SystemTheme* theme_page = &dummy_theme;
  5. static RefPtr<SharedBuffer> theme_buffer;
  6. const SystemTheme& current_system_theme()
  7. {
  8. ASSERT(theme_page);
  9. return *theme_page;
  10. }
  11. int current_system_theme_buffer_id()
  12. {
  13. ASSERT(theme_buffer);
  14. return theme_buffer->shared_buffer_id();
  15. }
  16. void set_system_theme(SharedBuffer& buffer)
  17. {
  18. theme_buffer = buffer;
  19. theme_page = (SystemTheme*)theme_buffer->data();
  20. }
  21. RefPtr<SharedBuffer> load_system_theme(const String& path)
  22. {
  23. auto file = CConfigFile::open(path);
  24. auto buffer = SharedBuffer::create_with_size(sizeof(SystemTheme));
  25. dbg() << "Created shared buffer with id " << buffer->shared_buffer_id();
  26. auto* data = (SystemTheme*)buffer->data();
  27. auto get = [&](auto& name) {
  28. auto color_string = file->read_entry("Colors", name);
  29. auto color = Color::from_string(color_string);
  30. if (!color.has_value())
  31. return Color(Color::Black);
  32. dbg() << "Parsed system color '" << name << "' = " << color.value();
  33. return color.value();
  34. };
  35. data->desktop_background = get("DesktopBackground");
  36. data->threed_highlight = get("ThreedHighlight");
  37. data->threed_shadow1 = get("ThreedShadow1");
  38. data->threed_shadow2 = get("ThreedShadow2");
  39. data->hover_highlight = get("HoverHighlight");
  40. data->window = get("Window");
  41. data->window_text = get("WindowText");
  42. data->base = get("Base");
  43. data->button = get("Button");
  44. data->button_text = get("ButtonText");
  45. data->desktop_background = get("DesktopBackground");
  46. data->active_window_border1 = get("ActiveWindowBorder1");
  47. data->active_window_border2 = get("ActiveWindowBorder2");
  48. data->active_window_title = get("ActiveWindowTitle");
  49. data->inactive_window_border1 = get("InactiveWindowBorder1");
  50. data->inactive_window_border2 = get("InactiveWindowBorder2");
  51. data->inactive_window_title = get("InactiveWindowTitle");
  52. data->moving_window_border1 = get("MovingWindowBorder1");
  53. data->moving_window_border2 = get("MovingWindowBorder2");
  54. data->moving_window_title = get("MovingWindowTitle");
  55. data->highlight_window_border1 = get("HighlightWindowBorder1");
  56. data->highlight_window_border2 = get("HighlightWindowBorder2");
  57. data->highlight_window_title = get("HighlightWindowTitle");
  58. data->menu_stripe = get("MenuStripe");
  59. data->menu_base = get("MenuBase");
  60. data->menu_selection = get("MenuSelection");
  61. buffer->seal();
  62. buffer->share_globally();
  63. return buffer;
  64. }