X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/21a700f3c85fe3ba46d41102ca4f013c65f120c6..8912d7eb182ef5a5f95026a9ed239c9ad6c75915:/src/mgl/dc.cpp diff --git a/src/mgl/dc.cpp b/src/mgl/dc.cpp index 0a25df8aa3..4a2a4909ec 100644 --- a/src/mgl/dc.cpp +++ b/src/mgl/dc.cpp @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // Created: 2001/03/09 // RCS-ID: $Id$ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) +// Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -47,6 +47,10 @@ // constants //----------------------------------------------------------------------------- +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + const double mm2inches = 0.0393700787402; const double inches2mm = 25.4; const double mm2twips = 56.6929133859; @@ -245,6 +249,7 @@ void wxDC::DoSetClippingRegionAsRegion(const wxRegion& region) // check if the DC is scaled or moved, and if yes, then // convert rg to device coordinates: if ( m_deviceOriginX != 0 || m_deviceOriginY != 0 || + m_logicalOriginX != 0 || m_logicalOriginY != 0 || XLOG2DEVREL(500) != 500 || YLOG2DEVREL(500) != 500 ) { region_t *mrg = rg.GetMGLRegion().rgnPointer(); @@ -329,7 +334,34 @@ void wxDC::Clear() void wxDC::DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, int style) { - wxFAIL_MSG( wxT("wxDC::DoFloodFill not implemented") ); + if (GetBrush().GetStyle() == wxTRANSPARENT) + { + wxLogDebug(wxT("In FloodFill, Current Brush is transparent, no filling done")); + return ; + } + int height = 0; + int width = 0; + this->GetSize(&width, &height); + //it would be nice to fail if we don't get a sensible size... + if (width < 1 || height < 1) + { + wxLogError(wxT("In FloodFill, dc.GetSize routine failed, method not supported by this DC")); + return ; + } + + //this is much faster than doing the individual pixels + wxMemoryDC memdc; + wxBitmap bitmap(width, height); + memdc.SelectObject(bitmap); + memdc.Blit(0, 0, width, height, (wxDC*) this, 0, 0); + memdc.SelectObject(wxNullBitmap); + + wxImage image(bitmap); + image.DoFloodFill (x,y, GetBrush(), col, style, GetLogicalFunction()); + bitmap = wxBitmap(image); + memdc.SelectObject(bitmap); + this->Blit(0, 0, width, height, &memdc, 0, 0); + memdc.SelectObject(wxNullBitmap); } bool wxDC::DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const @@ -337,7 +369,7 @@ bool wxDC::DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const wxCHECK_MSG( col, FALSE, _T("NULL colour parameter in wxDC::GetPixel")); uchar r, g, b; - m_MGLDC->unpackColorFast(m_MGLDC->getPixel(XLOG2DEV(x), XLOG2DEV(y)), + m_MGLDC->unpackColorFast(m_MGLDC->getPixel(XLOG2DEV(x), YLOG2DEV(y)), r, g, b); col->Set(r, g, b); return TRUE; @@ -373,8 +405,8 @@ void wxDC::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2) m_MGLDC->makeCurrent(); // will go away with MGL6.0 if ( !m_penSelected ) SelectPen(); - m_MGLDC->lineExt(XLOG2DEV(x1) + m_penOfsX, XLOG2DEV(y1) + m_penOfsY, - XLOG2DEV(x2) + m_penOfsX, XLOG2DEV(y2) + m_penOfsY,FALSE); + m_MGLDC->lineExt(XLOG2DEV(x1) + m_penOfsX, YLOG2DEV(y1) + m_penOfsY, + XLOG2DEV(x2) + m_penOfsX, YLOG2DEV(y2) + m_penOfsY,FALSE); CalcBoundingBox(x1, y1); CalcBoundingBox(x2, y2); } @@ -553,6 +585,7 @@ void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { if ( !m_penSelected ) SelectPen(); + m_MGLDC->rect(xx + m_penOfsX, yy + m_penOfsY, xx + ww + m_penOfsX, yy + hh + m_penOfsY); } @@ -726,7 +759,7 @@ bool wxDC::SelectMGLFont() !wxTestFontEncoding(nativeEnc) ) { #if wxUSE_FONTMAP - if ( !wxTheFontMapper->GetAltForEncoding(encoding, &nativeEnc) ) + if ( !wxFontMapper::Get()->GetAltForEncoding(encoding, &nativeEnc) ) #endif { nativeEnc.mglEncoding = MGL_ENCODING_ASCII; @@ -1097,7 +1130,8 @@ void wxDC::SetPalette(const wxPalette& palette) if ( palette == wxNullPalette ) { - SetPalette(m_oldPalette); + if ( m_oldPalette.Ok() ) + SetPalette(m_oldPalette); return; } @@ -1114,9 +1148,11 @@ void wxDC::SetPalette(const wxPalette& palette) void wxDC::SetFont(const wxFont& font) { - wxCHECK_RET( font.Ok(), wxT("invalid font") ); - m_font = font; - m_mglFont = NULL; + if ( font.Ok() ) + { + m_font = font; + m_mglFont = NULL; + } } void wxDC::SetBackground(const wxBrush& brush)