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); }
#if wxUSE_PALETTE
wxPalette m_palette;
- bool m_custompalette;
+ bool m_hasCustomPalette;
#endif // wxUSE_PALETTE
private:
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)
// (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);
#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())
// 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:
#ifdef wxUSE_PALETTE
wxPalette m_palette;
- bool m_custompalette;
-#endif
+ bool m_hasCustomPalette;
+#endif // wxUSE_PALETTE
protected:
#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)
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)
{
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
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
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)
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);
/* 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);