Use wxAutoBufferedPaintDC for ToggleButton

Originally committed to SVN as r6437.
This commit is contained in:
Thomas Goyne 2012-02-02 20:50:56 +00:00
parent bd7f338115
commit c5c829357d
1 changed files with 7 additions and 6 deletions

View File

@ -37,7 +37,7 @@
#include "config.h" #include "config.h"
#ifndef AGI_PRE #ifndef AGI_PRE
#include <wx/dcclient.h> #include <wx/dcbuffer.h>
#include <wx/settings.h> #include <wx/settings.h>
#include <wx/tglbtn.h> #include <wx/tglbtn.h>
#endif #endif
@ -60,6 +60,8 @@ ToggleBitmap::ToggleBitmap(wxWindow *parent, agi::Context *context, const char *
GetSize(&w, &h); GetSize(&w, &h);
SetSizeHints(w, h, w, h); SetSizeHints(w, h, w, h);
SetBackgroundStyle(wxBG_STYLE_PAINT);
ToolTipManager::Bind(this, command->StrHelp(), ht_ctx, cmd_name); ToolTipManager::Bind(this, command->StrHelp(), ht_ctx, cmd_name);
Bind(wxEVT_PAINT, &ToggleBitmap::OnPaint, this); Bind(wxEVT_PAINT, &ToggleBitmap::OnPaint, this);
Bind(wxEVT_LEFT_DOWN, &ToggleBitmap::OnMouseEvent, this); Bind(wxEVT_LEFT_DOWN, &ToggleBitmap::OnMouseEvent, this);
@ -71,9 +73,7 @@ void ToggleBitmap::OnMouseEvent(wxMouseEvent &) {
} }
void ToggleBitmap::OnPaint(wxPaintEvent &) { void ToggleBitmap::OnPaint(wxPaintEvent &) {
wxPaintDC dc(this); wxAutoBufferedPaintDC dc(this);
int w,h;
GetClientSize(&w,&h);
// Get background color // Get background color
wxColour bgColor = command->IsActive(context) ? wxColour(0,255,0) : wxColour(255,0,0); wxColour bgColor = command->IsActive(context) ? wxColour(0,255,0) : wxColour(255,0,0);
@ -85,7 +85,8 @@ void ToggleBitmap::OnPaint(wxPaintEvent &) {
dc.SetPen(*wxTRANSPARENT_PEN); dc.SetPen(*wxTRANSPARENT_PEN);
dc.SetBrush(wxBrush(bgColor)); dc.SetBrush(wxBrush(bgColor));
dc.DrawRectangle(0, 0, w, h); dc.DrawRectangle(wxPoint(0, 0), GetClientSize());
dc.DrawBitmap(img, (w - img.GetWidth()) / 2, (h - img.GetHeight()) / 2, true); wxSize excess = (GetClientSize() - img.GetSize()) / 2;
dc.DrawBitmap(img, excess.GetX(), excess.GetY(), true);
} }