/////////////////////////////////////////////////////////////////////////////
-// Name: dc.cpp
+// Name: src/mac/classic/dc.cpp
// Purpose: wxDC class
// Author: Stefan Csomor
// Modified by:
// Created: 01/02/97
// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-#pragma implementation "dc.h"
-#endif
+#include "wx/wxprec.h"
#include "wx/dc.h"
-#include "wx/app.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/log.h"
+ #include "wx/app.h"
+ #include "wx/dcmemory.h"
+ #include "wx/dcprint.h"
+ #include "wx/region.h"
+#endif
+
#include "wx/mac/uma.h"
-#include "wx/dcmemory.h"
-#include "wx/dcprint.h"
-#include "wx/region.h"
#include "wx/image.h"
-#include "wx/log.h"
#if __MSL__ >= 0x6000
-#include "math.h"
+namespace std {}
using namespace std ;
#endif
#include <TextCommon.h>
#include <TextEncodingConverter.h>
#include <FixMath.h>
-#if !USE_SHARED_LIBRARY
+
IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
-#endif
//-----------------------------------------------------------------------------
// constants
//-----------------------------------------------------------------------------
-#define mm2inches 0.0393700787402
-#define inches2mm 25.4
-#define mm2twips 56.6929133859
-#define twips2mm 0.0176388888889
-#define mm2pt 2.83464566929
-#define pt2mm 0.352777777778
-#if !defined( __DARWIN__ ) || defined(__MWERKS__)
-#ifndef M_PI
-const double M_PI = 3.14159265358979 ;
-#endif
-#endif
const double RAD2DEG = 180.0 / M_PI;
const short kEmulatedMode = -1 ;
const short kUnsupportedMode = -2 ;
class wxMacFastPortSetter
{
public :
- wxMacFastPortSetter( const wxDC *dc )
+ wxMacFastPortSetter( const wxDC *dc )
{
- wxASSERT( dc->Ok() ) ;
- GetPort( &m_oldPort ) ;
- SetPort( (GrafPtr) dc->m_macPort ) ;
- m_clipRgn = NewRgn() ;
- GetClip( m_clipRgn ) ;
- m_dc = dc ;
- dc->MacSetupPort( NULL ) ;
+ wxASSERT( dc->Ok() ) ;
+ GetPort( &m_oldPort ) ;
+ SetPort( (GrafPtr) dc->m_macPort ) ;
+ m_clipRgn = NewRgn() ;
+ GetClip( m_clipRgn ) ;
+ m_dc = dc ;
+ dc->MacSetupPort( NULL ) ;
}
~wxMacFastPortSetter()
{
SetPort( (GrafPtr) m_dc->m_macPort ) ;
SetClip( m_clipRgn ) ;
- SetPort( m_oldPort ) ;
- m_dc->MacCleanupPort( NULL ) ;
- DisposeRgn( m_clipRgn ) ;
+ SetPort( m_oldPort ) ;
+ m_dc->MacCleanupPort( NULL ) ;
+ DisposeRgn( m_clipRgn ) ;
}
private :
RgnHandle m_clipRgn ;
#endif
-wxMacWindowClipper::wxMacWindowClipper( const wxWindow* win )
+wxMacWindowClipper::wxMacWindowClipper( const wxWindow* win )
{
m_formerClip = NewRgn() ;
m_newClip = NewRgn() ;
GetClip( m_formerClip ) ;
-
+
if ( win )
{
#if 0
wxWindow *parent = win->GetParent() ;
parent->MacWindowToRootWindow( &x,&y ) ;
wxSize size = parent->GetSize() ;
- SetRectRgn( insidergn , parent->MacGetLeftBorderSize() , parent->MacGetTopBorderSize() ,
- size.x - parent->MacGetRightBorderSize(),
+ SetRectRgn( insidergn , parent->MacGetLeftBorderSize() , parent->MacGetTopBorderSize() ,
+ size.x - parent->MacGetRightBorderSize(),
size.y - parent->MacGetBottomBorderSize()) ;
CopyRgn( (RgnHandle) parent->MacGetVisibleRegion(false).GetWXHRGN() , m_newClip ) ;
SectRgn( m_newClip , insidergn , m_newClip ) ;
CopyRgn( (RgnHandle) ((wxWindow*)win)->MacGetVisibleRegion().GetWXHRGN() , m_newClip ) ;
OffsetRgn( m_newClip , x , y ) ;
SetClip( m_newClip ) ;
-#endif
+#endif
}
}
-wxMacWindowClipper::~wxMacWindowClipper()
+wxMacWindowClipper::~wxMacWindowClipper()
{
SetClip( m_formerClip ) ;
DisposeRgn( m_newClip ) ;
wxDC::wxDC()
{
- m_ok = FALSE;
- m_colour = TRUE;
+ m_ok = false;
+ m_colour = true;
m_mm_to_pix_x = mm2pt;
m_mm_to_pix_y = mm2pt;
m_internalDeviceOriginX = 0;
m_userScaleY = 1.0;
m_scaleX = 1.0;
m_scaleY = 1.0;
- m_needComputeScaleX = FALSE;
- m_needComputeScaleY = FALSE;
+ m_needComputeScaleX = false;
+ m_needComputeScaleY = false;
m_macPort = NULL ;
m_macMask = NULL ;
- m_ok = FALSE ;
+ m_ok = false ;
m_macFontInstalled = false ;
m_macBrushInstalled = false ;
m_macPenInstalled = false ;
m_font = *wxNORMAL_FONT;
m_brush = *wxWHITE_BRUSH;
#ifdef __WXDEBUG__
- // needed to debug possible errors with two active drawing methods at the same time on
+ // needed to debug possible errors with two active drawing methods at the same time on
// the same DC
m_macCurrentPortStateHelper = NULL ;
#endif
}
else
{
- m_clipping = TRUE;
+ m_clipping = true;
m_clipX1 = xx;
m_clipY1 = yy;
m_clipX2 = xx + ww;
}
else
{
- m_clipping = TRUE;
+ m_clipping = true;
m_clipX1 = xx;
m_clipY1 = yy;
m_clipX2 = xx + ww;
{
wxMacFastPortSetter helper(this) ;
CopyRgn( (RgnHandle) m_macBoundaryClipRgn , (RgnHandle) m_macCurrentClipRgn ) ;
- m_clipping = FALSE;
+ ResetClipping();
}
void wxDC::DoGetSizeMM( int* width, int* height ) const
}
if (mode != wxMM_TEXT)
{
- m_needComputeScaleX = TRUE;
- m_needComputeScaleY = TRUE;
+ m_needComputeScaleX = true;
+ m_needComputeScaleY = true;
}
}
wxCHECK_MSG(Ok(), false, wxT("wxDC::DoBlit Illegal dc"));
wxCHECK_MSG(source->Ok(), false, wxT("wxDC::DoBlit Illegal source DC"));
if ( logical_func == wxNO_OP )
- return TRUE ;
+ return true ;
if (xsrcMask == -1 && ysrcMask == -1)
{
xsrcMask = xsrc; ysrcMask = ysrc;
if ( mode == kUnsupportedMode )
{
wxFAIL_MSG(wxT("unsupported blitting mode" ));
- return FALSE ;
+ return false ;
}
CGrafPtr sourcePort = (CGrafPtr) source->m_macPort ;
PixMapHandle bmappixels = GetGWorldPixMap( sourcePort ) ;
m_macPenInstalled = false ;
m_macBrushInstalled = false ;
m_macFontInstalled = false ;
- return TRUE;
+ return true;
}
#ifndef FixedToInt
return;
}
- if ( str.Length() == 0 )
+ if ( str.length() == 0 )
return ;
-
+
wxMacFastPortSetter helper(this) ;
MacInstallFont() ;
}
OSStatus status = noErr ;
ATSUTextLayout atsuLayout ;
- UniCharCount chars = str.Length() ;
+ UniCharCount chars = str.length() ;
#if wxUSE_UNICODE
- status = ::ATSUCreateTextLayoutWithTextPtr( (UniCharArrayPtr) (const wxChar*) str , 0 , str.Length() , str.Length() , 1 ,
+ status = ::ATSUCreateTextLayoutWithTextPtr( (UniCharArrayPtr) (const wxChar*) str , 0 , str.length() , str.length() , 1 ,
&chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ;
#else
wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
int iAngle = int( angle );
int drawX = XLOG2DEVMAC(x) ;
int drawY = YLOG2DEVMAC(y) ;
-
+
ATSUTextMeasurement textBefore ;
ATSUTextMeasurement textAfter ;
ATSUTextMeasurement ascent ;
ATSUTextMeasurement descent ;
-
-
+
+
if ( abs(iAngle) > 0 )
{
Fixed atsuAngle = IntToFixed( iAngle ) ;
}
status = ::ATSUMeasureText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
&textBefore , &textAfter, &ascent , &descent );
-
+
drawX += (int)(sin(angle/RAD2DEG) * FixedToInt(ascent));
drawY += (int)(cos(angle/RAD2DEG) * FixedToInt(ascent));
status = ::ATSUDrawText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
{
::TextMode( srcCopy ) ;
}
- int length = strtext.Length() ;
+ int length = strtext.length() ;
int laststop = 0 ;
int i = 0 ;
else
#endif
{
- wxCharBuffer text = linetext.mb_str(wxConvLocal) ;
+ wxCharBuffer text = linetext.mb_str(wxConvLocal) ;
::DrawText( text , 0 , strlen(text) ) ;
if ( m_backgroundMode != wxTRANSPARENT )
{
else
#endif
{
- wxCharBuffer text = linetext.mb_str(wxConvLocal) ;
+ wxCharBuffer text = linetext.mb_str(wxConvLocal) ;
if ( m_backgroundMode != wxTRANSPARENT )
{
Rect frame = { yy - fi.ascent + line*(fi.descent + fi.ascent + fi.leading) ,xx , yy - fi.ascent + (line+1)*(fi.descent + fi.ascent + fi.leading) , xx + 10000 } ;
MacInstallFont() ;
FontInfo fi ;
::GetFontInfo( &fi ) ;
-#if TARGET_CARBON
+#if TARGET_CARBON
bool useGetThemeText = ( GetThemeTextDimensions != (void*) kUnresolvedCFragSymbolAddress ) ;
if ( UMAGetSystemVersion() < 0x1000 || IsKindOf(CLASSINFO( wxPrinterDC ) ) || ((wxFont*)&m_font)->GetNoAntiAliasing() )
useGetThemeText = false ;
*descent =YDEV2LOGREL( fi.descent );
if ( externalLeading )
*externalLeading = YDEV2LOGREL( fi.leading ) ;
- int length = strtext.Length() ;
+ int length = strtext.length() ;
int laststop = 0 ;
int i = 0 ;
else
#endif
{
- wxCharBuffer text = linetext.mb_str(wxConvLocal) ;
+ wxCharBuffer text = linetext.mb_str(wxConvLocal) ;
curwidth = ::TextWidth( text , 0 , strlen(text) ) ;
}
if ( curwidth > *width )
}
i++ ;
}
-
+
wxString linetext = strtext.Mid( laststop , i - laststop ) ;
#endif // 0
wxString linetext = strtext ;
else
#endif
{
- wxCharBuffer text = linetext.mb_str(wxConvLocal) ;
+ wxCharBuffer text = linetext.mb_str(wxConvLocal) ;
curwidth = ::TextWidth( text , 0 , strlen(text) ) ;
}
if ( curwidth > *width )
wxCHECK_MSG(Ok(), false, wxT("Invalid DC"));
widths.Empty();
- widths.Add(0, text.Length());
+ widths.Add(0, text.length());
- if (text.Length() == 0)
+ if (text.length() == 0)
return false;
-
+
wxMacFastPortSetter helper(this) ;
MacInstallFont() ;
-#if TARGET_CARBON
+#if TARGET_CARBON
bool useGetThemeText = ( GetThemeTextDimensions != (void*) kUnresolvedCFragSymbolAddress ) ;
if ( UMAGetSystemVersion() < 0x1000 || IsKindOf(CLASSINFO( wxPrinterDC ) ) || ((wxFont*)&m_font)->GetNoAntiAliasing() )
useGetThemeText = false ;
// fonts, please change it. Currently it is measuring from the
// begining of the string for each succeding substring, which is much
// slower than this should be.
- for (size_t i=0; i<text.Length(); i++)
+ for (size_t i=0; i<text.length(); i++)
{
wxString str(text.Left(i+1));
Point bounds = {0,0};
widths[i] = XDEV2LOGREL(bounds.h);
}
}
- else
+ else
#endif
{
wxCharBuffer buff = text.mb_str(wxConvLocal);
// Copy to widths, starting at measurements[1]
// NOTE: this doesn't take into account any multi-byte characters
// in buff, it probabkly should...
- for (size_t i=0; i<text.Length(); i++)
+ for (size_t i=0; i<text.length(); i++)
widths[i] = XDEV2LOGREL(measurements[i+1]);
- delete [] measurements;
+ delete [] measurements;
}
return true;
{
int index = 0; // solid pattern by default
switch(penStyle)
- {
+ {
// hatches
case wxBDIAGONAL_HATCH: index = 1; break;
case wxFDIAGONAL_HATCH: index = 2; break;
case wxSHORT_DASH: index = 9; break;
case wxDOT_DASH: index = 10; break;
}
- *pattern = gPatterns[index];
+ *pattern = gPatterns[index];
}
void wxDC::MacInstallPen() const
if ( penWidth == 0 )
penWidth = 1 ;
::PenSize(penWidth, penWidth);
-
+
int penStyle = m_pen.GetStyle();
Pattern pat;
if (penStyle == wxUSER_DASH)
- {
+ {
// FIXME: there should be exactly 8 items in the dash
wxDash* dash ;
int number = m_pen.GetDashes(&dash) ;
int brushStyle = background.GetStyle();
if (brushStyle == wxSOLID)
::BackPat(GetQDGlobalsWhite(&whiteColor));
- else if (IS_HATCH(brushStyle))
+ else if (background.IsHatch())
{
Pattern pat ;
wxMacGetPattern(brushStyle, &pat);
{
::PenPat(GetQDGlobalsBlack(&blackColor));
}
- else if (IS_HATCH(brushStyle))
+ else if (m_brush.IsHatch())
{
Pattern pat ;
wxMacGetPattern(brushStyle, &pat);