From: Vadim Zeitlin Date: Fri, 8 Feb 2002 00:18:10 +0000 (+0000) Subject: cleanups after SciTech commit :-( X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/b95edd4708105589d03267b5932f3a42e89b0d06 cleanups after SciTech commit :-( git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14063 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/dc.h b/include/wx/dc.h index 58bb8ab0cd..8366a5c479 100644 --- a/include/wx/dc.h +++ b/include/wx/dc.h @@ -227,7 +227,7 @@ public: void DrawCircle(wxCoord x, wxCoord y, wxCoord radius) { DoDrawEllipse(x - radius, y - radius, 2*radius, 2*radius); } void DrawCircle(const wxPoint& pt, wxCoord radius) - { DoDrawEllipse(pt.x, pt.y, radius); } + { DrawCircle(pt.x, pt.y, radius); } void DrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { DoDrawEllipse(x, y, width, height); } @@ -743,7 +743,7 @@ protected: #if wxUSE_PALETTE wxPalette m_palette; - bool m_custompalette; + bool m_hasCustomPalette; #endif // wxUSE_PALETTE private: diff --git a/include/wx/msw/dc.h b/include/wx/msw/dc.h index 682bdb16b2..f28ffedd8d 100644 --- a/include/wx/msw/dc.h +++ b/include/wx/msw/dc.h @@ -102,13 +102,15 @@ public: virtual void SelectOldObjects(WXHDC dc); wxWindow *GetWindow() const { return m_canvas; } - void SetWindow(wxWindow *win) { + void SetWindow(wxWindow *win) + { m_canvas = win; + #if wxUSE_PALETTE // if we have palettes use the correct one for this window InitializePalette(); -#endif - } +#endif // wxUSE_PALETTE + } WXHDC GetHDC() const { return m_hDC; } void SetHDC(WXHDC dc, bool bOwnsDC = FALSE) @@ -195,10 +197,12 @@ protected: // (tell windows to translate pixel from other palettes to our custom one // and vice versa) // Realize tells it to also reset the system palette to this one. - void DoSelectPalette(bool realize = false); + void DoSelectPalette(bool realize = FALSE); + // Find out what palette our parent window has, then select it into the dc void InitializePalette(); -#endif +#endif // wxUSE_PALETTE + // common part of DoDrawText() and DoDrawRotatedText() void DrawAnyText(const wxString& text, wxCoord x, wxCoord y); diff --git a/include/wx/msw/private.h b/include/wx/msw/private.h index 14f3b2a2ea..23aaba1766 100644 --- a/include/wx/msw/private.h +++ b/include/wx/msw/private.h @@ -396,7 +396,7 @@ private: #define GetHfontOf(font) ((HFONT)(font).GetHFONT()) #define GetHpalette() ((HPALETTE)GetHPALETTE()) -#define GetHpaletteOf(pal) ((HPALETTE)(pal)->GetHPALETTE()) +#define GetHpaletteOf(pal) ((HPALETTE)(pal).GetHPALETTE()) #define GetHrgn() ((HRGN)GetHRGN()) #define GetHrgnOf(rgn) ((HRGN)(rgn).GetHRGN()) diff --git a/include/wx/window.h b/include/wx/window.h index 1e4736b97b..6d6edb28f3 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -770,15 +770,16 @@ public: // Store the palette used by DCs in wxWindow so that the dcs can share // a palette. And we can respond to palette messages. wxPalette GetPalette() const { return m_palette; } + // When palette is changed tell the DC to set the system palette to the // new one. - void SetPalette(wxPalette &pal) { - m_custompalette=true; - m_palette=pal; - wxWindowDC d((wxWindow *) this); - d.SetPalette(pal); - } - bool HasCustomPalette() { return m_custompalette; } + void SetPalette(const wxPalette& pal); + + // return true if we have a specific palette + bool HasCustomPalette() const { return m_hasCustomPalette; } + + // return the first parent window with a custom palette or NULL + wxWindow *GetAncestorWithCustomPalette() const; #endif // wxUSE_PALETTE protected: @@ -866,8 +867,8 @@ protected: #ifdef wxUSE_PALETTE wxPalette m_palette; - bool m_custompalette; -#endif + bool m_hasCustomPalette; +#endif // wxUSE_PALETTE protected: diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index 83253625ef..2f540c96cd 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -168,7 +168,7 @@ void wxWindowBase::InitBase() #endif // wxUSE_CARET #if wxUSE_PALETTE - m_custompalette = false; + m_hasCustomPalette = FALSE; #endif // wxUSE_PALETTE // Whether we're using the current theme for this window (wxGTK only for now) @@ -733,6 +733,31 @@ bool wxWindowBase::SetFont(const wxFont& font) return TRUE; } +#if wxUSE_PALETTE + +void wxWindowBase::SetPalette(const wxPalette& pal) +{ + m_hasCustomPalette = TRUE; + m_palette = pal; + + // VZ: can anyone explain me what do we do here? + wxWindowDC d((wxWindow *) this); + d.SetPalette(pal); +} + +wxWindow *wxWindowBase::GetAncestorWithCustomPalette() const +{ + wxWindow *win = (wxWindow *)this; + while ( win && !win->HasCustomPalette() ) + { + win = win->GetParent(); + } + + return win; +} + +#endif // wxUSE_PALETTE + #if wxUSE_CARET void wxWindowBase::SetCaret(wxCaret *caret) { diff --git a/src/msw/dc.cpp b/src/msw/dc.cpp index 05445fae71..0a75fced54 100644 --- a/src/msw/dc.cpp +++ b/src/msw/dc.cpp @@ -940,7 +940,7 @@ void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask wxPalette *pal = bmp.GetPalette(); if ( pal && ::GetDeviceCaps(cdc,BITSPIXEL) <= 8 ) { - oldPal = ::SelectPalette(hdcMem, GetHpaletteOf(pal), FALSE); + oldPal = ::SelectPalette(hdcMem, GetHpaletteOf(*pal), FALSE); ::RealizePalette(hdcMem); } #endif // wxUSE_PALETTE @@ -995,7 +995,7 @@ void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask wxPalette *pal = bmp.GetPalette(); if ( pal && ::GetDeviceCaps(cdc,BITSPIXEL) <= 8 ) { - oldPal = ::SelectPalette(memdc, GetHpaletteOf(pal), FALSE); + oldPal = ::SelectPalette(memdc, GetHpaletteOf(*pal), FALSE); ::RealizePalette(memdc); } #endif // wxUSE_PALETTE @@ -1157,44 +1157,47 @@ void wxDC::DoSelectPalette(bool realize) m_oldPalette = 0; } - if (m_palette.Ok() && m_palette.GetHPALETTE()) + if ( m_palette.Ok() ) { - HPALETTE oldPal = ::SelectPalette(GetHdc(), (HPALETTE) m_palette.GetHPALETTE(), FALSE); + HPALETTE oldPal = ::SelectPalette(GetHdc(), + GetHpaletteOf(m_palette), + FALSE); if (!m_oldPalette) m_oldPalette = (WXHPALETTE) oldPal; if (realize) ::RealizePalette(GetHdc()); } - - } void wxDC::SetPalette(const wxPalette& palette) { - if (palette.Ok()) { + if ( palette.Ok() ) + { m_palette = palette; - DoSelectPalette(true); - } + DoSelectPalette(TRUE); + } } void wxDC::InitializePalette() { - if (wxDisplayDepth() <= 8) { + if ( wxDisplayDepth() <= 8 ) + { // look for any window or parent that has a custom palette. If any has // one then we need to use it in drawing operations - wxWindow *win = m_canvas; - while (!win->HasCustomPalette() && win->GetParent()) win = win->GetParent(); - if (win->HasCustomPalette()) { + wxWindow *win = m_canvas->GetAncestorWithCustomPalette(); + + m_hasCustomPalette = win && win->HasCustomPalette(); + if ( m_hasCustomPalette ) + { m_palette = win->GetPalette(); - m_custompalette = true; + // turn on MSW translation for this palette DoSelectPalette(); - } - else - m_custompalette = false; } + } } + #endif // wxUSE_PALETTE void wxDC::SetFont(const wxFont& the_font) diff --git a/src/msw/window.cpp b/src/msw/window.cpp index b47f269cfd..0613d37659 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -3349,30 +3349,38 @@ WXHBRUSH wxWindowMSW::OnCtlColor(WXHDC WXUNUSED(hDC), bool wxWindowMSW::HandlePaletteChanged(WXHWND hWndPalChange) { #if wxUSE_PALETTE - // same as below except we don't respond to our own messages - if (hWndPalChange != GetHWND()) { + // same as below except we don't respond to our own messages + if ( hWndPalChange != GetHWND() ) + { // check to see if we our our parents have a custom palette wxWindow *win = this; - while (!win->HasCustomPalette() && win->GetParent()) win = win->GetParent(); - if (win->HasCustomPalette()) { - /* realize the palette to see whether redrawing is needed */ - HDC hdc = GetDC((HWND) hWndPalChange); - win->m_palette.SetHPALETTE( (WXHPALETTE) - ::SelectPalette(hdc, (HPALETTE) win->m_palette.GetHPALETTE(), false) ); + while ( win && !win->HasCustomPalette() ) + { + win = win->GetParent(); + } + + if ( win && win->HasCustomPalette() ) + { + // realize the palette to see whether redrawing is needed + HDC hdc = ::GetDC((HWND) hWndPalChange); + win->m_palette.SetHPALETTE((WXHPALETTE) + ::SelectPalette(hdc, GetHpaletteOf(win->m_palette), FALSE)); int result = ::RealizePalette(hdc); - /* restore the palette (before releasing the DC) */ - win->m_palette.SetHPALETTE( (WXHPALETTE) - ::SelectPalette(hdc, (HPALETTE) win->m_palette.GetHPALETTE(), true) ); - RealizePalette(hdc); - ReleaseDC((HWND) hWndPalChange, hdc); - /* now check for the need to redraw */ + + // restore the palette (before releasing the DC) + win->m_palette.SetHPALETTE((WXHPALETTE) + ::SelectPalette(hdc, GetHpaletteOf(win->m_palette), FALSE)); + ::RealizePalette(hdc); + ::ReleaseDC((HWND) hWndPalChange, hdc); + + // now check for the need to redraw if (result > 0) InvalidateRect((HWND) hWndPalChange, NULL, TRUE); - } - } -#endif + + } +#endif // wxUSE_PALETTE wxPaletteChangedEvent event(GetId()); event.SetEventObject(this); @@ -3392,19 +3400,19 @@ bool wxWindowMSW::HandleQueryNewPalette() /* realize the palette to see whether redrawing is needed */ HDC hdc = GetDC((HWND) GetHWND()); win->m_palette.SetHPALETTE( (WXHPALETTE) - ::SelectPalette(hdc, (HPALETTE) win->m_palette.GetHPALETTE(), false) ); + ::SelectPalette(hdc, (HPALETTE) win->m_palette.GetHPALETTE(), FALSE) ); int result = ::RealizePalette(hdc); /* restore the palette (before releasing the DC) */ win->m_palette.SetHPALETTE( (WXHPALETTE) - ::SelectPalette(hdc, (HPALETTE) win->m_palette.GetHPALETTE(), true) ); + ::SelectPalette(hdc, (HPALETTE) win->m_palette.GetHPALETTE(), TRUE) ); ::RealizePalette(hdc); ::ReleaseDC((HWND) GetHWND(), hdc); /* now check for the need to redraw */ if (result > 0) ::InvalidateRect((HWND) GetHWND(), NULL, TRUE); } -#endif +#endif // wxUSE_PALETTE wxQueryNewPaletteEvent event(GetId()); event.SetEventObject(this);