/* Copyright (C) 2015-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: Dk4WxControl.cpt */ /** @file Dk4WxControl.cpp The Dk4WxControl module. */ #line 221 "Dk4WxControl.cpt" #include "dk4conf.h" #include "Dk4WxControl.h" #line 228 "Dk4WxControl.cpt" const wxChar Dk4WxControl::Dk4WxControlName[] = { wxT("Dk4WxControl") }; #if wxCHECK_VERSION(3,0,0) wxIMPLEMENT_DYNAMIC_CLASS(Dk4WxControl, wxControl); #else IMPLEMENT_DYNAMIC_CLASS(Dk4WxControl, wxControl) #endif #if wxCHECK_VERSION(3,0,0) wxBEGIN_EVENT_TABLE(Dk4WxControl,wxControl) #else BEGIN_EVENT_TABLE(Dk4WxControl,wxControl) #endif EVT_ERASE_BACKGROUND(Dk4WxControl::OnErase) EVT_PAINT(Dk4WxControl::OnPaint) #if wxCHECK_VERSION(3,0,0) wxEND_EVENT_TABLE() #else END_EVENT_TABLE() #endif Dk4WxControl::Dk4WxControl() : wxControl() { #line 260 "Dk4WxControl.cpt" pBitmap = NULL; iBmWidth = -1; iBmHeight = -1; SetBackgroundStyle(wxBG_STYLE_CUSTOM); #line 265 "Dk4WxControl.cpt" } bool Dk4WxControl::Create( wxWindow *parent, wxWindowID wid, const wxPoint & pos, const wxSize & size, long style, const wxValidator & validator, const wxChar *name ) { bool back; #line 282 "Dk4WxControl.cpt" back = wxControl::Create( parent, wid, pos, size, style, validator, name ); pBitmap = NULL; iBmWidth = -1; iBmHeight = -1; SetBackgroundStyle(wxBG_STYLE_CUSTOM); #line 290 "Dk4WxControl.cpt" return back; } Dk4WxControl::Dk4WxControl( wxWindow *parent, wxWindowID wid, const wxPoint & pos, const wxSize & size, long style, const wxValidator & validator, const wxChar *name ) : wxControl( parent, wid, pos, size, style, validator, wxString(name)) { #line 307 "Dk4WxControl.cpt" pBitmap = NULL; iBmWidth = -1; iBmHeight = -1; SetBackgroundStyle(wxBG_STYLE_CUSTOM); #line 312 "Dk4WxControl.cpt" } Dk4WxControl::~Dk4WxControl() { #line 319 "Dk4WxControl.cpt" { wxCriticalSectionLocker lock(csProtect); if (NULL != pBitmap) { delete(pBitmap); } pBitmap = NULL; iBmWidth = -1; iBmHeight = -1; } #line 327 "Dk4WxControl.cpt" } void Dk4WxControl::OnErase(wxEraseEvent & WXUNUSED(event)) { #line 335 "Dk4WxControl.cpt" #line 336 "Dk4WxControl.cpt" } void Dk4WxControl::PaintOperation( wxDC & pdc, wxPaintEvent & WXUNUSED(event), bool WXUNUSED(buffered), int clWidth, int clHeight ) { pdc.SetBrush(*wxWHITE_BRUSH); pdc.DrawRectangle(0, 0, clWidth, clHeight); } void Dk4WxControl::InternalPaint( wxDC & pdc, wxPaintEvent & event, bool buffered, int clWidth, int clHeight ) { /* Save current DC settings. */ wxBrush const br = pdc.GetBrush(); wxBrush const bg = pdc.GetBackground(); wxFont const fn = pdc.GetFont(); wxPen const pn = pdc.GetPen(); wxColour const tbg = pdc.GetTextBackground(); wxColour const tfg = pdc.GetTextForeground(); int bgm = pdc.GetBackgroundMode(); #line 374 "Dk4WxControl.cpt" /* Do the real pain operation. */ PaintOperation(pdc, event, buffered, clWidth, clHeight); /* Restore DC settings from start. */ pdc.SetBackgroundMode(bgm); pdc.SetTextForeground(tfg); pdc.SetTextBackground(tbg); pdc.SetPen(pn); pdc.SetFont(fn); pdc.SetBackground(bg); pdc.SetBrush(br); #line 387 "Dk4WxControl.cpt" } void Dk4WxControl::OnPaint(wxPaintEvent & event) { wxPaintDC paintDC(this); int w = 0; int h = 0; bool mustDraw = false; bool done = false; #line 400 "Dk4WxControl.cpt" { wxCriticalSectionLocker lock(csProtect); wxSize sz = GetClientSize(); mustDraw = bUpdate; #if VERSION_BEFORE_20150821 w = iBmWidth; h = iBmHeight; #endif if (NULL != pBitmap) { if ((iBmWidth != sz.x) || (iBmHeight != sz.y)) { delete(pBitmap); pBitmap = NULL; } } w = iBmWidth = sz.x; h = iBmHeight = sz.y; if (NULL == pBitmap) { pBitmap = new wxBitmap(iBmWidth, iBmHeight); mustDraw = true; } if (NULL != pBitmap) { if (mustDraw) { wxMemoryDC memDC; memDC.SelectObject(*pBitmap); InternalPaint(memDC, event, true, w, h); memDC.SelectObject(wxNullBitmap); bUpdate = false; } paintDC.DrawBitmap(*pBitmap, 0, 0, false); done = true; } } if (!(done)) { InternalPaint(paintDC, event, false, w, h); } #line 436 "Dk4WxControl.cpt" } void Dk4WxControl::SetUpdate(bool flag) { #line 444 "Dk4WxControl.cpt" if (flag) { wxCriticalSectionLocker lock(csProtect); bUpdate = true; } #line 449 "Dk4WxControl.cpt" } void Dk4WxControl::ReleaseBuffer(void) { { wxCriticalSectionLocker lock(csProtect); if (NULL != pBitmap) { delete(pBitmap); pBitmap = NULL; } } }