/////////////////////////////////////////////////////////////////////////////
-// Name: dc.cpp
+// Name: src/os2/dc.cpp
// Purpose: wxDC class
// Author: David Webster
// Modified by:
#include "wx/log.h"
#include "wx/icon.h"
#include "wx/msgdlg.h"
-#if wxUSE_STATUSBAR
+ #include "wx/dcprint.h"
#include "wx/statusbr.h"
+ #include "wx/module.h"
#endif
-#endif
-
-#include "wx/module.h"
-#include "wx/dcprint.h"
#include <string.h>
#include "wx/os2/private.h"
- IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
+IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
//
// wxWidgets uses the Microsoft convention that the origin is the UPPER left.
m_hPS = NULL;
m_bIsPaintTime = false; // True at Paint Time
- wxColour vColor( wxT("BLACK") );
- m_pen.SetColour(vColor);
-
- vColor.Set( wxT("WHITE") );
- m_brush.SetColour(vColor);
+ m_pen.SetColour(*wxBLACK);
+ m_brush.SetColour(*wxWHITE);
} // end of wxDC::wxDC
vPtlArc[0].y = vYm;
vPtlArc[1].x = vX2;
vPtlArc[1].y = vY2;
-#if !(defined(__WATCOMC__) && __WATCOMC__ < 1240 )
-// Open Watcom 1.3 had incomplete headers
-// that's reported and should be fixed for OW 1.4
::GpiPointArc(m_hPS, vPtlArc); // Draws the arc
-#endif
CalcBoundingBox( (wxCoord)(vXc - dRadius)
,(wxCoord)(vYc - dRadius)
);
);
} // end of wxDC::DoDrawPoint
-void wxDC::DoDrawPolygon(
- int n
-, wxPoint vPoints[]
-, wxCoord vXoffset
-, wxCoord vYoffset
-, int nFillStyle
-)
+void wxDC::DoDrawPolygon( int n,
+ wxPoint vPoints[],
+ wxCoord vXoffset,
+ wxCoord vYoffset,
+ int nFillStyle )
{
- ULONG ulCount = 1; // Number of polygons.
- POLYGON vPlgn; // polygon.
- ULONG flOptions = 0L; // Drawing options.
-
-//////////////////////////////////////////////////////////////////////////////
-// This contains fields of option bits... to draw boundary lines as well as
-// the area interior.
-//
-// Drawing boundary lines:
-// POLYGON_NOBOUNDARY Does not draw boundary lines.
-// POLYGON_BOUNDARY Draws boundary lines (the default).
-//
-// Construction of the area interior:
-// POLYGON_ALTERNATE Constructs interior in alternate mode
-// (the default).
-// POLYGON_WINDING Constructs interior in winding mode.
-//////////////////////////////////////////////////////////////////////////////
-
- ULONG flModel = 0L; // Drawing model.
+ ULONG ulCount = 1; // Number of polygons.
+ POLYGON vPlgn; // polygon.
+ ULONG flOptions = 0L; // Drawing options.
-//////////////////////////////////////////////////////////////////////////////
-// Drawing model.
-// POLYGON_INCL Fill is inclusive of bottom right (the default).
-// POLYGON_EXCL Fill is exclusive of bottom right.
-// This is provided to aid migration from other graphics models.
-//////////////////////////////////////////////////////////////////////////////
-
- LONG lHits = 0L; // Correlation/error indicator.
- POINTL vPoint;
- int i;
- int nIsTRANSPARENT = 0;
- LONG lBorderColor = 0L;
- LONG lColor = 0L;
+ //////////////////////////////////////////////////////////////////////////////
+ // This contains fields of option bits... to draw boundary lines as well as
+ // the area interior.
+ //
+ // Drawing boundary lines:
+ // POLYGON_NOBOUNDARY Does not draw boundary lines.
+ // POLYGON_BOUNDARY Draws boundary lines (the default).
+ //
+ // Construction of the area interior:
+ // POLYGON_ALTERNATE Constructs interior in alternate mode
+ // (the default).
+ // POLYGON_WINDING Constructs interior in winding mode.
+ //////////////////////////////////////////////////////////////////////////////
+
+ ULONG flModel = POLYGON_INCL; // Drawing model.
+
+ //////////////////////////////////////////////////////////////////////////////
+ // Drawing model.
+ // POLYGON_INCL Fill is inclusive of bottom right (the default).
+ // POLYGON_EXCL Fill is exclusive of bottom right.
+ // This is provided to aid migration from other graphics models.
+ //////////////////////////////////////////////////////////////////////////////
+
+ LONG lHits = 0L; // Correlation/error indicator.
+ int i;
+ int nIsTRANSPARENT = 0;
+ LONG lBorderColor = 0L;
+ LONG lColor = 0L;
lBorderColor = m_pen.GetColour().GetPixel();
lColor = m_brush.GetColour().GetPixel();
for(i = 0; i < n; i++)
{
- vPlgn.aPointl[i].x = vPoints[i].x; // +xoffset;
- vPlgn.aPointl[i].y = OS2Y(vPoints[i].y,0); // +yoffset;
+ vPlgn.aPointl[i].x = vPoints[i].x+vXoffset;
+ vPlgn.aPointl[i].y = OS2Y(vPoints[i].y+vYoffset,0);
}
- flModel = POLYGON_BOUNDARY;
+ flOptions = POLYGON_BOUNDARY;
if(nFillStyle == wxWINDING_RULE)
- flModel |= POLYGON_WINDING;
+ flOptions |= POLYGON_WINDING;
else
- flModel |= POLYGON_ALTERNATE;
-
- vPoint.x = vXoffset;
- vPoint.y = OS2Y(vYoffset,0);
+ flOptions |= POLYGON_ALTERNATE;
::GpiSetColor(m_hPS, lBorderColor);
- ::GpiMove(m_hPS, &vPoint);
+ ::GpiMove(m_hPS, &vPlgn.aPointl[0]);
lHits = ::GpiPolygons(m_hPS, ulCount, &vPlgn, flOptions, flModel);
free(vPlgn.aPointl);
} // end of wxDC::DoDrawPolygon
//
// Need to copy back into a bitmap. ::WinDrawPointer uses device coords
// and I don't feel like figuring those out for scrollable windows so
- // just convert to a bitmap then let the DoDrawBitmap routing display it
+ // just convert to a bitmap then let the DoDrawBitmap routine display it
//
if (rIcon.IsXpm())
{
CalcBoundingBox((vX + vWidth), (vY + vHeight));
} // end of wxDC::DoDrawText
-void wxDC::DrawAnyText(
- const wxString& rsText
-, wxCoord vX
-, wxCoord vY
-)
+void wxDC::DrawAnyText( const wxString& rsText,
+ wxCoord vX,
+ wxCoord vY )
{
int nOldBackground = 0;
POINTL vPtlStart;
m_vRclPaint.xRight == 0 &&
m_vRclPaint.xLeft == 0))
{
- //
- // Position Text a little differently in the Statusbar from other panels
- //
- if (m_pCanvas && m_pCanvas->IsKindOf(CLASSINFO(wxStatusBar)))
- vPtlStart.y = OS2Y(vY,vTextY);
- else
- vPtlStart.y = (wxCoord)(OS2Y(vY,vTextY/1.5)); // Full extent is a bit much
+ vPtlStart.y = OS2Y(vY,vTextY);
}
else
{
{
m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
- if (m_pCanvas && m_pCanvas->IsKindOf(CLASSINFO(wxStatusBar)))
- vPtlStart.y = OS2Y(vY,vTextY);
- else
- vPtlStart.y = (LONG)(OS2Y(vY,vTextY/1.5));
+ vPtlStart.y = OS2Y(vY,vTextY);
}
else
vPtlStart.y = vY;
}
- PCH pzStr = (PCH)rsText.c_str();
+ PCH pzStr = (PCH)rsText.c_str();
::GpiMove(m_hPS, &vPtlStart);
lHits = ::GpiCharString( m_hPS
}
} // end of wxDC::SetBrush
-void wxDC::SetBackground(
- const wxBrush& rBrush
-)
+void wxDC::SetBackground(const wxBrush& rBrush)
{
m_backgroundBrush = rBrush;
- if (!m_backgroundBrush.Ok())
- return;
- if (m_pCanvas)
- {
- bool bCustomColours = true;
- //
- // If we haven't specified wxUSER_COLOURS, don't allow the panel/dialog box to
- // change background colours from the control-panel specified colours.
- //
- if (m_pCanvas->IsKindOf(CLASSINFO(wxWindow)) &&
- ((m_pCanvas->GetWindowStyleFlag() & wxUSER_COLOURS) != wxUSER_COLOURS))
- bCustomColours = false;
- if (bCustomColours)
- {
- if (m_backgroundBrush.GetStyle()==wxTRANSPARENT)
- {
- m_pCanvas->SetTransparent(true);
- }
- else
- {
- //
- // Setting the background brush of a DC
- // doesn't affect the window background colour. However,
- // I'm leaving in the transparency setting because it's needed by
- // various controls (e.g. wxStaticText) to determine whether to draw
- // transparently or not. TODO: maybe this should be a new function
- // wxWindow::SetTransparency(). Should that apply to the child itself, or the
- // parent?
- // m_canvas->SetBackgroundColour(m_backgroundBrush.GetColour());
- //
- m_pCanvas->SetTransparent(false);
- }
- }
+ if (m_backgroundBrush.Ok())
+ {
+ (void)::GpiSetBackColor((HPS)m_hPS, m_backgroundBrush.GetColour().GetPixel());
}
- COLORREF vNewColor = m_backgroundBrush.GetColour().GetPixel();
- (void)::GpiSetBackColor((HPS)m_hPS, (LONG)vNewColor);
} // end of wxDC::SetBackground
-void wxDC::SetBackgroundMode(
- int nMode
-)
+void wxDC::SetBackgroundMode(int nMode)
{
m_backgroundMode = nMode;
} // end of wxDC::SetBackgroundMode
-void wxDC::SetLogicalFunction(
- int nFunction
-)
+void wxDC::SetLogicalFunction(int nFunction)
{
m_logicalFunction = nFunction;
SetRop((WXHDC)m_hDC);
} // wxDC::SetLogicalFunction
-void wxDC::SetRop(
- WXHDC hDC
-)
+void wxDC::SetRop(WXHDC hDC)
{
if (!hDC || m_logicalFunction < 0)
return;
- LONG lCRop;
+ LONG lCRop;
switch (m_logicalFunction)
{
case wxXOR:
return bSuccess;
}
-void wxDC::DoGetSize(
- int* pnWidth
-, int* pnHeight
-) const
+void wxDC::DoGetSize( int* pnWidth,
+ int* pnHeight ) const
{
- LONG lArray[CAPS_HEIGHT];
+ LONG lArray[CAPS_HEIGHT];
if(::DevQueryCaps( m_hDC
,CAPS_FAMILY
return ppisize;
} // end of wxDC::GetPPI
-void wxDC::SetLogicalScale(
- double dX
-, double dY
-)
+void wxDC::SetLogicalScale( double dX, double dY )
{
m_logicalScaleX = dX;
m_logicalScaleY = dY;