X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e320a79f187558effb04d92020b470372bbe456..47678105333557b1a5f225fe57e4ae27fa4b8706:/src/os2/brush.cpp diff --git a/src/os2/brush.cpp b/src/os2/brush.cpp index 4f28e92f53..53b8a95f2b 100644 --- a/src/os2/brush.cpp +++ b/src/os2/brush.cpp @@ -1,40 +1,44 @@ ///////////////////////////////////////////////////////////////////////////// // Name: brush.cpp // Purpose: wxBrush -// Author: AUTHOR +// Author: David Webster // Modified by: -// Created: ??/??/98 +// Created: 10/13/99 // RCS-ID: $Id$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) David Webster +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "brush.h" -#endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" +#ifndef WX_PRECOMP +#include #include "wx/setup.h" +#include "wx/list.h" #include "wx/utils.h" +#include "wx/app.h" #include "wx/brush.h" +#endif + +#include "wx/os2/private.h" + +#include "assert.h" -#if !USE_SHARED_LIBRARIES IMPLEMENT_DYNAMIC_CLASS(wxBrush, wxGDIObject) -#endif wxBrushRefData::wxBrushRefData() { m_style = wxSOLID; -// TODO: null data + m_hBrush = 0; } wxBrushRefData::wxBrushRefData(const wxBrushRefData& data) { - m_style = data.m_style; - m_stipple = data.m_stipple; - m_colour = data.m_colour; -/* TODO: null data - m_hBrush = 0; -*/ + m_style = data.m_style; + m_stipple = data.m_stipple; + m_colour = data.m_colour; + m_hBrush = 0; } wxBrushRefData::~wxBrushRefData() @@ -61,6 +65,7 @@ wxBrush::wxBrush(const wxColour& col, int Style) M_BRUSHDATA->m_colour = col; M_BRUSHDATA->m_style = Style; + M_BRUSHDATA->m_hBrush = 0; RealizeResource(); @@ -74,6 +79,7 @@ wxBrush::wxBrush(const wxBitmap& stipple) M_BRUSHDATA->m_style = wxSTIPPLE; M_BRUSHDATA->m_stipple = stipple; + M_BRUSHDATA->m_hBrush = 0; RealizeResource(); @@ -81,19 +87,116 @@ wxBrush::wxBrush(const wxBitmap& stipple) wxTheBrushList->AddBrush(this); } +bool wxBrush::RealizeResource(void) +{ +// TODO: +/* + if (M_BRUSHDATA && (M_BRUSHDATA->m_hBrush == 0)) + { + if (M_BRUSHDATA->m_style==wxTRANSPARENT) + { + M_BRUSHDATA->m_hBrush = (WXHBRUSH) ::GetStockObject(NULL_BRUSH); + return TRUE; + } + COLORREF ms_colour = 0 ; + + ms_colour = M_BRUSHDATA->m_colour.GetPixel() ; + + switch (M_BRUSHDATA->m_style) + { +// + // Don't reset cbrush, wxTRANSPARENT is handled by wxBrush::SelectBrush() + // this could save (many) time if frequently switching from + // wxSOLID to wxTRANSPARENT, because Create... is not always called!! + // + // NB August 95: now create and select a Null brush instead. + // This could be optimized as above. + case wxTRANSPARENT: + M_BRUSHDATA->m_hBrush = NULL; // Must always select a suitable background brush + // - could choose white always for a quick solution + break; +// + case wxBDIAGONAL_HATCH: + M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateHatchBrush(HS_BDIAGONAL,ms_colour) ; + break ; + + case wxCROSSDIAG_HATCH: + M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateHatchBrush(HS_DIAGCROSS,ms_colour) ; + break ; + + case wxFDIAGONAL_HATCH: + M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateHatchBrush(HS_FDIAGONAL,ms_colour) ; + break ; + + case wxCROSS_HATCH: + M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateHatchBrush(HS_CROSS,ms_colour) ; + break ; + + case wxHORIZONTAL_HATCH: + M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateHatchBrush(HS_HORIZONTAL,ms_colour) ; + break ; + + case wxVERTICAL_HATCH: + M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateHatchBrush(HS_VERTICAL,ms_colour) ; + break ; + + case wxSTIPPLE: + if (M_BRUSHDATA->m_stipple.Ok()) + M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreatePatternBrush((HBITMAP) M_BRUSHDATA->m_stipple.GetHBITMAP()) ; + else + M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateSolidBrush(ms_colour) ; + break ; + + case wxSOLID: + default: + M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateSolidBrush(ms_colour) ; + break; + } +#ifdef WXDEBUG_CREATE + if (M_BRUSHDATA->m_hBrush==NULL) wxError("Cannot create brush","Internal error") ; +#endif + return TRUE; + } + else + return FALSE; +*/ + return FALSE; +} + +WXHANDLE wxBrush::GetResourceHandle(void) +{ + return (WXHANDLE) M_BRUSHDATA->m_hBrush; +} + +bool wxBrush::FreeResource(bool WXUNUSED(force)) +{ + if (M_BRUSHDATA && (M_BRUSHDATA->m_hBrush != 0)) + { +// TODO DeleteObject((HBRUSH) M_BRUSHDATA->m_hBrush); + M_BRUSHDATA->m_hBrush = 0; + return TRUE; + } + else return FALSE; +} + +bool wxBrush::IsFree() const +{ + return (M_BRUSHDATA && (M_BRUSHDATA->m_hBrush == 0)); +} + void wxBrush::Unshare() { - // Don't change shared data - if (!m_refData) + // Don't change shared data + if (!m_refData) { - m_refData = new wxBrushRefData(); - } + m_refData = new wxBrushRefData(); + } else { - wxBrushRefData* ref = new wxBrushRefData(*(wxBrushRefData*)m_refData); - UnRef(); - m_refData = ref; - } + wxBrushRefData* ref = new wxBrushRefData(*(wxBrushRefData*)m_refData); + UnRef(); + m_refData = ref; + } } void wxBrush::SetColour(const wxColour& col) @@ -132,9 +235,3 @@ void wxBrush::SetStipple(const wxBitmap& Stipple) RealizeResource(); } -bool wxBrush::RealizeResource() -{ -// TODO: create the brush - return FALSE; -} -