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
|
#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 )
|
||||||
|
@@ -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 )
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
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) ;
|
wxMacPortSetter helper(this) ;
|
||||||
|
MacInstallFont() ;
|
||||||
|
|
||||||
|
wxString text ;
|
||||||
|
if ( wxApp::s_macDefaultEncodingIsPC )
|
||||||
|
{
|
||||||
|
text = wxMacMakeMacStringFromPC( str ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
text = str ;
|
||||||
|
}
|
||||||
|
|
||||||
// Calculate the size of the rotated bounding box.
|
wxFontRefData * font = (wxFontRefData*) m_font.GetRefData() ;
|
||||||
double rad = DegToRad(angle);
|
if ( 0 )
|
||||||
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++ )
|
m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
|
||||||
{
|
SetAntiAliasedTextEnabled(true, m_scaleY * font->m_macFontSize);
|
||||||
// transform source coords to dest coords
|
m_macAliasWasEnabled = true ;
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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" );
|
||||||
|
|
||||||
// it would be better to draw with non underlined font and draw the line
|
Fixed atsuAngle = IntToFixed( angle ) ;
|
||||||
// manually here (it would be more straight...)
|
ByteCount angleSize = sizeof(Fixed) ;
|
||||||
#if 0
|
ATSUAttributeTag rotationTag = kATSULineRotationTag ;
|
||||||
if ( m_font.GetUnderlined() )
|
ATSUAttributeValuePtr angleValue = &atsuAngle ;
|
||||||
{
|
status = ::ATSUSetLayoutControls(atsuLayout , 1 , &rotationTag , &angleSize , &angleValue ) ;
|
||||||
::MoveTo(XLOG2DEVMAC(x + x4), YLOG2DEVMAC(y + y4 + font->descent));
|
|
||||||
::LineTo(XLOG2DEVMAC(x + x3), YLOG2DEVMAC(y + y3 + font->descent));
|
|
||||||
}
|
|
||||||
#endif // 0
|
|
||||||
|
|
||||||
// update the bounding box
|
status = ::ATSUDrawText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
|
||||||
CalcBoundingBox(x + minX, y + minY);
|
IntToFixed(XLOG2DEVMAC(x) ) , IntToFixed(YLOG2DEVMAC(y) ) );
|
||||||
CalcBoundingBox(x + maxX, y + maxY);
|
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,64 +1452,62 @@ 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() ;
|
||||||
|
if ( 0 )
|
||||||
|
{
|
||||||
|
m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
|
||||||
|
SetAntiAliasedTextEnabled(true, 8);
|
||||||
|
m_macAliasWasEnabled = true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FontInfo fi ;
|
||||||
|
::GetFontInfo( &fi ) ;
|
||||||
|
|
||||||
|
yy += fi.ascent ;
|
||||||
|
::MoveTo( xx , yy );
|
||||||
|
if ( m_backgroundMode == wxTRANSPARENT )
|
||||||
{
|
{
|
||||||
MacInstallFont() ;
|
::TextMode( srcOr) ;
|
||||||
/*
|
|
||||||
Rect clip = { -32000 , -32000 , 32000 , 32000 } ;
|
|
||||||
|
|
||||||
::ClipRect( &clip ) ;
|
|
||||||
*/
|
|
||||||
|
|
||||||
FontInfo fi ;
|
|
||||||
::GetFontInfo( &fi ) ;
|
|
||||||
|
|
||||||
yy += fi.ascent ;
|
|
||||||
::MoveTo( xx , yy );
|
|
||||||
if ( m_backgroundMode == wxTRANSPARENT )
|
|
||||||
{
|
|
||||||
::TextMode( srcOr) ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
::TextMode( srcCopy ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *text = NULL ;
|
|
||||||
int length = 0 ;
|
|
||||||
wxString macText ;
|
|
||||||
|
|
||||||
if ( wxApp::s_macDefaultEncodingIsPC )
|
|
||||||
{
|
|
||||||
macText = wxMacMakeMacStringFromPC( strtext ) ;
|
|
||||||
text = macText ;
|
|
||||||
length = macText.Length() ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
text = strtext ;
|
|
||||||
length = strtext.Length() ;
|
|
||||||
}
|
|
||||||
|
|
||||||
int laststop = 0 ;
|
|
||||||
int i = 0 ;
|
|
||||||
int line = 0 ;
|
|
||||||
|
|
||||||
while( i < length )
|
|
||||||
{
|
|
||||||
if( text[i] == 13 || text[i] == 10)
|
|
||||||
{
|
|
||||||
::DrawText( text , laststop , i - laststop ) ;
|
|
||||||
line++ ;
|
|
||||||
::MoveTo( xx , yy + line*(fi.descent + fi.ascent + fi.leading) );
|
|
||||||
laststop = i+1 ;
|
|
||||||
}
|
|
||||||
i++ ;
|
|
||||||
}
|
|
||||||
|
|
||||||
::DrawText( text , laststop , i - laststop ) ;
|
|
||||||
::TextMode( srcOr ) ;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
::TextMode( srcCopy ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *text = NULL ;
|
||||||
|
int length = 0 ;
|
||||||
|
wxString macText ;
|
||||||
|
|
||||||
|
if ( wxApp::s_macDefaultEncodingIsPC )
|
||||||
|
{
|
||||||
|
macText = wxMacMakeMacStringFromPC( strtext ) ;
|
||||||
|
text = macText ;
|
||||||
|
length = macText.Length() ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
text = strtext ;
|
||||||
|
length = strtext.Length() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
int laststop = 0 ;
|
||||||
|
int i = 0 ;
|
||||||
|
int line = 0 ;
|
||||||
|
|
||||||
|
while( i < length )
|
||||||
|
{
|
||||||
|
if( text[i] == 13 || text[i] == 10)
|
||||||
|
{
|
||||||
|
::DrawText( text , laststop , i - laststop ) ;
|
||||||
|
line++ ;
|
||||||
|
::MoveTo( xx , yy + line*(fi.descent + fi.ascent + fi.leading) );
|
||||||
|
laststop = i+1 ;
|
||||||
|
}
|
||||||
|
i++ ;
|
||||||
|
}
|
||||||
|
|
||||||
|
::DrawText( text , laststop , i - laststop ) ;
|
||||||
|
::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)
|
||||||
@@ -1875,7 +1961,7 @@ void wxDC::MacSetupBackgroundForCurrentPort(const wxBrush& background )
|
|||||||
}
|
}
|
||||||
case kwxMacBrushColour :
|
case kwxMacBrushColour :
|
||||||
{
|
{
|
||||||
::RGBBackColor( &MAC_WXCOLORREF( background.GetColour().GetPixel()) );
|
::RGBBackColor( &MAC_WXCOLORREF( background.GetColour().GetPixel()) );
|
||||||
int brushStyle = background.GetStyle();
|
int brushStyle = background.GetStyle();
|
||||||
if (brushStyle == wxSOLID)
|
if (brushStyle == wxSOLID)
|
||||||
::BackPat(GetQDGlobalsWhite(&whiteColor));
|
::BackPat(GetQDGlobalsWhite(&whiteColor));
|
||||||
@@ -1946,42 +2032,38 @@ 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 ;
|
||||||
|
Pattern pat ;
|
||||||
if( width == 8 && height == 8 )
|
for ( int i = 0 ; i < 8 ; ++i )
|
||||||
{
|
{
|
||||||
Pattern pat ;
|
pat.pat[i] = gwbits[i*alignment+0] ;
|
||||||
for ( int i = 0 ; i < 8 ; ++i )
|
}
|
||||||
{
|
UnlockPixels( GetGWorldPixMap( gw ) ) ;
|
||||||
pat.pat[i] = gwbits[i*alignment+0] ;
|
::PenPat( &pat ) ;
|
||||||
}
|
}
|
||||||
UnlockPixels( GetGWorldPixMap( gw ) ) ;
|
else
|
||||||
::PenPat( &pat ) ;
|
{
|
||||||
}
|
|
||||||
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;
|
||||||
long imageSize;
|
long imageSize;
|
||||||
PixPatHandle pixpat = NewPixPat() ;
|
PixPatHandle pixpat = NewPixPat() ;
|
||||||
|
|
||||||
CopyPixMap(gwpixmaphandle, (**pixpat).patMap);
|
CopyPixMap(gwpixmaphandle, (**pixpat).patMap);
|
||||||
imageSize = GetPixRowBytes((**pixpat).patMap) *
|
imageSize = GetPixRowBytes((**pixpat).patMap) *
|
||||||
((**(**pixpat).patMap).bounds.bottom -
|
((**(**pixpat).patMap).bounds.bottom -
|
||||||
(**(**pixpat).patMap).bounds.top);
|
(**(**pixpat).patMap).bounds.top);
|
||||||
|
|
||||||
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);
|
}
|
||||||
#endif
|
::PenPixPat(pixpat);
|
||||||
}
|
m_macForegroundPixMap = pixpat ;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
UnlockPixels( gwpixmaphandle ) ;
|
UnlockPixels( gwpixmaphandle ) ;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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" ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -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
|
||||||
|
@@ -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() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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 ;
|
||||||
|
|
||||||
|
@@ -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 ) ;
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
|
@@ -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"
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
451
src/mac/dc.cpp
451
src/mac/dc.cpp
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
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) ;
|
wxMacPortSetter helper(this) ;
|
||||||
|
MacInstallFont() ;
|
||||||
|
|
||||||
|
wxString text ;
|
||||||
|
if ( wxApp::s_macDefaultEncodingIsPC )
|
||||||
|
{
|
||||||
|
text = wxMacMakeMacStringFromPC( str ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
text = str ;
|
||||||
|
}
|
||||||
|
|
||||||
// Calculate the size of the rotated bounding box.
|
wxFontRefData * font = (wxFontRefData*) m_font.GetRefData() ;
|
||||||
double rad = DegToRad(angle);
|
if ( 0 )
|
||||||
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++ )
|
m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
|
||||||
{
|
SetAntiAliasedTextEnabled(true, m_scaleY * font->m_macFontSize);
|
||||||
// transform source coords to dest coords
|
m_macAliasWasEnabled = true ;
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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" );
|
||||||
|
|
||||||
// it would be better to draw with non underlined font and draw the line
|
Fixed atsuAngle = IntToFixed( angle ) ;
|
||||||
// manually here (it would be more straight...)
|
ByteCount angleSize = sizeof(Fixed) ;
|
||||||
#if 0
|
ATSUAttributeTag rotationTag = kATSULineRotationTag ;
|
||||||
if ( m_font.GetUnderlined() )
|
ATSUAttributeValuePtr angleValue = &atsuAngle ;
|
||||||
{
|
status = ::ATSUSetLayoutControls(atsuLayout , 1 , &rotationTag , &angleSize , &angleValue ) ;
|
||||||
::MoveTo(XLOG2DEVMAC(x + x4), YLOG2DEVMAC(y + y4 + font->descent));
|
|
||||||
::LineTo(XLOG2DEVMAC(x + x3), YLOG2DEVMAC(y + y3 + font->descent));
|
|
||||||
}
|
|
||||||
#endif // 0
|
|
||||||
|
|
||||||
// update the bounding box
|
status = ::ATSUDrawText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
|
||||||
CalcBoundingBox(x + minX, y + minY);
|
IntToFixed(XLOG2DEVMAC(x) ) , IntToFixed(YLOG2DEVMAC(y) ) );
|
||||||
CalcBoundingBox(x + maxX, y + maxY);
|
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,64 +1452,62 @@ 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() ;
|
||||||
|
if ( 0 )
|
||||||
|
{
|
||||||
|
m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize);
|
||||||
|
SetAntiAliasedTextEnabled(true, 8);
|
||||||
|
m_macAliasWasEnabled = true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FontInfo fi ;
|
||||||
|
::GetFontInfo( &fi ) ;
|
||||||
|
|
||||||
|
yy += fi.ascent ;
|
||||||
|
::MoveTo( xx , yy );
|
||||||
|
if ( m_backgroundMode == wxTRANSPARENT )
|
||||||
{
|
{
|
||||||
MacInstallFont() ;
|
::TextMode( srcOr) ;
|
||||||
/*
|
|
||||||
Rect clip = { -32000 , -32000 , 32000 , 32000 } ;
|
|
||||||
|
|
||||||
::ClipRect( &clip ) ;
|
|
||||||
*/
|
|
||||||
|
|
||||||
FontInfo fi ;
|
|
||||||
::GetFontInfo( &fi ) ;
|
|
||||||
|
|
||||||
yy += fi.ascent ;
|
|
||||||
::MoveTo( xx , yy );
|
|
||||||
if ( m_backgroundMode == wxTRANSPARENT )
|
|
||||||
{
|
|
||||||
::TextMode( srcOr) ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
::TextMode( srcCopy ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *text = NULL ;
|
|
||||||
int length = 0 ;
|
|
||||||
wxString macText ;
|
|
||||||
|
|
||||||
if ( wxApp::s_macDefaultEncodingIsPC )
|
|
||||||
{
|
|
||||||
macText = wxMacMakeMacStringFromPC( strtext ) ;
|
|
||||||
text = macText ;
|
|
||||||
length = macText.Length() ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
text = strtext ;
|
|
||||||
length = strtext.Length() ;
|
|
||||||
}
|
|
||||||
|
|
||||||
int laststop = 0 ;
|
|
||||||
int i = 0 ;
|
|
||||||
int line = 0 ;
|
|
||||||
|
|
||||||
while( i < length )
|
|
||||||
{
|
|
||||||
if( text[i] == 13 || text[i] == 10)
|
|
||||||
{
|
|
||||||
::DrawText( text , laststop , i - laststop ) ;
|
|
||||||
line++ ;
|
|
||||||
::MoveTo( xx , yy + line*(fi.descent + fi.ascent + fi.leading) );
|
|
||||||
laststop = i+1 ;
|
|
||||||
}
|
|
||||||
i++ ;
|
|
||||||
}
|
|
||||||
|
|
||||||
::DrawText( text , laststop , i - laststop ) ;
|
|
||||||
::TextMode( srcOr ) ;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
::TextMode( srcCopy ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *text = NULL ;
|
||||||
|
int length = 0 ;
|
||||||
|
wxString macText ;
|
||||||
|
|
||||||
|
if ( wxApp::s_macDefaultEncodingIsPC )
|
||||||
|
{
|
||||||
|
macText = wxMacMakeMacStringFromPC( strtext ) ;
|
||||||
|
text = macText ;
|
||||||
|
length = macText.Length() ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
text = strtext ;
|
||||||
|
length = strtext.Length() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
int laststop = 0 ;
|
||||||
|
int i = 0 ;
|
||||||
|
int line = 0 ;
|
||||||
|
|
||||||
|
while( i < length )
|
||||||
|
{
|
||||||
|
if( text[i] == 13 || text[i] == 10)
|
||||||
|
{
|
||||||
|
::DrawText( text , laststop , i - laststop ) ;
|
||||||
|
line++ ;
|
||||||
|
::MoveTo( xx , yy + line*(fi.descent + fi.ascent + fi.leading) );
|
||||||
|
laststop = i+1 ;
|
||||||
|
}
|
||||||
|
i++ ;
|
||||||
|
}
|
||||||
|
|
||||||
|
::DrawText( text , laststop , i - laststop ) ;
|
||||||
|
::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)
|
||||||
@@ -1875,7 +1961,7 @@ void wxDC::MacSetupBackgroundForCurrentPort(const wxBrush& background )
|
|||||||
}
|
}
|
||||||
case kwxMacBrushColour :
|
case kwxMacBrushColour :
|
||||||
{
|
{
|
||||||
::RGBBackColor( &MAC_WXCOLORREF( background.GetColour().GetPixel()) );
|
::RGBBackColor( &MAC_WXCOLORREF( background.GetColour().GetPixel()) );
|
||||||
int brushStyle = background.GetStyle();
|
int brushStyle = background.GetStyle();
|
||||||
if (brushStyle == wxSOLID)
|
if (brushStyle == wxSOLID)
|
||||||
::BackPat(GetQDGlobalsWhite(&whiteColor));
|
::BackPat(GetQDGlobalsWhite(&whiteColor));
|
||||||
@@ -1946,42 +2032,38 @@ 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 ;
|
||||||
|
Pattern pat ;
|
||||||
if( width == 8 && height == 8 )
|
for ( int i = 0 ; i < 8 ; ++i )
|
||||||
{
|
{
|
||||||
Pattern pat ;
|
pat.pat[i] = gwbits[i*alignment+0] ;
|
||||||
for ( int i = 0 ; i < 8 ; ++i )
|
}
|
||||||
{
|
UnlockPixels( GetGWorldPixMap( gw ) ) ;
|
||||||
pat.pat[i] = gwbits[i*alignment+0] ;
|
::PenPat( &pat ) ;
|
||||||
}
|
}
|
||||||
UnlockPixels( GetGWorldPixMap( gw ) ) ;
|
else
|
||||||
::PenPat( &pat ) ;
|
{
|
||||||
}
|
|
||||||
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;
|
||||||
long imageSize;
|
long imageSize;
|
||||||
PixPatHandle pixpat = NewPixPat() ;
|
PixPatHandle pixpat = NewPixPat() ;
|
||||||
|
|
||||||
CopyPixMap(gwpixmaphandle, (**pixpat).patMap);
|
CopyPixMap(gwpixmaphandle, (**pixpat).patMap);
|
||||||
imageSize = GetPixRowBytes((**pixpat).patMap) *
|
imageSize = GetPixRowBytes((**pixpat).patMap) *
|
||||||
((**(**pixpat).patMap).bounds.bottom -
|
((**(**pixpat).patMap).bounds.bottom -
|
||||||
(**(**pixpat).patMap).bounds.top);
|
(**(**pixpat).patMap).bounds.top);
|
||||||
|
|
||||||
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);
|
}
|
||||||
#endif
|
::PenPixPat(pixpat);
|
||||||
}
|
m_macForegroundPixMap = pixpat ;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
UnlockPixels( gwpixmaphandle ) ;
|
UnlockPixels( gwpixmaphandle ) ;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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" ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -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
|
||||||
|
@@ -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() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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 ;
|
||||||
|
|
||||||
|
@@ -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 ) ;
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
|
@@ -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"
|
||||||
|
Reference in New Issue
Block a user