From bcaef7eb3062b6ab8ffd900b9e6e6210b4097e68 Mon Sep 17 00:00:00 2001 From: twanvl Date: Wed, 5 Jan 2011 21:30:35 +0000 Subject: [PATCH] by setting fancy theme thingy just once the problems go away git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1580 0fc631ac-6414-0410-93d0-97cfa31319b6 --- src/gui/control/gallery_list.cpp | 16 +++++++++++++--- src/gui/util.cpp | 11 +++++++++-- src/gui/util.hpp | 3 +++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/gui/control/gallery_list.cpp b/src/gui/control/gallery_list.cpp index 60456bc2..690ac397 100644 --- a/src/gui/control/gallery_list.cpp +++ b/src/gui/control/gallery_list.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -32,6 +33,7 @@ GalleryList::GalleryList(Window* parent, int id, int direction, bool always_focu col.can_select = true; col.selection = NO_SELECTION; subcolumns.push_back(col); + enable_themed_selection_rectangle(this); } void GalleryList::selectSubColumn(size_t subcol) { @@ -302,7 +304,15 @@ void GalleryList::OnDraw(DC& dc) { for (size_t j = 0 ; j < subcolumns.size() ; ++j) { const SubColumn& col = subcolumns[j]; bool selected = i == col.selection; - Color c = selected ? ( has_focus && j == active_subcolumn + bool focused = has_focus && j == active_subcolumn; + wxRect rect(pos.x + col.offset.x - BORDER, pos.y + col.offset.y - BORDER, + col.size.x + 2*BORDER, col.size.y + 2*BORDER); + #if 1 + if (selected) { + draw_selection_rectangle(this,dc,rect, selected,focused); + } + #else + Color c = selected ? ( focused ? wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT) : lerp(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW), wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT), subcolumnActivity(j)) @@ -310,8 +320,8 @@ void GalleryList::OnDraw(DC& dc) { : unselected; dc.SetPen(c); dc.SetBrush(lerp(background, c, 0.3)); - dc.DrawRectangle(pos.x + col.offset.x - BORDER, pos.y + col.offset.y - BORDER, - col.size.x + 2*BORDER, col.size.y + 2*BORDER); + dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); + #endif } // draw item drawItem(dc, pos.x, pos.y, i); diff --git a/src/gui/util.cpp b/src/gui/util.cpp index 93c2b13c..ae1fc997 100644 --- a/src/gui/util.cpp +++ b/src/gui/util.cpp @@ -357,8 +357,8 @@ void draw_selection_rectangle(Window* win, DC& dc, const wxRect& rect, bool sele r.right = rect.x + rect.width; r.bottom = rect.y + rect.height; if (hTheme) { - //wxUxThemeEngine::Get()->SetWindowTheme((HWND)win->GetHWND(), L"Explorer", NULL); - wxUxThemeEngine::Get()->DrawThemeBackground( + //themeEngine->SetWindowTheme((HWND)win->GetHWND(), L"Explorer", NULL); + themeEngine->DrawThemeBackground( (HTHEME)hTheme, (HDC)dc.GetHDC(), LVP_LISTITEM, @@ -371,3 +371,10 @@ void draw_selection_rectangle(Window* win, DC& dc, const wxRect& rect, bool sele } #endif } + +void enable_themed_selection_rectangle(Window* win) { + wxUxThemeEngine *themeEngine = wxUxThemeEngine::Get(); + if (themeEngine && themeEngine->IsAppThemed()) { + themeEngine->SetWindowTheme((HWND)win->GetHWND(), L"Explorer", NULL); + } +} \ No newline at end of file diff --git a/src/gui/util.hpp b/src/gui/util.hpp index 3f7572df..3b05af18 100644 --- a/src/gui/util.hpp +++ b/src/gui/util.hpp @@ -78,5 +78,8 @@ void draw_radiobox(Window* win, DC& dc, const wxRect& rect, bool checked, bool e /// Draws a (fancy) selection rectangle void draw_selection_rectangle(Window* win, DC& dc, const wxRect& rect, bool selected = true, bool focused = true, bool hot = false); +/// Enable fancy themed selection rectangle on windows +void enable_themed_selection_rectangle(Window* win); + // ----------------------------------------------------------------------------- : EOF #endif