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:
Stefan Csomor
2002-01-11 14:07:02 +00:00
parent 5921f83f73
commit 66a09d4776
36 changed files with 664 additions and 386 deletions

View File

@@ -56,6 +56,12 @@
#if wxUSE_SOCKETS #if wxUSE_SOCKETS
#ifdef __DARWIN__ #ifdef __DARWIN__
#include <CoreServices/CoreServices.h> #include <CoreServices/CoreServices.h>
#else
#include <Sound.h>
#include <Threads.h>
#include <ToolUtils.h>
#include <DiskInit.h>
#include <Devices.h>
#endif #endif
#endif #endif
@@ -1160,7 +1166,7 @@ void wxApp::MacHandleMouseDownEvent( WXEVENTREF evr )
GrafPtr port ; GrafPtr port ;
GetPort( &port ) ; GetPort( &port ) ;
Point pt = { 0, 0 } ; Point pt = { 0, 0 } ;
SetPort( GetWindowPort(window) ) ; SetPortWindowPort(window) ;
LocalToGlobal( &pt ) ; LocalToGlobal( &pt ) ;
SetPort( port ) ; SetPort( port ) ;
win->SetSize( pt.h , pt.v , -1 , win->SetSize( pt.h , pt.v , -1 ,
@@ -1226,7 +1232,7 @@ void wxApp::MacHandleMouseDownEvent( WXEVENTREF evr )
{ {
GrafPtr port ; GrafPtr port ;
GetPort( &port ) ; GetPort( &port ) ;
SetPort( GetWindowPort(window) ) ; SetPortWindowPort(window) ;
SetPort( port ) ; SetPort( port ) ;
} }
if ( window != frontWindow && wxTheApp->s_captureWindow == NULL ) if ( window != frontWindow && wxTheApp->s_captureWindow == NULL )

View File

@@ -56,6 +56,12 @@
#if wxUSE_SOCKETS #if wxUSE_SOCKETS
#ifdef __DARWIN__ #ifdef __DARWIN__
#include <CoreServices/CoreServices.h> #include <CoreServices/CoreServices.h>
#else
#include <Sound.h>
#include <Threads.h>
#include <ToolUtils.h>
#include <DiskInit.h>
#include <Devices.h>
#endif #endif
#endif #endif
@@ -1160,7 +1166,7 @@ void wxApp::MacHandleMouseDownEvent( WXEVENTREF evr )
GrafPtr port ; GrafPtr port ;
GetPort( &port ) ; GetPort( &port ) ;
Point pt = { 0, 0 } ; Point pt = { 0, 0 } ;
SetPort( GetWindowPort(window) ) ; SetPortWindowPort(window) ;
LocalToGlobal( &pt ) ; LocalToGlobal( &pt ) ;
SetPort( port ) ; SetPort( port ) ;
win->SetSize( pt.h , pt.v , -1 , win->SetSize( pt.h , pt.v , -1 ,
@@ -1226,7 +1232,7 @@ void wxApp::MacHandleMouseDownEvent( WXEVENTREF evr )
{ {
GrafPtr port ; GrafPtr port ;
GetPort( &port ) ; GetPort( &port ) ;
SetPort( GetWindowPort(window) ) ; SetPortWindowPort(window) ;
SetPort( port ) ; SetPort( port ) ;
} }
if ( window != frontWindow && wxTheApp->s_captureWindow == NULL ) if ( window != frontWindow && wxTheApp->s_captureWindow == NULL )

View File

@@ -23,6 +23,9 @@
#include "wx/intl.h" #include "wx/intl.h"
#include "wx/mac/private.h" #include "wx/mac/private.h"
#ifndef __DARWIN__
#include <Scrap.h>
#endif
#define wxUSE_DATAOBJ 1 #define wxUSE_DATAOBJ 1

View File

@@ -21,6 +21,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxColourDialog, wxDialog)
#endif #endif
#include "wx/mac/private.h" #include "wx/mac/private.h"
#ifndef __DARWIN__
#include <ColorPicker.h>
#endif
/* /*
* wxColourDialog * wxColourDialog

View File

@@ -27,7 +27,9 @@ using namespace std ;
#endif #endif
#include "wx/mac/private.h" #include "wx/mac/private.h"
#include "ATSUnicode.h"
#include "TextCommon.h"
#include "TextEncodingConverter.h"
#if !USE_SHARED_LIBRARY #if !USE_SHARED_LIBRARY
IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
@@ -52,6 +54,19 @@ const short kUnsupportedMode = -2 ;
#define wxMAC_EXPERIMENTAL_PATTERN 0 #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 // Local functions
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -194,17 +209,11 @@ wxDC::wxDC()
m_pen = *wxBLACK_PEN; m_pen = *wxBLACK_PEN;
m_font = *wxNORMAL_FONT; m_font = *wxNORMAL_FONT;
m_brush = *wxWHITE_BRUSH; m_brush = *wxWHITE_BRUSH;
} m_macCurrentPortStateHelper = NULL ;
wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) : m_macATSUIStyle = NULL ;
m_ph( (GrafPtr) dc->m_macPort ) m_macAliasWasEnabled = false;
{ m_macForegroundPixMap = NULL ;
wxASSERT( dc->Ok() ) ; m_macBackgroundPixMap = NULL ;
dc->MacSetupPort(&m_ph) ;
}
wxMacPortSetter::~wxMacPortSetter()
{
} }
wxDC::~wxDC(void) wxDC::~wxDC(void)
@@ -214,6 +223,8 @@ wxDC::~wxDC(void)
} }
void wxDC::MacSetupPort(wxMacPortStateHelper* help) const void wxDC::MacSetupPort(wxMacPortStateHelper* help) const
{ {
wxASSERT( m_macCurrentPortStateHelper == NULL ) ;
m_macCurrentPortStateHelper = help ;
SetClip( (RgnHandle) m_macCurrentClipRgn); SetClip( (RgnHandle) m_macCurrentClipRgn);
m_macFontInstalled = false ; m_macFontInstalled = false ;
@@ -221,6 +232,36 @@ void wxDC::MacSetupPort(wxMacPortStateHelper* help) const
m_macPenInstalled = false ; 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 ) void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask )
{ {
wxCHECK_RET( Ok(), wxT("invalid window dc") ); wxCHECK_RET( Ok(), wxT("invalid window dc") );
@@ -687,6 +728,10 @@ void wxDC::DoCrossHair( wxCoord x, wxCoord y )
::LineTo( XLOG2DEVMAC(w), yy ); ::LineTo( XLOG2DEVMAC(w), yy );
::MoveTo( xx, YLOG2DEVMAC(0) ); ::MoveTo( xx, YLOG2DEVMAC(0) );
::LineTo( xx, YLOG2DEVMAC(h) ); ::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; 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) double angle)
{ {
wxCHECK_RET( Ok(), wxT("wxDC::DoDrawRotatedText Invalid window dc") ); wxCHECK_RET( Ok(), wxT("wxDC::DoDrawRotatedText Invalid window dc") );
if (angle == 0.0) if (angle == 0.0)
{ {
DrawText(text, x, y); DrawText(str, x, y);
return; return;
} }
wxMacPortSetter helper(this) ;
MacInstallFont() ; MacInstallFont() ;
// the size of the text wxString text ;
wxCoord w, h; if ( wxApp::s_macDefaultEncodingIsPC )
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++ )
{ {
for ( wxCoord srcY = 0; srcY < h; srcY++ ) text = wxMacMakeMacStringFromPC( str ) ;
{
// 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);
}
} }
else
{
text = str ;
} }
// it would be better to draw with non underlined font and draw the line wxFontRefData * font = (wxFontRefData*) m_font.GetRefData() ;
// manually here (it would be more straight...) if ( 0 )
#if 0
if ( m_font.GetUnderlined() )
{ {
::MoveTo(XLOG2DEVMAC(x + x4), YLOG2DEVMAC(y + y4 + font->descent)); m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
::LineTo(XLOG2DEVMAC(x + x3), YLOG2DEVMAC(y + y3 + font->descent)); SetAntiAliasedTextEnabled(true, m_scaleY * font->m_macFontSize);
m_macAliasWasEnabled = true ;
} }
#endif // 0
// update the bounding box OSStatus status = noErr ;
CalcBoundingBox(x + minX, y + minY);
CalcBoundingBox(x + maxX, y + maxY); 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) void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
{ {
wxCHECK_RET(Ok(), wxT("wxDC::DoDrawText Invalid DC")); 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 xx = XLOG2DEVMAC(x);
long yy = YLOG2DEVMAC(y); long yy = YLOG2DEVMAC(y);
// if (m_pen.GetStyle() != wxTRANSPARENT)
{
MacInstallFont() ; MacInstallFont() ;
/* if ( 0 )
Rect clip = { -32000 , -32000 , 32000 , 32000 } ; {
m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
::ClipRect( &clip ) ; SetAntiAliasedTextEnabled(true, 8);
*/ m_macAliasWasEnabled = true ;
}
FontInfo fi ; FontInfo fi ;
::GetFontInfo( &fi ) ; ::GetFontInfo( &fi ) ;
@@ -1480,7 +1509,6 @@ void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
::DrawText( text , laststop , i - laststop ) ; ::DrawText( text , laststop , i - laststop ) ;
::TextMode( srcOr ) ; ::TextMode( srcOr ) ;
} }
}
bool wxDC::CanGetTextExtent() const bool wxDC::CanGetTextExtent() const
{ {
@@ -1602,12 +1630,13 @@ void wxDC::Clear(void)
{ {
wxCHECK_RET(Ok(), wxT("Invalid DC")); wxCHECK_RET(Ok(), wxT("Invalid DC"));
wxMacPortSetter helper(this) ; wxMacPortSetter helper(this) ;
Rect rect = { -32767 , -32767 , 32767 , 32767 } ; Rect rect = { -32000 , -32000 , 32000 , 32000 } ;
if (m_backgroundBrush.GetStyle() != wxTRANSPARENT) if (m_backgroundBrush.GetStyle() != wxTRANSPARENT)
{ {
::PenNormal() ;
//MacInstallBrush() ;
MacSetupBackgroundForCurrentPort( m_backgroundBrush ) ; MacSetupBackgroundForCurrentPort( m_backgroundBrush ) ;
::EraseRect( &rect ) ; ::EraseRect( &rect ) ;
} }
} }
@@ -1698,6 +1727,63 @@ void wxDC::MacInstallFont() const
break ; break ;
} }
::PenMode( mode ) ; ::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) static void wxMacGetHatchPattern(int hatchStyle, Pattern *pattern)
@@ -1946,18 +2032,13 @@ void wxDC::MacInstallBrush() const
isMonochrome = true ; isMonochrome = true ;
} }
if ( isMonochrome && width == 8 && height == 8 )
if ( isMonochrome )
{ {
::RGBForeColor( &MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ); ::RGBForeColor( &MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) );
::RGBForeColor( &MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) ); ::RGBForeColor( &MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) );
BitMap* gwbitmap = (BitMap*) *gwpixmaphandle ; // since the color depth is 1 it is a BitMap BitMap* gwbitmap = (BitMap*) *gwpixmaphandle ; // since the color depth is 1 it is a BitMap
UInt8 *gwbits = (UInt8*) gwbitmap->baseAddr ; UInt8 *gwbits = (UInt8*) gwbitmap->baseAddr ;
int alignment = gwbitmap->rowBytes & 0x7FFF ; int alignment = gwbitmap->rowBytes & 0x7FFF ;
if( width == 8 && height == 8 )
{
Pattern pat ; Pattern pat ;
for ( int i = 0 ; i < 8 ; ++i ) for ( int i = 0 ; i < 8 ; ++i )
{ {
@@ -1968,7 +2049,6 @@ void wxDC::MacInstallBrush() const
} }
else else
{ {
#if wxMAC_EXPERIMENTAL_PATTERN
// this will be the code to handle power of 2 patterns, we will have to arrive at a nice // 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 // caching scheme before putting this into production
Handle image; Handle image;
@@ -1982,6 +2062,8 @@ void wxDC::MacInstallBrush() const
PtrToHand( (**gwpixmaphandle).baseAddr, &image, imageSize ); PtrToHand( (**gwpixmaphandle).baseAddr, &image, imageSize );
(**pixpat).patData = image; (**pixpat).patData = image;
if ( isMonochrome )
{
CTabHandle ctable = ((**((**pixpat).patMap)).pmTable) ; CTabHandle ctable = ((**((**pixpat).patMap)).pmTable) ;
ColorSpecPtr ctspec = (ColorSpecPtr) &(**ctable).ctTable ; ColorSpecPtr ctspec = (ColorSpecPtr) &(**ctable).ctTable ;
if ( ctspec[0].rgb.red == 0x0000 ) if ( ctspec[0].rgb.red == 0x0000 )
@@ -1995,12 +2077,9 @@ void wxDC::MacInstallBrush() const
ctspec[1].rgb = MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ; ctspec[1].rgb = MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ;
} }
::CTabChanged( ctable ) ; ::CTabChanged( ctable ) ;
}
::PenPixPat(pixpat); ::PenPixPat(pixpat);
#endif m_macForegroundPixMap = pixpat ;
}
}
else
{
} }
UnlockPixels( gwpixmaphandle ) ; UnlockPixels( gwpixmaphandle ) ;
} }

View File

@@ -66,6 +66,8 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
{ {
m_macMask = mask->GetMaskBitmap() ; 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 ; m_ok = TRUE ;
} }
else else

View File

@@ -27,6 +27,9 @@
#include "wx/msgdlg.h" #include "wx/msgdlg.h"
#include <math.h> #include <math.h>
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#ifndef __DARWIN__
#include "Printing.h"
#endif
#if defined(TARGET_CARBON) && !defined(__DARWIN__) #if defined(TARGET_CARBON) && !defined(__DARWIN__)
# if PM_USE_SESSION_APIS # if PM_USE_SESSION_APIS

View File

@@ -23,7 +23,7 @@
#include "wx/fontutil.h" #include "wx/fontutil.h"
#include "wx/mac/private.h" #include "wx/mac/private.h"
#include "ATSUnicode.h"
#if !USE_SHARED_LIBRARIES #if !USE_SHARED_LIBRARIES
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject) IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
@@ -116,6 +116,12 @@ void wxFontRefData::MacFindFont()
if (m_underlined) if (m_underlined)
m_macFontStyle |= underline; m_macFontStyle |= underline;
m_macFontSize = m_pointSize ; 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" ) ;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -18,6 +18,9 @@
#include "wx/dcprint.h" #include "wx/dcprint.h"
#include "wx/msgdlg.h" #include "wx/msgdlg.h"
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#ifndef __DARWIN__
#include "Printing.h"
#endif
#if defined(TARGET_CARBON) && !defined(__DARWIN__) #if defined(TARGET_CARBON) && !defined(__DARWIN__)
# if PM_USE_SESSION_APIS # if PM_USE_SESSION_APIS

View File

@@ -89,7 +89,8 @@ void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageS
SetControlViewSize( (ControlHandle) m_macControl , m_pageSize ) ; SetControlViewSize( (ControlHandle) m_macControl , m_pageSize ) ;
} }
} }
Refresh() ; if ( refresh )
MacRedrawControl() ;
} }

View File

@@ -42,6 +42,10 @@
#include <malloc.h> #include <malloc.h>
#endif #endif
#ifndef __DARWIN__
#include <Scrap.h>
#include <MacTextEditor.h>
#endif
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#define wxUSE_MLTE 0 #define wxUSE_MLTE 0

View File

@@ -35,6 +35,9 @@
#include "wx/thread.h" #include "wx/thread.h"
#ifdef __WXMAC__ #ifdef __WXMAC__
#ifndef __DARWIN__
#include <Threads.h>
#endif
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#endif #endif

View File

@@ -22,6 +22,9 @@ IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
#ifdef __WXMAC__ #ifdef __WXMAC__
#include "wx/mac/private.h" #include "wx/mac/private.h"
#endif #endif
#ifndef __DARWIN__
#include <Timer.h>
#endif
typedef struct MacTimerInfo typedef struct MacTimerInfo
{ {

View File

@@ -225,7 +225,7 @@ void wxMacToolTip::Draw()
*/ */
#endif #endif
{ {
wxMacPortStateHelper help( GetWindowPort( m_window ) ); wxMacPortStateHelper help( (GrafPtr) GetWindowPort( m_window ) );
m_shown = true ; m_shown = true ;
@@ -333,7 +333,7 @@ void wxMacToolTip::Clear()
if ( m_window == s_ToolTipWindowRef && m_backpict ) if ( m_window == s_ToolTipWindowRef && m_backpict )
{ {
wxMacPortStateHelper help( GetWindowPort(m_window) ) ; wxMacPortStateHelper help( (GrafPtr) GetWindowPort(m_window) ) ;
m_shown = false ; m_shown = false ;

View File

@@ -306,7 +306,7 @@ WXWidget wxTopLevelWindowMac::MacGetContainerForEmbedding()
void wxTopLevelWindowMac::MacUpdate( long timestamp) void wxTopLevelWindowMac::MacUpdate( long timestamp)
{ {
wxMacPortStateHelper help( GetWindowPort( (WindowRef) m_macWindow) ) ; wxMacPortStateHelper help( (GrafPtr) GetWindowPort( (WindowRef) m_macWindow) ) ;
BeginUpdate( (WindowRef)m_macWindow ) ; BeginUpdate( (WindowRef)m_macWindow ) ;

View File

@@ -10,6 +10,8 @@
# include <PMCore.h> # include <PMCore.h>
# endif # endif
# include <PMApplication.h> # include <PMApplication.h>
# else
# include <Printing.h>
# endif # endif
#endif #endif
@@ -121,8 +123,17 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
if ( menuMgrAttr & gestaltMenuMgrAquaLayoutMask ) if ( menuMgrAttr & gestaltMenuMgrAquaLayoutMask )
sUMAHasAquaLayout = true ; sUMAHasAquaLayout = true ;
sUMASystemInitialized = true ; sUMASystemInitialized = true ;
} }
/*
Boolean CanUseATSUI()
{
long result;
OSErr err = Gestalt(gestaltATSUVersion, &result);
return (err == noErr);
}
*/
// process manager // process manager
long UMAGetProcessMode() long UMAGetProcessMode()
{ {

View File

@@ -29,6 +29,11 @@
#include "MoreFiles.h" #include "MoreFiles.h"
#include "MoreFilesExtras.h" #include "MoreFilesExtras.h"
#ifndef __DARWIN__
#include <Threads.h>
#include <Sound.h>
#endif
#ifndef __DARWIN__ #ifndef __DARWIN__
// defined in unix/utilsunx.cpp for Mac OS X // defined in unix/utilsunx.cpp for Mac OS X

View File

@@ -19,6 +19,9 @@
#ifdef __WXMAC__ #ifdef __WXMAC__
#include "wx/mac/private.h" #include "wx/mac/private.h"
#ifndef __DARWIN__
#include <Sound.h>
#endif
#endif #endif
wxWave::wxWave() wxWave::wxWave()

View File

@@ -46,6 +46,10 @@
#define MAC_SCROLLBAR_SIZE 16 #define MAC_SCROLLBAR_SIZE 16
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#ifndef __DARWIN__
#include <Windows.h>
#include <ToolUtils.h>
#endif
#if wxUSE_DRAG_AND_DROP #if wxUSE_DRAG_AND_DROP
#include "wx/dnd.h" #include "wx/dnd.h"

View File

@@ -23,6 +23,9 @@
#include "wx/intl.h" #include "wx/intl.h"
#include "wx/mac/private.h" #include "wx/mac/private.h"
#ifndef __DARWIN__
#include <Scrap.h>
#endif
#define wxUSE_DATAOBJ 1 #define wxUSE_DATAOBJ 1

View File

@@ -21,6 +21,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxColourDialog, wxDialog)
#endif #endif
#include "wx/mac/private.h" #include "wx/mac/private.h"
#ifndef __DARWIN__
#include <ColorPicker.h>
#endif
/* /*
* wxColourDialog * wxColourDialog

View File

@@ -27,7 +27,9 @@ using namespace std ;
#endif #endif
#include "wx/mac/private.h" #include "wx/mac/private.h"
#include "ATSUnicode.h"
#include "TextCommon.h"
#include "TextEncodingConverter.h"
#if !USE_SHARED_LIBRARY #if !USE_SHARED_LIBRARY
IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
@@ -52,6 +54,19 @@ const short kUnsupportedMode = -2 ;
#define wxMAC_EXPERIMENTAL_PATTERN 0 #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 // Local functions
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -194,17 +209,11 @@ wxDC::wxDC()
m_pen = *wxBLACK_PEN; m_pen = *wxBLACK_PEN;
m_font = *wxNORMAL_FONT; m_font = *wxNORMAL_FONT;
m_brush = *wxWHITE_BRUSH; m_brush = *wxWHITE_BRUSH;
} m_macCurrentPortStateHelper = NULL ;
wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) : m_macATSUIStyle = NULL ;
m_ph( (GrafPtr) dc->m_macPort ) m_macAliasWasEnabled = false;
{ m_macForegroundPixMap = NULL ;
wxASSERT( dc->Ok() ) ; m_macBackgroundPixMap = NULL ;
dc->MacSetupPort(&m_ph) ;
}
wxMacPortSetter::~wxMacPortSetter()
{
} }
wxDC::~wxDC(void) wxDC::~wxDC(void)
@@ -214,6 +223,8 @@ wxDC::~wxDC(void)
} }
void wxDC::MacSetupPort(wxMacPortStateHelper* help) const void wxDC::MacSetupPort(wxMacPortStateHelper* help) const
{ {
wxASSERT( m_macCurrentPortStateHelper == NULL ) ;
m_macCurrentPortStateHelper = help ;
SetClip( (RgnHandle) m_macCurrentClipRgn); SetClip( (RgnHandle) m_macCurrentClipRgn);
m_macFontInstalled = false ; m_macFontInstalled = false ;
@@ -221,6 +232,36 @@ void wxDC::MacSetupPort(wxMacPortStateHelper* help) const
m_macPenInstalled = false ; 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 ) void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask )
{ {
wxCHECK_RET( Ok(), wxT("invalid window dc") ); wxCHECK_RET( Ok(), wxT("invalid window dc") );
@@ -687,6 +728,10 @@ void wxDC::DoCrossHair( wxCoord x, wxCoord y )
::LineTo( XLOG2DEVMAC(w), yy ); ::LineTo( XLOG2DEVMAC(w), yy );
::MoveTo( xx, YLOG2DEVMAC(0) ); ::MoveTo( xx, YLOG2DEVMAC(0) );
::LineTo( xx, YLOG2DEVMAC(h) ); ::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; 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) double angle)
{ {
wxCHECK_RET( Ok(), wxT("wxDC::DoDrawRotatedText Invalid window dc") ); wxCHECK_RET( Ok(), wxT("wxDC::DoDrawRotatedText Invalid window dc") );
if (angle == 0.0) if (angle == 0.0)
{ {
DrawText(text, x, y); DrawText(str, x, y);
return; return;
} }
wxMacPortSetter helper(this) ;
MacInstallFont() ; MacInstallFont() ;
// the size of the text wxString text ;
wxCoord w, h; if ( wxApp::s_macDefaultEncodingIsPC )
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++ )
{ {
for ( wxCoord srcY = 0; srcY < h; srcY++ ) text = wxMacMakeMacStringFromPC( str ) ;
{
// 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);
}
} }
else
{
text = str ;
} }
// it would be better to draw with non underlined font and draw the line wxFontRefData * font = (wxFontRefData*) m_font.GetRefData() ;
// manually here (it would be more straight...) if ( 0 )
#if 0
if ( m_font.GetUnderlined() )
{ {
::MoveTo(XLOG2DEVMAC(x + x4), YLOG2DEVMAC(y + y4 + font->descent)); m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
::LineTo(XLOG2DEVMAC(x + x3), YLOG2DEVMAC(y + y3 + font->descent)); SetAntiAliasedTextEnabled(true, m_scaleY * font->m_macFontSize);
m_macAliasWasEnabled = true ;
} }
#endif // 0
// update the bounding box OSStatus status = noErr ;
CalcBoundingBox(x + minX, y + minY);
CalcBoundingBox(x + maxX, y + maxY); 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) void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
{ {
wxCHECK_RET(Ok(), wxT("wxDC::DoDrawText Invalid DC")); 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 xx = XLOG2DEVMAC(x);
long yy = YLOG2DEVMAC(y); long yy = YLOG2DEVMAC(y);
// if (m_pen.GetStyle() != wxTRANSPARENT)
{
MacInstallFont() ; MacInstallFont() ;
/* if ( 0 )
Rect clip = { -32000 , -32000 , 32000 , 32000 } ; {
m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
::ClipRect( &clip ) ; SetAntiAliasedTextEnabled(true, 8);
*/ m_macAliasWasEnabled = true ;
}
FontInfo fi ; FontInfo fi ;
::GetFontInfo( &fi ) ; ::GetFontInfo( &fi ) ;
@@ -1480,7 +1509,6 @@ void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
::DrawText( text , laststop , i - laststop ) ; ::DrawText( text , laststop , i - laststop ) ;
::TextMode( srcOr ) ; ::TextMode( srcOr ) ;
} }
}
bool wxDC::CanGetTextExtent() const bool wxDC::CanGetTextExtent() const
{ {
@@ -1602,12 +1630,13 @@ void wxDC::Clear(void)
{ {
wxCHECK_RET(Ok(), wxT("Invalid DC")); wxCHECK_RET(Ok(), wxT("Invalid DC"));
wxMacPortSetter helper(this) ; wxMacPortSetter helper(this) ;
Rect rect = { -32767 , -32767 , 32767 , 32767 } ; Rect rect = { -32000 , -32000 , 32000 , 32000 } ;
if (m_backgroundBrush.GetStyle() != wxTRANSPARENT) if (m_backgroundBrush.GetStyle() != wxTRANSPARENT)
{ {
::PenNormal() ;
//MacInstallBrush() ;
MacSetupBackgroundForCurrentPort( m_backgroundBrush ) ; MacSetupBackgroundForCurrentPort( m_backgroundBrush ) ;
::EraseRect( &rect ) ; ::EraseRect( &rect ) ;
} }
} }
@@ -1698,6 +1727,63 @@ void wxDC::MacInstallFont() const
break ; break ;
} }
::PenMode( mode ) ; ::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) static void wxMacGetHatchPattern(int hatchStyle, Pattern *pattern)
@@ -1946,18 +2032,13 @@ void wxDC::MacInstallBrush() const
isMonochrome = true ; isMonochrome = true ;
} }
if ( isMonochrome && width == 8 && height == 8 )
if ( isMonochrome )
{ {
::RGBForeColor( &MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ); ::RGBForeColor( &MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) );
::RGBForeColor( &MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) ); ::RGBForeColor( &MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) );
BitMap* gwbitmap = (BitMap*) *gwpixmaphandle ; // since the color depth is 1 it is a BitMap BitMap* gwbitmap = (BitMap*) *gwpixmaphandle ; // since the color depth is 1 it is a BitMap
UInt8 *gwbits = (UInt8*) gwbitmap->baseAddr ; UInt8 *gwbits = (UInt8*) gwbitmap->baseAddr ;
int alignment = gwbitmap->rowBytes & 0x7FFF ; int alignment = gwbitmap->rowBytes & 0x7FFF ;
if( width == 8 && height == 8 )
{
Pattern pat ; Pattern pat ;
for ( int i = 0 ; i < 8 ; ++i ) for ( int i = 0 ; i < 8 ; ++i )
{ {
@@ -1968,7 +2049,6 @@ void wxDC::MacInstallBrush() const
} }
else else
{ {
#if wxMAC_EXPERIMENTAL_PATTERN
// this will be the code to handle power of 2 patterns, we will have to arrive at a nice // 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 // caching scheme before putting this into production
Handle image; Handle image;
@@ -1982,6 +2062,8 @@ void wxDC::MacInstallBrush() const
PtrToHand( (**gwpixmaphandle).baseAddr, &image, imageSize ); PtrToHand( (**gwpixmaphandle).baseAddr, &image, imageSize );
(**pixpat).patData = image; (**pixpat).patData = image;
if ( isMonochrome )
{
CTabHandle ctable = ((**((**pixpat).patMap)).pmTable) ; CTabHandle ctable = ((**((**pixpat).patMap)).pmTable) ;
ColorSpecPtr ctspec = (ColorSpecPtr) &(**ctable).ctTable ; ColorSpecPtr ctspec = (ColorSpecPtr) &(**ctable).ctTable ;
if ( ctspec[0].rgb.red == 0x0000 ) if ( ctspec[0].rgb.red == 0x0000 )
@@ -1995,12 +2077,9 @@ void wxDC::MacInstallBrush() const
ctspec[1].rgb = MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ; ctspec[1].rgb = MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ;
} }
::CTabChanged( ctable ) ; ::CTabChanged( ctable ) ;
}
::PenPixPat(pixpat); ::PenPixPat(pixpat);
#endif m_macForegroundPixMap = pixpat ;
}
}
else
{
} }
UnlockPixels( gwpixmaphandle ) ; UnlockPixels( gwpixmaphandle ) ;
} }

View File

@@ -66,6 +66,8 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
{ {
m_macMask = mask->GetMaskBitmap() ; 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 ; m_ok = TRUE ;
} }
else else

View File

@@ -27,6 +27,9 @@
#include "wx/msgdlg.h" #include "wx/msgdlg.h"
#include <math.h> #include <math.h>
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#ifndef __DARWIN__
#include "Printing.h"
#endif
#if defined(TARGET_CARBON) && !defined(__DARWIN__) #if defined(TARGET_CARBON) && !defined(__DARWIN__)
# if PM_USE_SESSION_APIS # if PM_USE_SESSION_APIS

View File

@@ -23,7 +23,7 @@
#include "wx/fontutil.h" #include "wx/fontutil.h"
#include "wx/mac/private.h" #include "wx/mac/private.h"
#include "ATSUnicode.h"
#if !USE_SHARED_LIBRARIES #if !USE_SHARED_LIBRARIES
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject) IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
@@ -116,6 +116,12 @@ void wxFontRefData::MacFindFont()
if (m_underlined) if (m_underlined)
m_macFontStyle |= underline; m_macFontStyle |= underline;
m_macFontSize = m_pointSize ; 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" ) ;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -18,6 +18,9 @@
#include "wx/dcprint.h" #include "wx/dcprint.h"
#include "wx/msgdlg.h" #include "wx/msgdlg.h"
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#ifndef __DARWIN__
#include "Printing.h"
#endif
#if defined(TARGET_CARBON) && !defined(__DARWIN__) #if defined(TARGET_CARBON) && !defined(__DARWIN__)
# if PM_USE_SESSION_APIS # if PM_USE_SESSION_APIS

View File

@@ -89,7 +89,8 @@ void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageS
SetControlViewSize( (ControlHandle) m_macControl , m_pageSize ) ; SetControlViewSize( (ControlHandle) m_macControl , m_pageSize ) ;
} }
} }
Refresh() ; if ( refresh )
MacRedrawControl() ;
} }

View File

@@ -42,6 +42,10 @@
#include <malloc.h> #include <malloc.h>
#endif #endif
#ifndef __DARWIN__
#include <Scrap.h>
#include <MacTextEditor.h>
#endif
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#define wxUSE_MLTE 0 #define wxUSE_MLTE 0

View File

@@ -35,6 +35,9 @@
#include "wx/thread.h" #include "wx/thread.h"
#ifdef __WXMAC__ #ifdef __WXMAC__
#ifndef __DARWIN__
#include <Threads.h>
#endif
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#endif #endif

View File

@@ -22,6 +22,9 @@ IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
#ifdef __WXMAC__ #ifdef __WXMAC__
#include "wx/mac/private.h" #include "wx/mac/private.h"
#endif #endif
#ifndef __DARWIN__
#include <Timer.h>
#endif
typedef struct MacTimerInfo typedef struct MacTimerInfo
{ {

View File

@@ -225,7 +225,7 @@ void wxMacToolTip::Draw()
*/ */
#endif #endif
{ {
wxMacPortStateHelper help( GetWindowPort( m_window ) ); wxMacPortStateHelper help( (GrafPtr) GetWindowPort( m_window ) );
m_shown = true ; m_shown = true ;
@@ -333,7 +333,7 @@ void wxMacToolTip::Clear()
if ( m_window == s_ToolTipWindowRef && m_backpict ) if ( m_window == s_ToolTipWindowRef && m_backpict )
{ {
wxMacPortStateHelper help( GetWindowPort(m_window) ) ; wxMacPortStateHelper help( (GrafPtr) GetWindowPort(m_window) ) ;
m_shown = false ; m_shown = false ;

View File

@@ -306,7 +306,7 @@ WXWidget wxTopLevelWindowMac::MacGetContainerForEmbedding()
void wxTopLevelWindowMac::MacUpdate( long timestamp) void wxTopLevelWindowMac::MacUpdate( long timestamp)
{ {
wxMacPortStateHelper help( GetWindowPort( (WindowRef) m_macWindow) ) ; wxMacPortStateHelper help( (GrafPtr) GetWindowPort( (WindowRef) m_macWindow) ) ;
BeginUpdate( (WindowRef)m_macWindow ) ; BeginUpdate( (WindowRef)m_macWindow ) ;

View File

@@ -10,6 +10,8 @@
# include <PMCore.h> # include <PMCore.h>
# endif # endif
# include <PMApplication.h> # include <PMApplication.h>
# else
# include <Printing.h>
# endif # endif
#endif #endif
@@ -121,8 +123,17 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
if ( menuMgrAttr & gestaltMenuMgrAquaLayoutMask ) if ( menuMgrAttr & gestaltMenuMgrAquaLayoutMask )
sUMAHasAquaLayout = true ; sUMAHasAquaLayout = true ;
sUMASystemInitialized = true ; sUMASystemInitialized = true ;
} }
/*
Boolean CanUseATSUI()
{
long result;
OSErr err = Gestalt(gestaltATSUVersion, &result);
return (err == noErr);
}
*/
// process manager // process manager
long UMAGetProcessMode() long UMAGetProcessMode()
{ {

View File

@@ -29,6 +29,11 @@
#include "MoreFiles.h" #include "MoreFiles.h"
#include "MoreFilesExtras.h" #include "MoreFilesExtras.h"
#ifndef __DARWIN__
#include <Threads.h>
#include <Sound.h>
#endif
#ifndef __DARWIN__ #ifndef __DARWIN__
// defined in unix/utilsunx.cpp for Mac OS X // defined in unix/utilsunx.cpp for Mac OS X

View File

@@ -19,6 +19,9 @@
#ifdef __WXMAC__ #ifdef __WXMAC__
#include "wx/mac/private.h" #include "wx/mac/private.h"
#ifndef __DARWIN__
#include <Sound.h>
#endif
#endif #endif
wxWave::wxWave() wxWave::wxWave()

View File

@@ -46,6 +46,10 @@
#define MAC_SCROLLBAR_SIZE 16 #define MAC_SCROLLBAR_SIZE 16
#include "wx/mac/uma.h" #include "wx/mac/uma.h"
#ifndef __DARWIN__
#include <Windows.h>
#include <ToolUtils.h>
#endif
#if wxUSE_DRAG_AND_DROP #if wxUSE_DRAG_AND_DROP
#include "wx/dnd.h" #include "wx/dnd.h"