#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
}
else
{
- if (m_vSelectedBitmap != wxNullBitmap)
+ if (m_vSelectedBitmap.Ok())
{
m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
);
} // 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.
-
-//////////////////////////////////////////////////////////////////////////////
-// 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.
-//////////////////////////////////////////////////////////////////////////////
+ ULONG ulCount = 1; // Number of polygons.
+ POLYGON vPlgn; // polygon.
+ ULONG flOptions = 0L; // Drawing options.
- 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
vY = OS2Y(vY,vHeight);
else
{
- if (m_vSelectedBitmap != wxNullBitmap)
+ if (m_vSelectedBitmap.Ok())
{
m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
vY = OS2Y(vY,vHeight);
else
{
- if (m_vSelectedBitmap != wxNullBitmap)
+ if (m_vSelectedBitmap.Ok())
{
m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
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
{
- if (m_vSelectedBitmap != wxNullBitmap)
+ if (m_vSelectedBitmap.Ok())
{
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();
-
::GpiMove(m_hPS, &vPtlStart);
lHits = ::GpiCharString( m_hPS
,rsText.length()
- ,pzStr
+ ,rsText.char_str()
);
if (lHits != GPI_OK)
{
}
} // 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:
, wxCoord* pvY
, wxCoord* pvDescent
, wxCoord* pvExternalLeading
-, wxFont* pTheFont
+, const wxFont* pTheFont
) const
{
POINTL avPoint[TXTBOX_COUNT];
//
bRc = ::GpiQueryTextBox( m_hPS
,l
- ,(PCH)rsString.c_str()
+ ,rsString.char_str()
,TXTBOX_COUNT // return maximum information
,avPoint // array of coordinates points
);
m_nWindowExtX = (int)MS_XDEV2LOG(VIEWPORT_EXTENT);
m_nWindowExtY = (int)MS_YDEV2LOG(VIEWPORT_EXTENT);
// ????
+
+ ComputeScaleAndOrigin();
+
}; // end of wxDC::SetMapMode
void wxDC::SetUserScale( double dX,
SetMapMode(m_mappingMode);
} // end of wxDC::SetAxisOrientation
-void wxDC::SetSystemScale(
- double dX
-, double dY
-)
-{
- m_scaleX = dX;
- m_scaleY = dY;
-
- SetMapMode(m_mappingMode);
-} // end of wxDC::SetSystemScale
-
void wxDC::SetLogicalOrigin(
wxCoord vX
, wxCoord vY
);
}; // end of wxDC::SetDeviceOrigin
-// ---------------------------------------------------------------------------
-// coordinates transformations
-// ---------------------------------------------------------------------------
-
-wxCoord wxDCBase::DeviceToLogicalX(wxCoord x) const
-{
- return (wxCoord) (((x) - m_deviceOriginX)/(m_logicalScaleX*m_userScaleX*m_signX*m_scaleX) - m_logicalOriginX);
-}
-
-wxCoord wxDCBase::DeviceToLogicalXRel(wxCoord x) const
-{
- // axis orientation is not taken into account for conversion of a distance
- return (wxCoord) ((x)/(m_logicalScaleX*m_userScaleX*m_scaleX));
-}
-
-wxCoord wxDCBase::DeviceToLogicalY(wxCoord y) const
-{
- return (wxCoord) (((y) - m_deviceOriginY)/(m_logicalScaleY*m_userScaleY*m_signY*m_scaleY) - m_logicalOriginY);
-}
-
-wxCoord wxDCBase::DeviceToLogicalYRel(wxCoord y) const
-{
- // axis orientation is not taken into account for conversion of a distance
- return (wxCoord) ((y)/(m_logicalScaleY*m_userScaleY*m_scaleY));
-}
-
-wxCoord wxDCBase::LogicalToDeviceX(wxCoord x) const
-{
- return (wxCoord) ((x - m_logicalOriginX)*m_logicalScaleX*m_userScaleX*m_signX*m_scaleX + m_deviceOriginX);
-}
-
-wxCoord wxDCBase::LogicalToDeviceXRel(wxCoord x) const
-{
- // axis orientation is not taken into account for conversion of a distance
- return (wxCoord) (x*m_logicalScaleX*m_userScaleX*m_scaleX);
-}
-
-wxCoord wxDCBase::LogicalToDeviceY(wxCoord y) const
-{
- return (wxCoord) ((y - m_logicalOriginY)*m_logicalScaleY*m_userScaleY*m_signY*m_scaleY + m_deviceOriginY);
-}
-
-wxCoord wxDCBase::LogicalToDeviceYRel(wxCoord y) const
-{
- // axis orientation is not taken into account for conversion of a distance
- return (wxCoord) (y*m_logicalScaleY*m_userScaleY*m_scaleY);
-}
-
// ---------------------------------------------------------------------------
// bit blit
// ---------------------------------------------------------------------------
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;