OpenCPN Partial API docs
Loading...
Searching...
No Matches
color_handler.cpp
1#include <wx/log.h>
2
3#include "color_handler.h"
4#include "s52plib.h"
5#include "model/ocpn_types.h"
6
7extern s52plib* ps52plib;
8extern wxColorHashMap* pcurrent_user_color_hash;
9
10wxColour GetGlobalColor(wxString colorName) {
11 wxColour ret_color;
12
13 // Use the S52 Presentation library if present
14 if (ps52plib) ret_color = ps52plib->getwxColour(colorName);
15 if (!ret_color.Ok() && pcurrent_user_color_hash)
16 ret_color = (*pcurrent_user_color_hash)[colorName];
17
18 // Default
19 if (!ret_color.Ok()) {
20 ret_color.Set(128, 128, 128); // Simple Grey
21 wxLogMessage(_T("Warning: Color not found ") + colorName);
22 // Avoid duplicate warnings:
23 if (pcurrent_user_color_hash)
24 (*pcurrent_user_color_hash)[colorName] = ret_color;
25 }
26 return ret_color;
27}
28
29wxColour GetDialogColor(DialogColor color) {
30 wxColour col = *wxRED;
31
32 bool bUseSysColors = false;
33 bool bIsDarkMode = false;
34#ifdef __WXOSX__
35 if (wxPlatformInfo::Get().CheckOSVersion(10, 14)) bUseSysColors = true;
36#endif
37#ifdef __WXGTK__
38 bUseSysColors = true;
39#endif
40
41 if (bUseSysColors) {
42 wxColour bg = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
43 if (bg.Red() < 128) {
44 bIsDarkMode = true;
45 }
46 }
47
48 switch (color) {
49 case DLG_BACKGROUND:
50 if (bUseSysColors && bIsDarkMode) {
51 col = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
52 } else {
53 col = GetGlobalColor("DILG0");
54 }
55 break;
56 case DLG_SELECTED_BACKGROUND:
57 if (bUseSysColors && bIsDarkMode) {
58 col = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
59 } else {
60 col = GetGlobalColor("DILG1");
61 }
62 break;
63 case DLG_UNSELECTED_BACKGROUND:
64 if (bUseSysColors && bIsDarkMode) {
65 col = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
66 } else {
67 col = GetGlobalColor("DILG0");
68 }
69 break;
70 case DLG_ACCENT:
71 case DLG_SELECTED_ACCENT:
72 if (bUseSysColors && bIsDarkMode) {
73 col = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
74 } else {
75 col = GetGlobalColor("DILG3");
76 }
77 break;
78 case DLG_UNSELECTED_ACCENT:
79 if (bUseSysColors && bIsDarkMode) {
80 col = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
81 } else {
82 col = GetGlobalColor("DILG1");
83 }
84 break;
85 case DLG_TEXT:
86 if (bUseSysColors && bIsDarkMode) {
87 col = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
88 } else {
89 col = GetGlobalColor("DILG3");
90 }
91 break;
92 case DLG_HIGHLIGHT:
93 if (bUseSysColors && bIsDarkMode) {
94 col = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT);
95 } else {
96 col = GetGlobalColor("UIBCK");
97 }
98 break;
99 }
100 return col;
101}