diff options
Diffstat (limited to 'src/osd/modules/debugger/win/uimetrics.cpp')
-rw-r--r-- | src/osd/modules/debugger/win/uimetrics.cpp | 87 |
1 files changed, 86 insertions, 1 deletions
diff --git a/src/osd/modules/debugger/win/uimetrics.cpp b/src/osd/modules/debugger/win/uimetrics.cpp index 67eb045c619..6bd3bc8284d 100644 --- a/src/osd/modules/debugger/win/uimetrics.cpp +++ b/src/osd/modules/debugger/win/uimetrics.cpp @@ -9,8 +9,39 @@ #include "emu.h" #include "uimetrics.h" +#include "debug/debugvw.h" + #include "strconv.h" +#include <algorithm> + + +COLORREF const ui_metrics::s_themes[][COLOR_COUNT] = { + { + RGB(0x00, 0x00, 0x00), // foreground normal + RGB(0xff, 0x00, 0x00), // foreground changed + RGB(0x00, 0x00, 0xff), // foreground invalid + RGB(0x00, 0x80, 0x00), // foreground comment + RGB(0xff, 0xff, 0xff), // background normal + RGB(0xff, 0x80, 0x80), // background selected + RGB(0xe0, 0xe0, 0xe0), // background ancillary + RGB(0xff, 0xff, 0x00), // background current + RGB(0xff, 0xc0, 0x80), // background current selected + RGB(0xc0, 0xe0, 0xff) // background visited + }, + { + RGB(0xe0, 0xe0, 0xe0), // foreground normal + RGB(0xff, 0x60, 0xff), // foreground changed + RGB(0x00, 0xc0, 0xe0), // foreground invalid + RGB(0x00, 0xe0, 0x00), // foreground comment + RGB(0x00, 0x00, 0x00), // background normal + RGB(0xe0, 0x00, 0x00), // background selected + RGB(0x40, 0x40, 0x40), // background ancillary + RGB(0x00, 0x00, 0xc0), // background current + RGB(0xb0, 0x60, 0x00), // background current selected + RGB(0x00, 0x40, 0x80) // background visited + } }; + ui_metrics::ui_metrics(osd_options const &options) : m_debug_font(nullptr), @@ -22,7 +53,7 @@ ui_metrics::ui_metrics(osd_options const &options) : { // create a temporary DC HDC const temp_dc = GetDC(nullptr); - if (temp_dc != nullptr) + if (temp_dc) { float const size = options.debugger_font_size(); char const *const face = options.debugger_font(); @@ -47,6 +78,9 @@ ui_metrics::ui_metrics(osd_options const &options) : SelectObject(temp_dc, old_font); ReleaseDC(nullptr, temp_dc); } + + // set default color theme + set_color_theme(THEME_LIGHT_BACKGROUND); } @@ -69,3 +103,54 @@ ui_metrics::~ui_metrics() if (m_debug_font) DeleteObject(m_debug_font); } + + +std::pair<COLORREF, COLORREF> ui_metrics::view_colors(u8 attrib) const +{ + std::pair<COLORREF, COLORREF> result; + + if (attrib & DCA_SELECTED) + result.second = (attrib & DCA_CURRENT) ? m_colors[COLOR_BG_CURRENT_SELECTED] : m_colors[COLOR_BG_SELECTED]; + else if (attrib & DCA_CURRENT) + result.second = m_colors[COLOR_BG_CURRENT]; + else if (attrib & DCA_ANCILLARY) + result.second = m_colors[COLOR_BG_ANCILLARY]; + else if (attrib & DCA_VISITED) + result.second = m_colors[COLOR_BG_VISITED]; + else + result.second = m_colors[COLOR_BG_NORMAL]; + + if (DCA_COMMENT & attrib) + { + result.first = m_colors[COLOR_FG_COMMENT]; + } + else + { + if (attrib & DCA_INVALID) + result.first = m_colors[COLOR_FG_INVALID]; + else if (attrib & DCA_CHANGED) + result.first = m_colors[COLOR_FG_CHANGED]; + else + result.first = m_colors[COLOR_FG_NORMAL]; + + if (attrib & DCA_DISABLED) + { + result.first = RGB( + (GetRValue(result.first) + GetRValue(result.second) + 1) >> 1, + (GetGValue(result.first) + GetGValue(result.second) + 1) >> 1, + (GetBValue(result.first) + GetBValue(result.second) + 1) >> 1); + } + } + + return result; +} + + +void ui_metrics::set_color_theme(int index) +{ + if ((0 <= index) && (std::size(s_themes) > index)) + { + std::copy(std::begin(s_themes[index]), std::end(s_themes[index]), m_colors); + m_color_theme = index; + } +} |