fixes for using non opaque structs under debug classic, support for ATSU and pixel pattern.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13504 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -56,6 +56,12 @@
|
||||
#if wxUSE_SOCKETS
|
||||
#ifdef __DARWIN__
|
||||
#include <CoreServices/CoreServices.h>
|
||||
#else
|
||||
#include <Sound.h>
|
||||
#include <Threads.h>
|
||||
#include <ToolUtils.h>
|
||||
#include <DiskInit.h>
|
||||
#include <Devices.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1160,7 +1166,7 @@ void wxApp::MacHandleMouseDownEvent( WXEVENTREF evr )
|
||||
GrafPtr port ;
|
||||
GetPort( &port ) ;
|
||||
Point pt = { 0, 0 } ;
|
||||
SetPort( GetWindowPort(window) ) ;
|
||||
SetPortWindowPort(window) ;
|
||||
LocalToGlobal( &pt ) ;
|
||||
SetPort( port ) ;
|
||||
win->SetSize( pt.h , pt.v , -1 ,
|
||||
@@ -1226,7 +1232,7 @@ void wxApp::MacHandleMouseDownEvent( WXEVENTREF evr )
|
||||
{
|
||||
GrafPtr port ;
|
||||
GetPort( &port ) ;
|
||||
SetPort( GetWindowPort(window) ) ;
|
||||
SetPortWindowPort(window) ;
|
||||
SetPort( port ) ;
|
||||
}
|
||||
if ( window != frontWindow && wxTheApp->s_captureWindow == NULL )
|
||||
|
@@ -56,6 +56,12 @@
|
||||
#if wxUSE_SOCKETS
|
||||
#ifdef __DARWIN__
|
||||
#include <CoreServices/CoreServices.h>
|
||||
#else
|
||||
#include <Sound.h>
|
||||
#include <Threads.h>
|
||||
#include <ToolUtils.h>
|
||||
#include <DiskInit.h>
|
||||
#include <Devices.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1160,7 +1166,7 @@ void wxApp::MacHandleMouseDownEvent( WXEVENTREF evr )
|
||||
GrafPtr port ;
|
||||
GetPort( &port ) ;
|
||||
Point pt = { 0, 0 } ;
|
||||
SetPort( GetWindowPort(window) ) ;
|
||||
SetPortWindowPort(window) ;
|
||||
LocalToGlobal( &pt ) ;
|
||||
SetPort( port ) ;
|
||||
win->SetSize( pt.h , pt.v , -1 ,
|
||||
@@ -1226,7 +1232,7 @@ void wxApp::MacHandleMouseDownEvent( WXEVENTREF evr )
|
||||
{
|
||||
GrafPtr port ;
|
||||
GetPort( &port ) ;
|
||||
SetPort( GetWindowPort(window) ) ;
|
||||
SetPortWindowPort(window) ;
|
||||
SetPort( port ) ;
|
||||
}
|
||||
if ( window != frontWindow && wxTheApp->s_captureWindow == NULL )
|
||||
|
@@ -23,6 +23,9 @@
|
||||
#include "wx/intl.h"
|
||||
|
||||
#include "wx/mac/private.h"
|
||||
#ifndef __DARWIN__
|
||||
#include <Scrap.h>
|
||||
#endif
|
||||
|
||||
#define wxUSE_DATAOBJ 1
|
||||
|
||||
|
@@ -21,6 +21,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxColourDialog, wxDialog)
|
||||
#endif
|
||||
|
||||
#include "wx/mac/private.h"
|
||||
#ifndef __DARWIN__
|
||||
#include <ColorPicker.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* wxColourDialog
|
||||
|
@@ -27,7 +27,9 @@ using namespace std ;
|
||||
#endif
|
||||
|
||||
#include "wx/mac/private.h"
|
||||
|
||||
#include "ATSUnicode.h"
|
||||
#include "TextCommon.h"
|
||||
#include "TextEncodingConverter.h"
|
||||
|
||||
#if !USE_SHARED_LIBRARY
|
||||
IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
|
||||
@@ -52,6 +54,19 @@ const short kUnsupportedMode = -2 ;
|
||||
|
||||
#define wxMAC_EXPERIMENTAL_PATTERN 0
|
||||
|
||||
wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) :
|
||||
m_ph( (GrafPtr) dc->m_macPort )
|
||||
{
|
||||
wxASSERT( dc->Ok() ) ;
|
||||
m_dc = dc ;
|
||||
dc->MacSetupPort(&m_ph) ;
|
||||
}
|
||||
|
||||
wxMacPortSetter::~wxMacPortSetter()
|
||||
{
|
||||
m_dc->MacCleanupPort(&m_ph) ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Local functions
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -194,17 +209,11 @@ wxDC::wxDC()
|
||||
m_pen = *wxBLACK_PEN;
|
||||
m_font = *wxNORMAL_FONT;
|
||||
m_brush = *wxWHITE_BRUSH;
|
||||
}
|
||||
wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) :
|
||||
m_ph( (GrafPtr) dc->m_macPort )
|
||||
{
|
||||
wxASSERT( dc->Ok() ) ;
|
||||
|
||||
dc->MacSetupPort(&m_ph) ;
|
||||
}
|
||||
|
||||
wxMacPortSetter::~wxMacPortSetter()
|
||||
{
|
||||
m_macCurrentPortStateHelper = NULL ;
|
||||
m_macATSUIStyle = NULL ;
|
||||
m_macAliasWasEnabled = false;
|
||||
m_macForegroundPixMap = NULL ;
|
||||
m_macBackgroundPixMap = NULL ;
|
||||
}
|
||||
|
||||
wxDC::~wxDC(void)
|
||||
@@ -214,6 +223,8 @@ wxDC::~wxDC(void)
|
||||
}
|
||||
void wxDC::MacSetupPort(wxMacPortStateHelper* help) const
|
||||
{
|
||||
wxASSERT( m_macCurrentPortStateHelper == NULL ) ;
|
||||
m_macCurrentPortStateHelper = help ;
|
||||
SetClip( (RgnHandle) m_macCurrentClipRgn);
|
||||
|
||||
m_macFontInstalled = false ;
|
||||
@@ -221,6 +232,36 @@ void wxDC::MacSetupPort(wxMacPortStateHelper* help) const
|
||||
m_macPenInstalled = false ;
|
||||
}
|
||||
|
||||
void wxDC::MacCleanupPort(wxMacPortStateHelper* help) const
|
||||
{
|
||||
wxASSERT( m_macCurrentPortStateHelper == help ) ;
|
||||
m_macCurrentPortStateHelper = NULL ;
|
||||
if( m_macATSUIStyle )
|
||||
{
|
||||
::ATSUDisposeStyle((ATSUStyle)m_macATSUIStyle);
|
||||
m_macATSUIStyle = NULL ;
|
||||
}
|
||||
if ( m_macAliasWasEnabled )
|
||||
{
|
||||
SetAntiAliasedTextEnabled(m_macFormerAliasState, m_macFormerAliasSize);
|
||||
m_macAliasWasEnabled = false ;
|
||||
}
|
||||
if ( m_macForegroundPixMap )
|
||||
{
|
||||
Pattern blackColor ;
|
||||
::PenPat(GetQDGlobalsBlack(&blackColor));
|
||||
DisposePixMap( (PixMapHandle) m_macForegroundPixMap ) ;
|
||||
m_macForegroundPixMap = NULL ;
|
||||
}
|
||||
if ( m_macBackgroundPixMap )
|
||||
{
|
||||
Pattern whiteColor ;
|
||||
::BackPat(GetQDGlobalsWhite(&whiteColor));
|
||||
DisposePixMap( (PixMapHandle) m_macBackgroundPixMap ) ;
|
||||
m_macBackgroundPixMap = NULL ;
|
||||
}
|
||||
}
|
||||
|
||||
void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask )
|
||||
{
|
||||
wxCHECK_RET( Ok(), wxT("invalid window dc") );
|
||||
@@ -687,6 +728,10 @@ void wxDC::DoCrossHair( wxCoord x, wxCoord y )
|
||||
::LineTo( XLOG2DEVMAC(w), yy );
|
||||
::MoveTo( xx, YLOG2DEVMAC(0) );
|
||||
::LineTo( xx, YLOG2DEVMAC(h) );
|
||||
|
||||
CalcBoundingBox(x, y);
|
||||
CalcBoundingBox(x+w, y+h);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1316,104 +1361,89 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void wxDC::DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
|
||||
inline Fixed IntToFixed( int inInt )
|
||||
{
|
||||
return (((SInt32) inInt) << 16);
|
||||
}
|
||||
|
||||
|
||||
void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
|
||||
double angle)
|
||||
{
|
||||
wxCHECK_RET( Ok(), wxT("wxDC::DoDrawRotatedText Invalid window dc") );
|
||||
|
||||
if (angle == 0.0)
|
||||
{
|
||||
DrawText(text, x, y);
|
||||
DrawText(str, x, y);
|
||||
return;
|
||||
}
|
||||
|
||||
wxMacPortSetter helper(this) ;
|
||||
MacInstallFont() ;
|
||||
|
||||
// the size of the text
|
||||
wxCoord w, h;
|
||||
GetTextExtent(text, &w, &h);
|
||||
|
||||
// draw the string normally
|
||||
wxBitmap src(w, h);
|
||||
wxMemoryDC dc;
|
||||
dc.SelectObject(src);
|
||||
dc.SetFont(GetFont());
|
||||
dc.SetBackground(*wxWHITE_BRUSH);
|
||||
dc.SetBrush(*wxBLACK_BRUSH);
|
||||
dc.Clear();
|
||||
dc.DrawText(text, 0, 0);
|
||||
dc.SetFont(wxNullFont);
|
||||
dc.SelectObject(wxNullBitmap);
|
||||
|
||||
wxMacPortSetter helper(this) ;
|
||||
|
||||
// Calculate the size of the rotated bounding box.
|
||||
double rad = DegToRad(angle);
|
||||
double dx = cos(rad);
|
||||
double dy = sin(rad);
|
||||
|
||||
// the rectngle vertices are counted clockwise with the first one being at
|
||||
// (0, 0) (or, rather, at (x, y))
|
||||
double x2 = w * dx;
|
||||
double y2 = -w * dy; // y axis points to the bottom, hence minus
|
||||
double x4 = h * dy;
|
||||
double y4 = h * dx;
|
||||
double x3 = x4 + x2;
|
||||
double y3 = y4 + y2;
|
||||
|
||||
// calc max and min
|
||||
wxCoord maxX = (wxCoord)(dmax(x2, dmax(x3, x4)) + 0.5);
|
||||
wxCoord maxY = (wxCoord)(dmax(y2, dmax(y3, y4)) + 0.5);
|
||||
wxCoord minX = (wxCoord)(dmin(x2, dmin(x3, x4)) - 0.5);
|
||||
wxCoord minY = (wxCoord)(dmin(y2, dmin(y3, y4)) - 0.5);
|
||||
|
||||
// prepare to blit-with-rotate the bitmap to the DC
|
||||
wxImage image(src);
|
||||
|
||||
RGBColor colText = MAC_WXCOLORREF( m_textForegroundColour.GetPixel() );
|
||||
RGBColor colBack = MAC_WXCOLORREF( m_textBackgroundColour.GetPixel() );
|
||||
|
||||
unsigned char *data = image.GetData();
|
||||
|
||||
wxCoord dstX, dstY;
|
||||
double r, angleOrig;
|
||||
bool textPixel;
|
||||
|
||||
// paint pixel by pixel
|
||||
for ( wxCoord srcX = 0; srcX < w; srcX++ )
|
||||
wxString text ;
|
||||
if ( wxApp::s_macDefaultEncodingIsPC )
|
||||
{
|
||||
for ( wxCoord srcY = 0; srcY < h; srcY++ )
|
||||
{
|
||||
// transform source coords to dest coords
|
||||
r = sqrt( (double)(srcX * srcX + srcY * srcY) );
|
||||
angleOrig = atan2((double)srcY, (double)srcX) - rad;
|
||||
dstX = (wxCoord)(r * cos(angleOrig) + 0.5);
|
||||
dstY = (wxCoord)(r * sin(angleOrig) + 0.5);
|
||||
|
||||
// black pixel?
|
||||
textPixel = data[(srcY*w + srcX)*3] == 0;
|
||||
if ( textPixel || (m_backgroundMode == wxSOLID) )
|
||||
{
|
||||
SetCPixel(XLOG2DEVMAC(x + dstX), YLOG2DEVMAC(y + dstY),
|
||||
textPixel ? &colText : &colBack);
|
||||
}
|
||||
text = wxMacMakeMacStringFromPC( str ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
text = str ;
|
||||
}
|
||||
|
||||
// it would be better to draw with non underlined font and draw the line
|
||||
// manually here (it would be more straight...)
|
||||
#if 0
|
||||
if ( m_font.GetUnderlined() )
|
||||
wxFontRefData * font = (wxFontRefData*) m_font.GetRefData() ;
|
||||
if ( 0 )
|
||||
{
|
||||
::MoveTo(XLOG2DEVMAC(x + x4), YLOG2DEVMAC(y + y4 + font->descent));
|
||||
::LineTo(XLOG2DEVMAC(x + x3), YLOG2DEVMAC(y + y3 + font->descent));
|
||||
m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
|
||||
SetAntiAliasedTextEnabled(true, m_scaleY * font->m_macFontSize);
|
||||
m_macAliasWasEnabled = true ;
|
||||
}
|
||||
#endif // 0
|
||||
|
||||
// update the bounding box
|
||||
CalcBoundingBox(x + minX, y + minY);
|
||||
CalcBoundingBox(x + maxX, y + maxY);
|
||||
OSStatus status = noErr ;
|
||||
|
||||
TECObjectRef ec;
|
||||
status = TECCreateConverter(&ec, kTextEncodingMacRoman, kTextEncodingUnicodeDefault);
|
||||
wxASSERT_MSG( status == noErr , "couldn't start converter" ) ;
|
||||
|
||||
ByteCount byteOutLen ;
|
||||
ByteCount byteInLen = text.Length() ;
|
||||
ByteCount byteBufferLen = byteInLen *2 ;
|
||||
char* buf = new char[byteBufferLen] ;
|
||||
|
||||
status = TECConvertText(ec, (ConstTextPtr)text.c_str() , byteInLen, &byteInLen,
|
||||
(TextPtr)buf, byteBufferLen, &byteOutLen);
|
||||
|
||||
wxASSERT_MSG( status == noErr , "couldn't convert text" ) ;
|
||||
status = TECDisposeConverter(ec);
|
||||
wxASSERT_MSG( status == noErr , "couldn't dispose converter" ) ;
|
||||
|
||||
ATSUTextLayout atsuLayout ;
|
||||
UniCharCount chars = byteOutLen / 2 ;
|
||||
status = ::ATSUCreateTextLayoutWithTextPtr( (UniCharArrayPtr) buf , 0 , byteOutLen / 2 , byteOutLen / 2 , 1 ,
|
||||
&chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ;
|
||||
wxASSERT_MSG( status == noErr , "couldn't create the layout of the rotated text" );
|
||||
|
||||
Fixed atsuAngle = IntToFixed( angle ) ;
|
||||
ByteCount angleSize = sizeof(Fixed) ;
|
||||
ATSUAttributeTag rotationTag = kATSULineRotationTag ;
|
||||
ATSUAttributeValuePtr angleValue = &atsuAngle ;
|
||||
status = ::ATSUSetLayoutControls(atsuLayout , 1 , &rotationTag , &angleSize , &angleValue ) ;
|
||||
|
||||
status = ::ATSUDrawText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
|
||||
IntToFixed(XLOG2DEVMAC(x) ) , IntToFixed(YLOG2DEVMAC(y) ) );
|
||||
wxASSERT_MSG( status == noErr , "couldn't draw the rotated text" );
|
||||
Rect rect ;
|
||||
status = ::ATSUMeasureTextImage( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
|
||||
IntToFixed(XLOG2DEVMAC(x) ) , IntToFixed(YLOG2DEVMAC(y) ) , &rect );
|
||||
wxASSERT_MSG( status == noErr , "couldn't measure the rotated text" );
|
||||
|
||||
OffsetRect( &rect , -m_macLocalOrigin.x , -m_macLocalOrigin.y ) ;
|
||||
CalcBoundingBox(XDEV2LOG(rect.left), YDEV2LOG(rect.top) );
|
||||
CalcBoundingBox(XDEV2LOG(rect.right), YDEV2LOG(rect.bottom) );
|
||||
::ATSUDisposeTextLayout(atsuLayout);
|
||||
delete[] buf ;
|
||||
}
|
||||
|
||||
void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
|
||||
{
|
||||
wxCHECK_RET(Ok(), wxT("wxDC::DoDrawText Invalid DC"));
|
||||
@@ -1422,14 +1452,13 @@ void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
|
||||
long xx = XLOG2DEVMAC(x);
|
||||
long yy = YLOG2DEVMAC(y);
|
||||
|
||||
// if (m_pen.GetStyle() != wxTRANSPARENT)
|
||||
{
|
||||
MacInstallFont() ;
|
||||
/*
|
||||
Rect clip = { -32000 , -32000 , 32000 , 32000 } ;
|
||||
|
||||
::ClipRect( &clip ) ;
|
||||
*/
|
||||
if ( 0 )
|
||||
{
|
||||
m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
|
||||
SetAntiAliasedTextEnabled(true, 8);
|
||||
m_macAliasWasEnabled = true ;
|
||||
}
|
||||
|
||||
FontInfo fi ;
|
||||
::GetFontInfo( &fi ) ;
|
||||
@@ -1480,7 +1509,6 @@ void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
|
||||
::DrawText( text , laststop , i - laststop ) ;
|
||||
::TextMode( srcOr ) ;
|
||||
}
|
||||
}
|
||||
|
||||
bool wxDC::CanGetTextExtent() const
|
||||
{
|
||||
@@ -1602,12 +1630,13 @@ void wxDC::Clear(void)
|
||||
{
|
||||
wxCHECK_RET(Ok(), wxT("Invalid DC"));
|
||||
wxMacPortSetter helper(this) ;
|
||||
Rect rect = { -32767 , -32767 , 32767 , 32767 } ;
|
||||
Rect rect = { -32000 , -32000 , 32000 , 32000 } ;
|
||||
|
||||
if (m_backgroundBrush.GetStyle() != wxTRANSPARENT)
|
||||
{
|
||||
::PenNormal() ;
|
||||
//MacInstallBrush() ;
|
||||
MacSetupBackgroundForCurrentPort( m_backgroundBrush ) ;
|
||||
|
||||
::EraseRect( &rect ) ;
|
||||
}
|
||||
}
|
||||
@@ -1698,6 +1727,63 @@ void wxDC::MacInstallFont() const
|
||||
break ;
|
||||
}
|
||||
::PenMode( mode ) ;
|
||||
|
||||
OSStatus status = noErr ;
|
||||
|
||||
Fixed atsuSize = IntToFixed(m_scaleY * font->m_macFontSize) ;
|
||||
|
||||
Style qdStyle = font->m_macFontStyle ;
|
||||
ATSUFontID atsuFont = font->m_macATSUFontID ;
|
||||
|
||||
status = ::ATSUCreateStyle(&(ATSUStyle)m_macATSUIStyle) ;
|
||||
wxASSERT_MSG( status == noErr , "couldn't create ATSU style" ) ;
|
||||
|
||||
ATSUAttributeTag atsuTags[] =
|
||||
{
|
||||
kATSUFontTag ,
|
||||
kATSUSizeTag ,
|
||||
kATSUColorTag ,
|
||||
|
||||
kATSUQDBoldfaceTag ,
|
||||
kATSUQDItalicTag ,
|
||||
kATSUQDUnderlineTag ,
|
||||
kATSUQDCondensedTag ,
|
||||
kATSUQDExtendedTag ,
|
||||
|
||||
} ;
|
||||
|
||||
ByteCount atsuSizes[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
|
||||
{
|
||||
sizeof( ATSUFontID ) ,
|
||||
sizeof( Fixed ) ,
|
||||
sizeof( RGBColor ) ,
|
||||
sizeof( Boolean ) ,
|
||||
sizeof( Boolean ) ,
|
||||
sizeof( Boolean ) ,
|
||||
sizeof( Boolean ) ,
|
||||
sizeof( Boolean ) ,
|
||||
} ;
|
||||
|
||||
Boolean kTrue = true ;
|
||||
Boolean kFalse = false ;
|
||||
|
||||
ATSUAttributeValuePtr atsuValues[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
|
||||
{
|
||||
&atsuFont ,
|
||||
&atsuSize ,
|
||||
&MAC_WXCOLORREF( m_textForegroundColour.GetPixel() ) ,
|
||||
|
||||
(qdStyle & bold) ? &kTrue : &kFalse ,
|
||||
(qdStyle & italic) ? &kTrue : &kFalse ,
|
||||
(qdStyle & underline) ? &kTrue : &kFalse ,
|
||||
(qdStyle & condense) ? &kTrue : &kFalse ,
|
||||
(qdStyle & extend) ? &kTrue : &kFalse ,
|
||||
} ;
|
||||
|
||||
status = ::ATSUSetAttributes((ATSUStyle)m_macATSUIStyle, sizeof(atsuTags)/sizeof(ATSUAttributeTag),
|
||||
atsuTags, atsuSizes, atsuValues);
|
||||
wxASSERT_MSG( status == noErr , "couldn't set create ATSU style" ) ;
|
||||
|
||||
}
|
||||
|
||||
static void wxMacGetHatchPattern(int hatchStyle, Pattern *pattern)
|
||||
@@ -1946,18 +2032,13 @@ void wxDC::MacInstallBrush() const
|
||||
isMonochrome = true ;
|
||||
}
|
||||
|
||||
|
||||
if ( isMonochrome )
|
||||
if ( isMonochrome && width == 8 && height == 8 )
|
||||
{
|
||||
::RGBForeColor( &MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) );
|
||||
::RGBForeColor( &MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) );
|
||||
|
||||
BitMap* gwbitmap = (BitMap*) *gwpixmaphandle ; // since the color depth is 1 it is a BitMap
|
||||
UInt8 *gwbits = (UInt8*) gwbitmap->baseAddr ;
|
||||
int alignment = gwbitmap->rowBytes & 0x7FFF ;
|
||||
|
||||
if( width == 8 && height == 8 )
|
||||
{
|
||||
Pattern pat ;
|
||||
for ( int i = 0 ; i < 8 ; ++i )
|
||||
{
|
||||
@@ -1968,7 +2049,6 @@ void wxDC::MacInstallBrush() const
|
||||
}
|
||||
else
|
||||
{
|
||||
#if wxMAC_EXPERIMENTAL_PATTERN
|
||||
// this will be the code to handle power of 2 patterns, we will have to arrive at a nice
|
||||
// caching scheme before putting this into production
|
||||
Handle image;
|
||||
@@ -1982,6 +2062,8 @@ void wxDC::MacInstallBrush() const
|
||||
|
||||
PtrToHand( (**gwpixmaphandle).baseAddr, &image, imageSize );
|
||||
(**pixpat).patData = image;
|
||||
if ( isMonochrome )
|
||||
{
|
||||
CTabHandle ctable = ((**((**pixpat).patMap)).pmTable) ;
|
||||
ColorSpecPtr ctspec = (ColorSpecPtr) &(**ctable).ctTable ;
|
||||
if ( ctspec[0].rgb.red == 0x0000 )
|
||||
@@ -1995,12 +2077,9 @@ void wxDC::MacInstallBrush() const
|
||||
ctspec[1].rgb = MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ;
|
||||
}
|
||||
::CTabChanged( ctable ) ;
|
||||
}
|
||||
::PenPixPat(pixpat);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_macForegroundPixMap = pixpat ;
|
||||
}
|
||||
UnlockPixels( gwpixmaphandle ) ;
|
||||
}
|
||||
|
@@ -66,6 +66,8 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
|
||||
{
|
||||
m_macMask = mask->GetMaskBitmap() ;
|
||||
}
|
||||
SetRectRgn( (RgnHandle) m_macBoundaryClipRgn , 0 , 0 , m_selected.GetWidth() , m_selected.GetHeight() ) ;
|
||||
CopyRgn( (RgnHandle) m_macBoundaryClipRgn ,(RgnHandle) m_macCurrentClipRgn ) ;
|
||||
m_ok = TRUE ;
|
||||
}
|
||||
else
|
||||
|
@@ -27,6 +27,9 @@
|
||||
#include "wx/msgdlg.h"
|
||||
#include <math.h>
|
||||
#include "wx/mac/uma.h"
|
||||
#ifndef __DARWIN__
|
||||
#include "Printing.h"
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_CARBON) && !defined(__DARWIN__)
|
||||
# if PM_USE_SESSION_APIS
|
||||
|
@@ -23,7 +23,7 @@
|
||||
#include "wx/fontutil.h"
|
||||
|
||||
#include "wx/mac/private.h"
|
||||
|
||||
#include "ATSUnicode.h"
|
||||
|
||||
#if !USE_SHARED_LIBRARIES
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
|
||||
@@ -116,6 +116,12 @@ void wxFontRefData::MacFindFont()
|
||||
if (m_underlined)
|
||||
m_macFontStyle |= underline;
|
||||
m_macFontSize = m_pointSize ;
|
||||
|
||||
//TODO:if we supply the style as an additional parameter we must make a testing
|
||||
//sequence in order to degrade gracefully while trying to maintain most of the style
|
||||
//information, meanwhile we just take the normal font and apply the features after
|
||||
OSStatus status = ::ATSUFONDtoFontID(m_macFontNum, normal /*qdStyle*/, (UInt32*)&m_macATSUFontID);
|
||||
wxASSERT_MSG( status == noErr , "couldn't retrieve font identifier" ) ;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@@ -18,6 +18,9 @@
|
||||
#include "wx/dcprint.h"
|
||||
#include "wx/msgdlg.h"
|
||||
#include "wx/mac/uma.h"
|
||||
#ifndef __DARWIN__
|
||||
#include "Printing.h"
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_CARBON) && !defined(__DARWIN__)
|
||||
# if PM_USE_SESSION_APIS
|
||||
|
@@ -89,7 +89,8 @@ void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageS
|
||||
SetControlViewSize( (ControlHandle) m_macControl , m_pageSize ) ;
|
||||
}
|
||||
}
|
||||
Refresh() ;
|
||||
if ( refresh )
|
||||
MacRedrawControl() ;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -42,6 +42,10 @@
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
|
||||
#ifndef __DARWIN__
|
||||
#include <Scrap.h>
|
||||
#include <MacTextEditor.h>
|
||||
#endif
|
||||
#include "wx/mac/uma.h"
|
||||
|
||||
#define wxUSE_MLTE 0
|
||||
|
@@ -35,6 +35,9 @@
|
||||
#include "wx/thread.h"
|
||||
|
||||
#ifdef __WXMAC__
|
||||
#ifndef __DARWIN__
|
||||
#include <Threads.h>
|
||||
#endif
|
||||
#include "wx/mac/uma.h"
|
||||
#endif
|
||||
|
||||
|
@@ -22,6 +22,9 @@ IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
|
||||
#ifdef __WXMAC__
|
||||
#include "wx/mac/private.h"
|
||||
#endif
|
||||
#ifndef __DARWIN__
|
||||
#include <Timer.h>
|
||||
#endif
|
||||
|
||||
typedef struct MacTimerInfo
|
||||
{
|
||||
|
@@ -225,7 +225,7 @@ void wxMacToolTip::Draw()
|
||||
*/
|
||||
#endif
|
||||
{
|
||||
wxMacPortStateHelper help( GetWindowPort( m_window ) );
|
||||
wxMacPortStateHelper help( (GrafPtr) GetWindowPort( m_window ) );
|
||||
|
||||
m_shown = true ;
|
||||
|
||||
@@ -333,7 +333,7 @@ void wxMacToolTip::Clear()
|
||||
|
||||
if ( m_window == s_ToolTipWindowRef && m_backpict )
|
||||
{
|
||||
wxMacPortStateHelper help( GetWindowPort(m_window) ) ;
|
||||
wxMacPortStateHelper help( (GrafPtr) GetWindowPort(m_window) ) ;
|
||||
|
||||
m_shown = false ;
|
||||
|
||||
|
@@ -306,7 +306,7 @@ WXWidget wxTopLevelWindowMac::MacGetContainerForEmbedding()
|
||||
void wxTopLevelWindowMac::MacUpdate( long timestamp)
|
||||
{
|
||||
|
||||
wxMacPortStateHelper help( GetWindowPort( (WindowRef) m_macWindow) ) ;
|
||||
wxMacPortStateHelper help( (GrafPtr) GetWindowPort( (WindowRef) m_macWindow) ) ;
|
||||
|
||||
BeginUpdate( (WindowRef)m_macWindow ) ;
|
||||
|
||||
|
@@ -10,6 +10,8 @@
|
||||
# include <PMCore.h>
|
||||
# endif
|
||||
# include <PMApplication.h>
|
||||
# else
|
||||
# include <Printing.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -121,8 +123,17 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
|
||||
if ( menuMgrAttr & gestaltMenuMgrAquaLayoutMask )
|
||||
sUMAHasAquaLayout = true ;
|
||||
sUMASystemInitialized = true ;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
Boolean CanUseATSUI()
|
||||
{
|
||||
long result;
|
||||
OSErr err = Gestalt(gestaltATSUVersion, &result);
|
||||
return (err == noErr);
|
||||
}
|
||||
*/
|
||||
// process manager
|
||||
long UMAGetProcessMode()
|
||||
{
|
||||
|
@@ -29,6 +29,11 @@
|
||||
#include "MoreFiles.h"
|
||||
#include "MoreFilesExtras.h"
|
||||
|
||||
#ifndef __DARWIN__
|
||||
#include <Threads.h>
|
||||
#include <Sound.h>
|
||||
#endif
|
||||
|
||||
#ifndef __DARWIN__
|
||||
// defined in unix/utilsunx.cpp for Mac OS X
|
||||
|
||||
|
@@ -19,6 +19,9 @@
|
||||
|
||||
#ifdef __WXMAC__
|
||||
#include "wx/mac/private.h"
|
||||
#ifndef __DARWIN__
|
||||
#include <Sound.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
wxWave::wxWave()
|
||||
|
@@ -46,6 +46,10 @@
|
||||
#define MAC_SCROLLBAR_SIZE 16
|
||||
|
||||
#include "wx/mac/uma.h"
|
||||
#ifndef __DARWIN__
|
||||
#include <Windows.h>
|
||||
#include <ToolUtils.h>
|
||||
#endif
|
||||
|
||||
#if wxUSE_DRAG_AND_DROP
|
||||
#include "wx/dnd.h"
|
||||
|
@@ -23,6 +23,9 @@
|
||||
#include "wx/intl.h"
|
||||
|
||||
#include "wx/mac/private.h"
|
||||
#ifndef __DARWIN__
|
||||
#include <Scrap.h>
|
||||
#endif
|
||||
|
||||
#define wxUSE_DATAOBJ 1
|
||||
|
||||
|
@@ -21,6 +21,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxColourDialog, wxDialog)
|
||||
#endif
|
||||
|
||||
#include "wx/mac/private.h"
|
||||
#ifndef __DARWIN__
|
||||
#include <ColorPicker.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* wxColourDialog
|
||||
|
305
src/mac/dc.cpp
305
src/mac/dc.cpp
@@ -27,7 +27,9 @@ using namespace std ;
|
||||
#endif
|
||||
|
||||
#include "wx/mac/private.h"
|
||||
|
||||
#include "ATSUnicode.h"
|
||||
#include "TextCommon.h"
|
||||
#include "TextEncodingConverter.h"
|
||||
|
||||
#if !USE_SHARED_LIBRARY
|
||||
IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
|
||||
@@ -52,6 +54,19 @@ const short kUnsupportedMode = -2 ;
|
||||
|
||||
#define wxMAC_EXPERIMENTAL_PATTERN 0
|
||||
|
||||
wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) :
|
||||
m_ph( (GrafPtr) dc->m_macPort )
|
||||
{
|
||||
wxASSERT( dc->Ok() ) ;
|
||||
m_dc = dc ;
|
||||
dc->MacSetupPort(&m_ph) ;
|
||||
}
|
||||
|
||||
wxMacPortSetter::~wxMacPortSetter()
|
||||
{
|
||||
m_dc->MacCleanupPort(&m_ph) ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Local functions
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -194,17 +209,11 @@ wxDC::wxDC()
|
||||
m_pen = *wxBLACK_PEN;
|
||||
m_font = *wxNORMAL_FONT;
|
||||
m_brush = *wxWHITE_BRUSH;
|
||||
}
|
||||
wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) :
|
||||
m_ph( (GrafPtr) dc->m_macPort )
|
||||
{
|
||||
wxASSERT( dc->Ok() ) ;
|
||||
|
||||
dc->MacSetupPort(&m_ph) ;
|
||||
}
|
||||
|
||||
wxMacPortSetter::~wxMacPortSetter()
|
||||
{
|
||||
m_macCurrentPortStateHelper = NULL ;
|
||||
m_macATSUIStyle = NULL ;
|
||||
m_macAliasWasEnabled = false;
|
||||
m_macForegroundPixMap = NULL ;
|
||||
m_macBackgroundPixMap = NULL ;
|
||||
}
|
||||
|
||||
wxDC::~wxDC(void)
|
||||
@@ -214,6 +223,8 @@ wxDC::~wxDC(void)
|
||||
}
|
||||
void wxDC::MacSetupPort(wxMacPortStateHelper* help) const
|
||||
{
|
||||
wxASSERT( m_macCurrentPortStateHelper == NULL ) ;
|
||||
m_macCurrentPortStateHelper = help ;
|
||||
SetClip( (RgnHandle) m_macCurrentClipRgn);
|
||||
|
||||
m_macFontInstalled = false ;
|
||||
@@ -221,6 +232,36 @@ void wxDC::MacSetupPort(wxMacPortStateHelper* help) const
|
||||
m_macPenInstalled = false ;
|
||||
}
|
||||
|
||||
void wxDC::MacCleanupPort(wxMacPortStateHelper* help) const
|
||||
{
|
||||
wxASSERT( m_macCurrentPortStateHelper == help ) ;
|
||||
m_macCurrentPortStateHelper = NULL ;
|
||||
if( m_macATSUIStyle )
|
||||
{
|
||||
::ATSUDisposeStyle((ATSUStyle)m_macATSUIStyle);
|
||||
m_macATSUIStyle = NULL ;
|
||||
}
|
||||
if ( m_macAliasWasEnabled )
|
||||
{
|
||||
SetAntiAliasedTextEnabled(m_macFormerAliasState, m_macFormerAliasSize);
|
||||
m_macAliasWasEnabled = false ;
|
||||
}
|
||||
if ( m_macForegroundPixMap )
|
||||
{
|
||||
Pattern blackColor ;
|
||||
::PenPat(GetQDGlobalsBlack(&blackColor));
|
||||
DisposePixMap( (PixMapHandle) m_macForegroundPixMap ) ;
|
||||
m_macForegroundPixMap = NULL ;
|
||||
}
|
||||
if ( m_macBackgroundPixMap )
|
||||
{
|
||||
Pattern whiteColor ;
|
||||
::BackPat(GetQDGlobalsWhite(&whiteColor));
|
||||
DisposePixMap( (PixMapHandle) m_macBackgroundPixMap ) ;
|
||||
m_macBackgroundPixMap = NULL ;
|
||||
}
|
||||
}
|
||||
|
||||
void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask )
|
||||
{
|
||||
wxCHECK_RET( Ok(), wxT("invalid window dc") );
|
||||
@@ -687,6 +728,10 @@ void wxDC::DoCrossHair( wxCoord x, wxCoord y )
|
||||
::LineTo( XLOG2DEVMAC(w), yy );
|
||||
::MoveTo( xx, YLOG2DEVMAC(0) );
|
||||
::LineTo( xx, YLOG2DEVMAC(h) );
|
||||
|
||||
CalcBoundingBox(x, y);
|
||||
CalcBoundingBox(x+w, y+h);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1316,104 +1361,89 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void wxDC::DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
|
||||
inline Fixed IntToFixed( int inInt )
|
||||
{
|
||||
return (((SInt32) inInt) << 16);
|
||||
}
|
||||
|
||||
|
||||
void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
|
||||
double angle)
|
||||
{
|
||||
wxCHECK_RET( Ok(), wxT("wxDC::DoDrawRotatedText Invalid window dc") );
|
||||
|
||||
if (angle == 0.0)
|
||||
{
|
||||
DrawText(text, x, y);
|
||||
DrawText(str, x, y);
|
||||
return;
|
||||
}
|
||||
|
||||
wxMacPortSetter helper(this) ;
|
||||
MacInstallFont() ;
|
||||
|
||||
// the size of the text
|
||||
wxCoord w, h;
|
||||
GetTextExtent(text, &w, &h);
|
||||
|
||||
// draw the string normally
|
||||
wxBitmap src(w, h);
|
||||
wxMemoryDC dc;
|
||||
dc.SelectObject(src);
|
||||
dc.SetFont(GetFont());
|
||||
dc.SetBackground(*wxWHITE_BRUSH);
|
||||
dc.SetBrush(*wxBLACK_BRUSH);
|
||||
dc.Clear();
|
||||
dc.DrawText(text, 0, 0);
|
||||
dc.SetFont(wxNullFont);
|
||||
dc.SelectObject(wxNullBitmap);
|
||||
|
||||
wxMacPortSetter helper(this) ;
|
||||
|
||||
// Calculate the size of the rotated bounding box.
|
||||
double rad = DegToRad(angle);
|
||||
double dx = cos(rad);
|
||||
double dy = sin(rad);
|
||||
|
||||
// the rectngle vertices are counted clockwise with the first one being at
|
||||
// (0, 0) (or, rather, at (x, y))
|
||||
double x2 = w * dx;
|
||||
double y2 = -w * dy; // y axis points to the bottom, hence minus
|
||||
double x4 = h * dy;
|
||||
double y4 = h * dx;
|
||||
double x3 = x4 + x2;
|
||||
double y3 = y4 + y2;
|
||||
|
||||
// calc max and min
|
||||
wxCoord maxX = (wxCoord)(dmax(x2, dmax(x3, x4)) + 0.5);
|
||||
wxCoord maxY = (wxCoord)(dmax(y2, dmax(y3, y4)) + 0.5);
|
||||
wxCoord minX = (wxCoord)(dmin(x2, dmin(x3, x4)) - 0.5);
|
||||
wxCoord minY = (wxCoord)(dmin(y2, dmin(y3, y4)) - 0.5);
|
||||
|
||||
// prepare to blit-with-rotate the bitmap to the DC
|
||||
wxImage image(src);
|
||||
|
||||
RGBColor colText = MAC_WXCOLORREF( m_textForegroundColour.GetPixel() );
|
||||
RGBColor colBack = MAC_WXCOLORREF( m_textBackgroundColour.GetPixel() );
|
||||
|
||||
unsigned char *data = image.GetData();
|
||||
|
||||
wxCoord dstX, dstY;
|
||||
double r, angleOrig;
|
||||
bool textPixel;
|
||||
|
||||
// paint pixel by pixel
|
||||
for ( wxCoord srcX = 0; srcX < w; srcX++ )
|
||||
wxString text ;
|
||||
if ( wxApp::s_macDefaultEncodingIsPC )
|
||||
{
|
||||
for ( wxCoord srcY = 0; srcY < h; srcY++ )
|
||||
{
|
||||
// transform source coords to dest coords
|
||||
r = sqrt( (double)(srcX * srcX + srcY * srcY) );
|
||||
angleOrig = atan2((double)srcY, (double)srcX) - rad;
|
||||
dstX = (wxCoord)(r * cos(angleOrig) + 0.5);
|
||||
dstY = (wxCoord)(r * sin(angleOrig) + 0.5);
|
||||
|
||||
// black pixel?
|
||||
textPixel = data[(srcY*w + srcX)*3] == 0;
|
||||
if ( textPixel || (m_backgroundMode == wxSOLID) )
|
||||
{
|
||||
SetCPixel(XLOG2DEVMAC(x + dstX), YLOG2DEVMAC(y + dstY),
|
||||
textPixel ? &colText : &colBack);
|
||||
}
|
||||
text = wxMacMakeMacStringFromPC( str ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
text = str ;
|
||||
}
|
||||
|
||||
// it would be better to draw with non underlined font and draw the line
|
||||
// manually here (it would be more straight...)
|
||||
#if 0
|
||||
if ( m_font.GetUnderlined() )
|
||||
wxFontRefData * font = (wxFontRefData*) m_font.GetRefData() ;
|
||||
if ( 0 )
|
||||
{
|
||||
::MoveTo(XLOG2DEVMAC(x + x4), YLOG2DEVMAC(y + y4 + font->descent));
|
||||
::LineTo(XLOG2DEVMAC(x + x3), YLOG2DEVMAC(y + y3 + font->descent));
|
||||
m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
|
||||
SetAntiAliasedTextEnabled(true, m_scaleY * font->m_macFontSize);
|
||||
m_macAliasWasEnabled = true ;
|
||||
}
|
||||
#endif // 0
|
||||
|
||||
// update the bounding box
|
||||
CalcBoundingBox(x + minX, y + minY);
|
||||
CalcBoundingBox(x + maxX, y + maxY);
|
||||
OSStatus status = noErr ;
|
||||
|
||||
TECObjectRef ec;
|
||||
status = TECCreateConverter(&ec, kTextEncodingMacRoman, kTextEncodingUnicodeDefault);
|
||||
wxASSERT_MSG( status == noErr , "couldn't start converter" ) ;
|
||||
|
||||
ByteCount byteOutLen ;
|
||||
ByteCount byteInLen = text.Length() ;
|
||||
ByteCount byteBufferLen = byteInLen *2 ;
|
||||
char* buf = new char[byteBufferLen] ;
|
||||
|
||||
status = TECConvertText(ec, (ConstTextPtr)text.c_str() , byteInLen, &byteInLen,
|
||||
(TextPtr)buf, byteBufferLen, &byteOutLen);
|
||||
|
||||
wxASSERT_MSG( status == noErr , "couldn't convert text" ) ;
|
||||
status = TECDisposeConverter(ec);
|
||||
wxASSERT_MSG( status == noErr , "couldn't dispose converter" ) ;
|
||||
|
||||
ATSUTextLayout atsuLayout ;
|
||||
UniCharCount chars = byteOutLen / 2 ;
|
||||
status = ::ATSUCreateTextLayoutWithTextPtr( (UniCharArrayPtr) buf , 0 , byteOutLen / 2 , byteOutLen / 2 , 1 ,
|
||||
&chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ;
|
||||
wxASSERT_MSG( status == noErr , "couldn't create the layout of the rotated text" );
|
||||
|
||||
Fixed atsuAngle = IntToFixed( angle ) ;
|
||||
ByteCount angleSize = sizeof(Fixed) ;
|
||||
ATSUAttributeTag rotationTag = kATSULineRotationTag ;
|
||||
ATSUAttributeValuePtr angleValue = &atsuAngle ;
|
||||
status = ::ATSUSetLayoutControls(atsuLayout , 1 , &rotationTag , &angleSize , &angleValue ) ;
|
||||
|
||||
status = ::ATSUDrawText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
|
||||
IntToFixed(XLOG2DEVMAC(x) ) , IntToFixed(YLOG2DEVMAC(y) ) );
|
||||
wxASSERT_MSG( status == noErr , "couldn't draw the rotated text" );
|
||||
Rect rect ;
|
||||
status = ::ATSUMeasureTextImage( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
|
||||
IntToFixed(XLOG2DEVMAC(x) ) , IntToFixed(YLOG2DEVMAC(y) ) , &rect );
|
||||
wxASSERT_MSG( status == noErr , "couldn't measure the rotated text" );
|
||||
|
||||
OffsetRect( &rect , -m_macLocalOrigin.x , -m_macLocalOrigin.y ) ;
|
||||
CalcBoundingBox(XDEV2LOG(rect.left), YDEV2LOG(rect.top) );
|
||||
CalcBoundingBox(XDEV2LOG(rect.right), YDEV2LOG(rect.bottom) );
|
||||
::ATSUDisposeTextLayout(atsuLayout);
|
||||
delete[] buf ;
|
||||
}
|
||||
|
||||
void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
|
||||
{
|
||||
wxCHECK_RET(Ok(), wxT("wxDC::DoDrawText Invalid DC"));
|
||||
@@ -1422,14 +1452,13 @@ void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
|
||||
long xx = XLOG2DEVMAC(x);
|
||||
long yy = YLOG2DEVMAC(y);
|
||||
|
||||
// if (m_pen.GetStyle() != wxTRANSPARENT)
|
||||
{
|
||||
MacInstallFont() ;
|
||||
/*
|
||||
Rect clip = { -32000 , -32000 , 32000 , 32000 } ;
|
||||
|
||||
::ClipRect( &clip ) ;
|
||||
*/
|
||||
if ( 0 )
|
||||
{
|
||||
m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
|
||||
SetAntiAliasedTextEnabled(true, 8);
|
||||
m_macAliasWasEnabled = true ;
|
||||
}
|
||||
|
||||
FontInfo fi ;
|
||||
::GetFontInfo( &fi ) ;
|
||||
@@ -1480,7 +1509,6 @@ void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
|
||||
::DrawText( text , laststop , i - laststop ) ;
|
||||
::TextMode( srcOr ) ;
|
||||
}
|
||||
}
|
||||
|
||||
bool wxDC::CanGetTextExtent() const
|
||||
{
|
||||
@@ -1602,12 +1630,13 @@ void wxDC::Clear(void)
|
||||
{
|
||||
wxCHECK_RET(Ok(), wxT("Invalid DC"));
|
||||
wxMacPortSetter helper(this) ;
|
||||
Rect rect = { -32767 , -32767 , 32767 , 32767 } ;
|
||||
Rect rect = { -32000 , -32000 , 32000 , 32000 } ;
|
||||
|
||||
if (m_backgroundBrush.GetStyle() != wxTRANSPARENT)
|
||||
{
|
||||
::PenNormal() ;
|
||||
//MacInstallBrush() ;
|
||||
MacSetupBackgroundForCurrentPort( m_backgroundBrush ) ;
|
||||
|
||||
::EraseRect( &rect ) ;
|
||||
}
|
||||
}
|
||||
@@ -1698,6 +1727,63 @@ void wxDC::MacInstallFont() const
|
||||
break ;
|
||||
}
|
||||
::PenMode( mode ) ;
|
||||
|
||||
OSStatus status = noErr ;
|
||||
|
||||
Fixed atsuSize = IntToFixed(m_scaleY * font->m_macFontSize) ;
|
||||
|
||||
Style qdStyle = font->m_macFontStyle ;
|
||||
ATSUFontID atsuFont = font->m_macATSUFontID ;
|
||||
|
||||
status = ::ATSUCreateStyle(&(ATSUStyle)m_macATSUIStyle) ;
|
||||
wxASSERT_MSG( status == noErr , "couldn't create ATSU style" ) ;
|
||||
|
||||
ATSUAttributeTag atsuTags[] =
|
||||
{
|
||||
kATSUFontTag ,
|
||||
kATSUSizeTag ,
|
||||
kATSUColorTag ,
|
||||
|
||||
kATSUQDBoldfaceTag ,
|
||||
kATSUQDItalicTag ,
|
||||
kATSUQDUnderlineTag ,
|
||||
kATSUQDCondensedTag ,
|
||||
kATSUQDExtendedTag ,
|
||||
|
||||
} ;
|
||||
|
||||
ByteCount atsuSizes[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
|
||||
{
|
||||
sizeof( ATSUFontID ) ,
|
||||
sizeof( Fixed ) ,
|
||||
sizeof( RGBColor ) ,
|
||||
sizeof( Boolean ) ,
|
||||
sizeof( Boolean ) ,
|
||||
sizeof( Boolean ) ,
|
||||
sizeof( Boolean ) ,
|
||||
sizeof( Boolean ) ,
|
||||
} ;
|
||||
|
||||
Boolean kTrue = true ;
|
||||
Boolean kFalse = false ;
|
||||
|
||||
ATSUAttributeValuePtr atsuValues[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
|
||||
{
|
||||
&atsuFont ,
|
||||
&atsuSize ,
|
||||
&MAC_WXCOLORREF( m_textForegroundColour.GetPixel() ) ,
|
||||
|
||||
(qdStyle & bold) ? &kTrue : &kFalse ,
|
||||
(qdStyle & italic) ? &kTrue : &kFalse ,
|
||||
(qdStyle & underline) ? &kTrue : &kFalse ,
|
||||
(qdStyle & condense) ? &kTrue : &kFalse ,
|
||||
(qdStyle & extend) ? &kTrue : &kFalse ,
|
||||
} ;
|
||||
|
||||
status = ::ATSUSetAttributes((ATSUStyle)m_macATSUIStyle, sizeof(atsuTags)/sizeof(ATSUAttributeTag),
|
||||
atsuTags, atsuSizes, atsuValues);
|
||||
wxASSERT_MSG( status == noErr , "couldn't set create ATSU style" ) ;
|
||||
|
||||
}
|
||||
|
||||
static void wxMacGetHatchPattern(int hatchStyle, Pattern *pattern)
|
||||
@@ -1946,18 +2032,13 @@ void wxDC::MacInstallBrush() const
|
||||
isMonochrome = true ;
|
||||
}
|
||||
|
||||
|
||||
if ( isMonochrome )
|
||||
if ( isMonochrome && width == 8 && height == 8 )
|
||||
{
|
||||
::RGBForeColor( &MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) );
|
||||
::RGBForeColor( &MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) );
|
||||
|
||||
BitMap* gwbitmap = (BitMap*) *gwpixmaphandle ; // since the color depth is 1 it is a BitMap
|
||||
UInt8 *gwbits = (UInt8*) gwbitmap->baseAddr ;
|
||||
int alignment = gwbitmap->rowBytes & 0x7FFF ;
|
||||
|
||||
if( width == 8 && height == 8 )
|
||||
{
|
||||
Pattern pat ;
|
||||
for ( int i = 0 ; i < 8 ; ++i )
|
||||
{
|
||||
@@ -1968,7 +2049,6 @@ void wxDC::MacInstallBrush() const
|
||||
}
|
||||
else
|
||||
{
|
||||
#if wxMAC_EXPERIMENTAL_PATTERN
|
||||
// this will be the code to handle power of 2 patterns, we will have to arrive at a nice
|
||||
// caching scheme before putting this into production
|
||||
Handle image;
|
||||
@@ -1982,6 +2062,8 @@ void wxDC::MacInstallBrush() const
|
||||
|
||||
PtrToHand( (**gwpixmaphandle).baseAddr, &image, imageSize );
|
||||
(**pixpat).patData = image;
|
||||
if ( isMonochrome )
|
||||
{
|
||||
CTabHandle ctable = ((**((**pixpat).patMap)).pmTable) ;
|
||||
ColorSpecPtr ctspec = (ColorSpecPtr) &(**ctable).ctTable ;
|
||||
if ( ctspec[0].rgb.red == 0x0000 )
|
||||
@@ -1995,12 +2077,9 @@ void wxDC::MacInstallBrush() const
|
||||
ctspec[1].rgb = MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ;
|
||||
}
|
||||
::CTabChanged( ctable ) ;
|
||||
}
|
||||
::PenPixPat(pixpat);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_macForegroundPixMap = pixpat ;
|
||||
}
|
||||
UnlockPixels( gwpixmaphandle ) ;
|
||||
}
|
||||
|
@@ -66,6 +66,8 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
|
||||
{
|
||||
m_macMask = mask->GetMaskBitmap() ;
|
||||
}
|
||||
SetRectRgn( (RgnHandle) m_macBoundaryClipRgn , 0 , 0 , m_selected.GetWidth() , m_selected.GetHeight() ) ;
|
||||
CopyRgn( (RgnHandle) m_macBoundaryClipRgn ,(RgnHandle) m_macCurrentClipRgn ) ;
|
||||
m_ok = TRUE ;
|
||||
}
|
||||
else
|
||||
|
@@ -27,6 +27,9 @@
|
||||
#include "wx/msgdlg.h"
|
||||
#include <math.h>
|
||||
#include "wx/mac/uma.h"
|
||||
#ifndef __DARWIN__
|
||||
#include "Printing.h"
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_CARBON) && !defined(__DARWIN__)
|
||||
# if PM_USE_SESSION_APIS
|
||||
|
@@ -23,7 +23,7 @@
|
||||
#include "wx/fontutil.h"
|
||||
|
||||
#include "wx/mac/private.h"
|
||||
|
||||
#include "ATSUnicode.h"
|
||||
|
||||
#if !USE_SHARED_LIBRARIES
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
|
||||
@@ -116,6 +116,12 @@ void wxFontRefData::MacFindFont()
|
||||
if (m_underlined)
|
||||
m_macFontStyle |= underline;
|
||||
m_macFontSize = m_pointSize ;
|
||||
|
||||
//TODO:if we supply the style as an additional parameter we must make a testing
|
||||
//sequence in order to degrade gracefully while trying to maintain most of the style
|
||||
//information, meanwhile we just take the normal font and apply the features after
|
||||
OSStatus status = ::ATSUFONDtoFontID(m_macFontNum, normal /*qdStyle*/, (UInt32*)&m_macATSUFontID);
|
||||
wxASSERT_MSG( status == noErr , "couldn't retrieve font identifier" ) ;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@@ -18,6 +18,9 @@
|
||||
#include "wx/dcprint.h"
|
||||
#include "wx/msgdlg.h"
|
||||
#include "wx/mac/uma.h"
|
||||
#ifndef __DARWIN__
|
||||
#include "Printing.h"
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_CARBON) && !defined(__DARWIN__)
|
||||
# if PM_USE_SESSION_APIS
|
||||
|
@@ -89,7 +89,8 @@ void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageS
|
||||
SetControlViewSize( (ControlHandle) m_macControl , m_pageSize ) ;
|
||||
}
|
||||
}
|
||||
Refresh() ;
|
||||
if ( refresh )
|
||||
MacRedrawControl() ;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -42,6 +42,10 @@
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
|
||||
#ifndef __DARWIN__
|
||||
#include <Scrap.h>
|
||||
#include <MacTextEditor.h>
|
||||
#endif
|
||||
#include "wx/mac/uma.h"
|
||||
|
||||
#define wxUSE_MLTE 0
|
||||
|
@@ -35,6 +35,9 @@
|
||||
#include "wx/thread.h"
|
||||
|
||||
#ifdef __WXMAC__
|
||||
#ifndef __DARWIN__
|
||||
#include <Threads.h>
|
||||
#endif
|
||||
#include "wx/mac/uma.h"
|
||||
#endif
|
||||
|
||||
|
@@ -22,6 +22,9 @@ IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
|
||||
#ifdef __WXMAC__
|
||||
#include "wx/mac/private.h"
|
||||
#endif
|
||||
#ifndef __DARWIN__
|
||||
#include <Timer.h>
|
||||
#endif
|
||||
|
||||
typedef struct MacTimerInfo
|
||||
{
|
||||
|
@@ -225,7 +225,7 @@ void wxMacToolTip::Draw()
|
||||
*/
|
||||
#endif
|
||||
{
|
||||
wxMacPortStateHelper help( GetWindowPort( m_window ) );
|
||||
wxMacPortStateHelper help( (GrafPtr) GetWindowPort( m_window ) );
|
||||
|
||||
m_shown = true ;
|
||||
|
||||
@@ -333,7 +333,7 @@ void wxMacToolTip::Clear()
|
||||
|
||||
if ( m_window == s_ToolTipWindowRef && m_backpict )
|
||||
{
|
||||
wxMacPortStateHelper help( GetWindowPort(m_window) ) ;
|
||||
wxMacPortStateHelper help( (GrafPtr) GetWindowPort(m_window) ) ;
|
||||
|
||||
m_shown = false ;
|
||||
|
||||
|
@@ -306,7 +306,7 @@ WXWidget wxTopLevelWindowMac::MacGetContainerForEmbedding()
|
||||
void wxTopLevelWindowMac::MacUpdate( long timestamp)
|
||||
{
|
||||
|
||||
wxMacPortStateHelper help( GetWindowPort( (WindowRef) m_macWindow) ) ;
|
||||
wxMacPortStateHelper help( (GrafPtr) GetWindowPort( (WindowRef) m_macWindow) ) ;
|
||||
|
||||
BeginUpdate( (WindowRef)m_macWindow ) ;
|
||||
|
||||
|
@@ -10,6 +10,8 @@
|
||||
# include <PMCore.h>
|
||||
# endif
|
||||
# include <PMApplication.h>
|
||||
# else
|
||||
# include <Printing.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -121,8 +123,17 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
|
||||
if ( menuMgrAttr & gestaltMenuMgrAquaLayoutMask )
|
||||
sUMAHasAquaLayout = true ;
|
||||
sUMASystemInitialized = true ;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
Boolean CanUseATSUI()
|
||||
{
|
||||
long result;
|
||||
OSErr err = Gestalt(gestaltATSUVersion, &result);
|
||||
return (err == noErr);
|
||||
}
|
||||
*/
|
||||
// process manager
|
||||
long UMAGetProcessMode()
|
||||
{
|
||||
|
@@ -29,6 +29,11 @@
|
||||
#include "MoreFiles.h"
|
||||
#include "MoreFilesExtras.h"
|
||||
|
||||
#ifndef __DARWIN__
|
||||
#include <Threads.h>
|
||||
#include <Sound.h>
|
||||
#endif
|
||||
|
||||
#ifndef __DARWIN__
|
||||
// defined in unix/utilsunx.cpp for Mac OS X
|
||||
|
||||
|
@@ -19,6 +19,9 @@
|
||||
|
||||
#ifdef __WXMAC__
|
||||
#include "wx/mac/private.h"
|
||||
#ifndef __DARWIN__
|
||||
#include <Sound.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
wxWave::wxWave()
|
||||
|
@@ -46,6 +46,10 @@
|
||||
#define MAC_SCROLLBAR_SIZE 16
|
||||
|
||||
#include "wx/mac/uma.h"
|
||||
#ifndef __DARWIN__
|
||||
#include <Windows.h>
|
||||
#include <ToolUtils.h>
|
||||
#endif
|
||||
|
||||
#if wxUSE_DRAG_AND_DROP
|
||||
#include "wx/dnd.h"
|
||||
|
Reference in New Issue
Block a user