diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/Dk4WxControl.cpp |
Initial commit
Diffstat (limited to 'support/dktools/Dk4WxControl.cpp')
-rw-r--r-- | support/dktools/Dk4WxControl.cpp | 304 |
1 files changed, 304 insertions, 0 deletions
diff --git a/support/dktools/Dk4WxControl.cpp b/support/dktools/Dk4WxControl.cpp new file mode 100644 index 0000000000..49fc86e6ff --- /dev/null +++ b/support/dktools/Dk4WxControl.cpp @@ -0,0 +1,304 @@ +/* + WARNING: This file was generated by dkct. + 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 +*/ + +/* +Copyright (C) 2015-2017, Dirk Krause + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above opyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** @file Dk4WxControl.cpp The Dk4WxControl module. +*/ + + +#line 205 "Dk4WxControl.cpt" + +#include "Dk4WxControl.h" + + + + + +#line 211 "Dk4WxControl.cpt" + + + +const wxChar Dk4WxControl::Dk4WxControlName[] = { wxT("Dk4WxControl") }; + + +IMPLEMENT_DYNAMIC_CLASS(Dk4WxControl, wxControl) + +BEGIN_EVENT_TABLE(Dk4WxControl, wxControl) + EVT_ERASE_BACKGROUND(Dk4WxControl::OnErase) + EVT_PAINT(Dk4WxControl::OnPaint) +END_EVENT_TABLE() + + + +Dk4WxControl::Dk4WxControl() +: wxControl() +{ + + +#line 230 "Dk4WxControl.cpt" + pBitmap = NULL; + iBmWidth = -1; + iBmHeight = -1; + SetBackgroundStyle(wxBG_STYLE_CUSTOM); + + +#line 235 "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 252 "Dk4WxControl.cpt" + back = wxControl::Create( + parent, wid, pos, size, style, validator, name + ); + pBitmap = NULL; + iBmWidth = -1; + iBmHeight = -1; + SetBackgroundStyle(wxBG_STYLE_CUSTOM); + + +#line 260 "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 277 "Dk4WxControl.cpt" + pBitmap = NULL; + iBmWidth = -1; + iBmHeight = -1; + SetBackgroundStyle(wxBG_STYLE_CUSTOM); + + +#line 282 "Dk4WxControl.cpt" +} + + + +Dk4WxControl::~Dk4WxControl() +{ + + +#line 289 "Dk4WxControl.cpt" + { + wxCriticalSectionLocker lock(csProtect); + if (NULL != pBitmap) { delete(pBitmap); } + pBitmap = NULL; + iBmWidth = -1; + iBmHeight = -1; + } + + +#line 297 "Dk4WxControl.cpt" +} + + + +void +Dk4WxControl::OnErase(wxEraseEvent & event) +{ + + +#line 305 "Dk4WxControl.cpt" + + +#line 306 "Dk4WxControl.cpt" +} + + + +void +Dk4WxControl::PaintOperation( + wxDC & pdc, + wxPaintEvent & event, + bool 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 344 "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 357 "Dk4WxControl.cpt" +} + + + +void +Dk4WxControl::OnPaint(wxPaintEvent & event) +{ + wxPaintDC paintDC(this); + int w = 0; + int h = 0; + bool mustDraw = false; + bool done = false; + + +#line 370 "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 406 "Dk4WxControl.cpt" +} + + + +void +Dk4WxControl::SetUpdate(bool flag) +{ + + +#line 414 "Dk4WxControl.cpt" + if (flag) { + wxCriticalSectionLocker lock(csProtect); + bUpdate = true; + } + + +#line 419 "Dk4WxControl.cpt" +} + + + +void +Dk4WxControl::ReleaseBuffer(void) +{ + { + wxCriticalSectionLocker lock(csProtect); + if (NULL != pBitmap) { + delete(pBitmap); + pBitmap = NULL; + } + } +} + |