#define GetPortVisibleRegion( p, r ) CopyRgn( p->visRgn , r )
#define GetQDGlobalsWhite( a ) (&((*a) = qd.white))
#define GetQDGlobalsBlack( a ) (&((*a) = qd.black))
-#define GetQDGlobalsScreenBits( a ) (*a) = qd.screenBits
+#define GetQDGlobalsScreenBits( a ) ((*a) = qd.screenBits)
#define GetQDGlobalsArrow( a ) (&((*a) = qd.arrow))
#define GetControlBounds( c , b ) &((*b) = (**c).contrlRect )
#define GetPortBitMapForCopyBits( p ) ((BitMap*) &(((CGrafPtr)p)->portPixMap ))
-#define GetControlOwner( control ) (**control).contrlOwner
+#define GetControlOwner( control ) ((**control).contrlOwner)
#define InvalWindowRgn( window , rgn ) InvalRgn( rgn )
+#define GetPortPenMode( p ) (p->pnMode)
+#define SetPortPenMode( p , mode ) (p->pnMode = mode )
+// control manager
+
+#define GetControlReference( control ) ((**control).contrlRfCon)
+
+// list manager
+
+#define SetListSelectionFlags( list , options ) (**list).selFlags = options
+#define GetListRefCon( list ) (**list).refCon
+
#endif
#if TARGET_CARBON
#define GetWindowUpdateRgn( inWindow , updateRgn ) GetWindowRegion( inWindow , kWindowUpdateRgn, updateRgn )
#if 0 // TO BE REMOVED SOON
-#include <extcdef.h>
+//#include <extcdef.h>
#include <PictUtils.h>
pascal SInt32 AGAProgressBarDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param);
#if 0 // TO BE REMOVED SOON
-#include <extcdef.h>
+//#include <extcdef.h>
#include <PictUtils.h>
pascal SInt32 AGAProgressBarDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param);
0 ,
hasVertScroll ,
noHorizScroll ,
- 128 ,
+ 0 ,
noGrowSpace ,
}
} ;
#include "wx/utils.h"
#ifndef __DARWIN__
- #include "extldef.h"
+// #include "extldef.h"
#endif
#if !USE_SHARED_LIBRARY
#include "wx/mac/uma.h"
+
+typedef struct {
+ unsigned short instruction;
+ void (*function)();
+} ldefRec, *ldefPtr, **ldefHandle;
+
+extern "C"
+{
+static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect *drawRect,
+ Cell cell, short dataOffset, short dataLength,
+ ListHandle listHandle ) ;
+}
+
+static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect *drawRect,
+ Cell cell, short dataOffset, short dataLength,
+ ListHandle listHandle )
+{
+ FontInfo fontInfo;
+ GrafPtr savePort;
+ GrafPtr grafPtr;
+ RgnHandle savedClipRegion;
+ SInt32 savedPenMode;
+ wxListBox* list;
+ GetPort(&savePort);
+ SetPort((**listHandle).port);
+ grafPtr = (**listHandle).port ;
+ // typecast our refCon
+ list = (wxListBox*) GetControlReference( (ControlHandle) GetListRefCon(listHandle) );
+
+ // Calculate the cell rect.
+
+ switch( message ) {
+ case lInitMsg:
+ break;
+
+ case lCloseMsg:
+ break;
+
+ case lDrawMsg:
+ {
+ const wxString text = list->m_stringArray[cell.v] ;
+
+ // Save the current clip region, and set the clip region to the area we are about
+ // to draw.
+
+ savedClipRegion = NewRgn();
+ GetClip( savedClipRegion );
+ ClipRect( drawRect );
+ EraseRect( drawRect );
+
+
+ MoveTo(drawRect->left + 4 , drawRect->top + 10 );
+ ::TextFont( kFontIDMonaco ) ;
+ ::TextSize( 9 );
+ ::TextFace( 0 ) ;
+
+ DrawText(text, 0 , text.Length());
+ // If the cell is hilited, do the hilite now. Paint the cell contents with the
+ // appropriate QuickDraw transform mode.
+
+ if( isSelected ) {
+ savedPenMode = GetPortPenMode( grafPtr );
+ SetPortPenMode( grafPtr, hilitetransfermode );
+ PaintRect( drawRect );
+ SetPortPenMode( grafPtr, savedPenMode );
+ }
+
+ // Restore the saved clip region.
+
+ SetClip( savedClipRegion );
+ DisposeRgn( savedClipRegion );
+ }
+ break;
+ case lHiliteMsg:
+
+ // Hilite or unhilite the cell. Paint the cell contents with the
+ // appropriate QuickDraw transform mode.
+
+ GetPort( &grafPtr );
+ savedPenMode = GetPortPenMode( grafPtr );
+ SetPortPenMode( grafPtr, hilitetransfermode );
+ PaintRect( drawRect );
+ SetPortPenMode( grafPtr, savedPenMode );
+ break;
+ default :
+ break ;
+ }
+ SetPort(savePort);
+}
+
extern "C" void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refCon) ;
const short kwxMacListWithVerticalScrollbar = 128 ;
m_macList = NULL ;
}
+static ListDefUPP macListDefUPP = NULL ;
+
bool wxListBox::Create(wxWindow *parent, wxWindowID id,
const wxPoint& pos,
const wxSize& size,
MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ;
-#if TARGET_CARBON
ListDefSpec listDef;
- OptionBits options;
+ listDef.defType = kListDefUserProcType;
+ if ( macListDefUPP == NULL )
+ {
+ macListDefUPP = NewListDefUPP( wxMacListDefinition );
+ }
+ listDef.u.userProc = macListDefUPP ;
+#if TARGET_CARBON
Size asize;
- listDef.defType = kListDefStandardTextType;
CreateListBoxControl( parent->GetMacRootWindow(), &bounds, false, 0, 1, false, true,
14, 14, false, &listDef, &m_macControl );
SetControlReference(m_macControl, (long) this);
SetControlVisibility(m_macControl, false, false);
- options = 0;
- if ( style & wxLB_MULTIPLE )
- {
- options += lNoExtend ;
- }
- else if ( style & wxLB_EXTENDED )
- {
- options += lExtendDrag ;
- }
- else
- {
- options = lOnlyOne ;
- }
- SetListSelectionFlags(m_macList, options);
-
#else
long result ;
sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
HLock( (Handle) m_macList ) ;
- NewExtLDEFInfo( m_macList , MacDrawStringCell , (long) this ) ;
+ ldefHandle ldef ;
+ ldef = (ldefHandle) NewHandle( sizeof(ldefRec) ) ;
+ if ( (**m_macList).listDefProc != NULL )
+ {
+ (**ldef).instruction = 0x4EF9; /* JMP instruction */
+ (**ldef).function = (void(*)()) listDef.u.userProc;
+ (**m_macList).listDefProc = (Handle) ldef ;
+ }
+
+ Point pt = (**m_macList).cellSize ;
+ pt.v = 14 ;
+ LCellSize( pt , m_macList ) ;
- (**m_macList).selFlags = 0 ;
+ LAddColumn( 1 , 0 , m_macList ) ;
+#endif
+ OptionBits options = 0;
if ( style & wxLB_MULTIPLE )
{
- (**m_macList).selFlags += lNoExtend ;
+ options += lNoExtend ;
}
else if ( style & wxLB_EXTENDED )
{
- (**m_macList).selFlags += lExtendDrag ;
+ options += lExtendDrag ;
}
else
{
- (**m_macList).selFlags = lOnlyOne ;
+ options = lOnlyOne ;
}
-
- Point pt = (**m_macList).cellSize ;
- pt.v = 14 ;
- LCellSize( pt , m_macList ) ;
-
- LAddColumn( 1 , 0 , m_macList ) ;
-
- ControlFontStyleRec controlstyle ;
- controlstyle.flags = kControlUseFontMask + kControlUseSizeMask ;
- //controlstyle.font = kControlFontSmallSystemFont ;
- controlstyle.font = kFontIDMonaco ;
- controlstyle.size = 9 ;
- //::UMASetControlFontStyle( m_macControl , &controlstyle ) ;
-#endif
+ SetListSelectionFlags(m_macList, options);
MacPostControlCreate() ;
for ( int i = 0 ; i < n ; i++ )
{
- Append( choices[i] ) ;
+ Append( choices[i] ) ;
}
LSetDrawingMode( true , m_macList ) ;
if ( m_macList )
{
#if !TARGET_CARBON
- DisposeExtLDEFInfo( m_macList ) ;
+ DisposeHandle( (**m_macList).listDefProc ) ;
+ (**m_macList).listDefProc = NULL ;
#endif
m_macList = NULL ;
}
Cell cell = { 0 , 0 } ;
cell.v = n ;
LAddRow( 1 , cell.v , m_macList ) ;
- LSetCell(text, strlen(text), cell, m_macList);
+// LSetCell(text, strlen(text), cell, m_macList);
Refresh();
}
Cell cell = { 0 , 0 } ;
cell.v = (**m_macList).dataBounds.bottom ;
LAddRow( 1 , cell.v , m_macList ) ;
- LSetCell(text, strlen(text), cell, m_macList);
+ // LSetCell(text, strlen(text), cell, m_macList);
Refresh();
}
// so we just have to redraw
Cell cell = { 0 , 0 } ;
cell.v = n ;
- LSetCell(text, strlen(text), cell, m_macList);
+// LSetCell(text, strlen(text), cell, m_macList);
Refresh();
}
+++ /dev/null
-#include "extcdef.h"
-
-/*************************************************************************
-
- main
-
-*************************************************************************/
-
-pascal SInt32 main(SInt16 varCode , ControlHandle theControl , ControlDefProcMessage message, SInt32 param )
-{
- long returnValue = 0L;
- char state = HGetState((Handle)theControl);
-
- if ( message != initCntl )
- {
- ExtCDEFInfo* info = (ExtCDEFInfo* ) (**theControl).contrlRfCon ;
- if ( info )
- {
- returnValue = info->defProc( info->procID, theControl, message, param) ;
- }
- }
- else
- {
- (**theControl).contrlRfCon = NULL ;
- }
- HSetState((Handle)theControl,state);
-
- return(returnValue); /* tell them what happened */
-}
+++ /dev/null
-#pragma once
-
-#include <stdlib.h>
-
-#define kExtCDEFID 128 // resource id of our CDEF resource <Controls.h>
-const long kExtCDEFMagic = 0xFEEDFEED ;
-typedef struct ExtCDEFInfo
-{
- ControlDefProcPtr defProc ; // this must always be the lowest element
- long magic ;
- long contrlRfCon ;
- ControlHandle containerControl ;
- Handle children ;
- ControlFontStyleRec fontStyle ;
- Boolean hasFocus ;
- SInt16 procID ;
- long privateData ;
-} ExtCDEFInfo ;
-
-void NewExtCDEFInfo( ControlHandle theControl , ControlDefProcPtr defproc , SInt16 procID , long refcon ) ;
-void DisposeExtCDEFInfo( ControlHandle theControl) ;
0 ,
hasVertScroll ,
noHorizScroll ,
- 128 ,
+ 0 ,
noGrowSpace ,
}
} ;
+++ /dev/null
-#include "extldef.h"
-
-/*************************************************************************
-
- function prototypes
-
-*************************************************************************/
-
-void DrawMsg(Boolean fSelect, Rect *r, Cell cell, ListHandle lh);
-void HiliteMsg(Boolean fSelect, Rect *r);
-
-/*************************************************************************
-
- main
-
-*************************************************************************/
-
-pascal void main(short message, Boolean fSelect, Rect *r, Cell cell,
- short dataOffset, short dataLen, ListHandle lh)
-{
-
- switch(message) {
- case lInitMsg:
- break;
-
- case lDrawMsg:
- DrawMsg(fSelect, r, cell, lh);
- break;
-
- case lHiliteMsg:
- HiliteMsg(fSelect, r);
- break;
-
- case lCloseMsg:
- break;
-
- default:
- break;
- }
-}
-
-/*************************************************************************
-
- DrawMsg
-
-*************************************************************************/
-
-void DrawMsg(Boolean fSelect, Rect *r, Cell cell, ListHandle lh)
-{
- ExtLDEFInfo* info = (ExtLDEFInfo*) (**lh).refCon ;
- GrafPtr savePort;
-
- // set up the port
- GetPort(&savePort);
- SetPort((**lh).port);
- PenNormal();
- ForeColor( blackColor ) ;
- BackColor( whiteColor ) ;
-
- EraseRect(r);
- if ( info )
- {
- if ( info->drawProc)
- {
- CallExtLDEFDrawProc(info->drawProc, r, cell, lh, info->refCon );
- }
-
- }
- // hilite if selected
- if (fSelect)
- HiliteMsg(fSelect, r);
-
- SetPort(savePort);
-
-}
-
-/*************************************************************************
-
- HiliteMsg
-
-*************************************************************************/
-
-void HiliteMsg(Boolean fSelect, Rect *r)
-{
- unsigned char hMode;
-
- hMode = LMGetHiliteMode();
- BitClr((Ptr)(&hMode),(long)pHiliteBit);
- LMSetHiliteMode(hMode);
- InvertRect(r);
-}
+++ /dev/null
-#pragma once
-
-#if defined(__UNIX__)
- #include <Carbon/Carbon.h>
-#else
- #include <Lists.h>
-#endif
-#include <stdlib.h>
-
-#define kExtLDEFID 128 // resource id of our LDEF resource
-
-typedef void (*ExtLDEFDrawProcType)(Rect *r, Cell cell, ListHandle lh, long refcon);
-
-enum {
- uppExtLDEFDrawProcInfo = kCStackBased
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Rect *)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Cell)))
- | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ListHandle)))
- | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long)))
-};
-
-#if USESROUTINEDESCRIPTORS
-typedef UniversalProcPtr ExtLDEFDrawProcUPP;
-
-#define CallExtLDEFDrawProc(userRoutine, r, cell, lh , refcon ) \
- CallUniversalProc((UniversalProcPtr)(userRoutine), uppExtLDEFDrawProcInfo, r, cell, lh , refcon )
-#define NewExtLDEFDrawProc(userRoutine) \
- (ExtLDEFDrawProcUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppExtLDEFDrawProcInfo, GetCurrentISA())
-
-#else
-typedef ExtLDEFDrawProcType ExtLDEFDrawProcUPP;
-
-#define CallExtLDEFDrawProc(userRoutine, r, cell, lh , refcon) \
- (*(userRoutine))(r, cell, lh, refcon)
-#define NewExtLDEFDrawProc(userRoutine) \
- (ExtLDEFDrawProcUPP)(userRoutine)
-#endif
-
-typedef struct
-{
- long refCon ;
- ExtLDEFDrawProcUPP drawProc ;
-} ExtLDEFInfo ;
-
-static void NewExtLDEFInfo( ListHandle lh , ExtLDEFDrawProcType drawproc , long refcon ) ;
-static void NewExtLDEFInfo( ListHandle lh , ExtLDEFDrawProcType drawproc , long refcon )
-{
- ExtLDEFInfo* info = (ExtLDEFInfo* ) malloc( sizeof( ExtLDEFInfo ) ) ;
- info->drawProc = NewExtLDEFDrawProc( drawproc ) ;
- info->refCon = refcon ;
- (**lh).refCon = (long) info ;
-}
-
-static void DisposeExtLDEFInfo( ListHandle lh) ;
-static void DisposeExtLDEFInfo( ListHandle lh)
-{
- ExtLDEFInfo* info = (ExtLDEFInfo* ) (**lh).refCon ;
- if ( info )
- {
- #if !TARGET_CARBON
- DisposeRoutineDescriptor( (RoutineDescriptor*) info->drawProc ) ;
- #endif
- free( (void*) (**lh).refCon ) ;
- }
-}
#include "wx/utils.h"
#ifndef __DARWIN__
- #include "extldef.h"
+// #include "extldef.h"
#endif
#if !USE_SHARED_LIBRARY
#include "wx/mac/uma.h"
+
+typedef struct {
+ unsigned short instruction;
+ void (*function)();
+} ldefRec, *ldefPtr, **ldefHandle;
+
+extern "C"
+{
+static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect *drawRect,
+ Cell cell, short dataOffset, short dataLength,
+ ListHandle listHandle ) ;
+}
+
+static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect *drawRect,
+ Cell cell, short dataOffset, short dataLength,
+ ListHandle listHandle )
+{
+ FontInfo fontInfo;
+ GrafPtr savePort;
+ GrafPtr grafPtr;
+ RgnHandle savedClipRegion;
+ SInt32 savedPenMode;
+ wxListBox* list;
+ GetPort(&savePort);
+ SetPort((**listHandle).port);
+ grafPtr = (**listHandle).port ;
+ // typecast our refCon
+ list = (wxListBox*) GetControlReference( (ControlHandle) GetListRefCon(listHandle) );
+
+ // Calculate the cell rect.
+
+ switch( message ) {
+ case lInitMsg:
+ break;
+
+ case lCloseMsg:
+ break;
+
+ case lDrawMsg:
+ {
+ const wxString text = list->m_stringArray[cell.v] ;
+
+ // Save the current clip region, and set the clip region to the area we are about
+ // to draw.
+
+ savedClipRegion = NewRgn();
+ GetClip( savedClipRegion );
+ ClipRect( drawRect );
+ EraseRect( drawRect );
+
+
+ MoveTo(drawRect->left + 4 , drawRect->top + 10 );
+ ::TextFont( kFontIDMonaco ) ;
+ ::TextSize( 9 );
+ ::TextFace( 0 ) ;
+
+ DrawText(text, 0 , text.Length());
+ // If the cell is hilited, do the hilite now. Paint the cell contents with the
+ // appropriate QuickDraw transform mode.
+
+ if( isSelected ) {
+ savedPenMode = GetPortPenMode( grafPtr );
+ SetPortPenMode( grafPtr, hilitetransfermode );
+ PaintRect( drawRect );
+ SetPortPenMode( grafPtr, savedPenMode );
+ }
+
+ // Restore the saved clip region.
+
+ SetClip( savedClipRegion );
+ DisposeRgn( savedClipRegion );
+ }
+ break;
+ case lHiliteMsg:
+
+ // Hilite or unhilite the cell. Paint the cell contents with the
+ // appropriate QuickDraw transform mode.
+
+ GetPort( &grafPtr );
+ savedPenMode = GetPortPenMode( grafPtr );
+ SetPortPenMode( grafPtr, hilitetransfermode );
+ PaintRect( drawRect );
+ SetPortPenMode( grafPtr, savedPenMode );
+ break;
+ default :
+ break ;
+ }
+ SetPort(savePort);
+}
+
extern "C" void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refCon) ;
const short kwxMacListWithVerticalScrollbar = 128 ;
m_macList = NULL ;
}
+static ListDefUPP macListDefUPP = NULL ;
+
bool wxListBox::Create(wxWindow *parent, wxWindowID id,
const wxPoint& pos,
const wxSize& size,
MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ;
-#if TARGET_CARBON
ListDefSpec listDef;
- OptionBits options;
+ listDef.defType = kListDefUserProcType;
+ if ( macListDefUPP == NULL )
+ {
+ macListDefUPP = NewListDefUPP( wxMacListDefinition );
+ }
+ listDef.u.userProc = macListDefUPP ;
+#if TARGET_CARBON
Size asize;
- listDef.defType = kListDefStandardTextType;
CreateListBoxControl( parent->GetMacRootWindow(), &bounds, false, 0, 1, false, true,
14, 14, false, &listDef, &m_macControl );
SetControlReference(m_macControl, (long) this);
SetControlVisibility(m_macControl, false, false);
- options = 0;
- if ( style & wxLB_MULTIPLE )
- {
- options += lNoExtend ;
- }
- else if ( style & wxLB_EXTENDED )
- {
- options += lExtendDrag ;
- }
- else
- {
- options = lOnlyOne ;
- }
- SetListSelectionFlags(m_macList, options);
-
#else
long result ;
sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
HLock( (Handle) m_macList ) ;
- NewExtLDEFInfo( m_macList , MacDrawStringCell , (long) this ) ;
+ ldefHandle ldef ;
+ ldef = (ldefHandle) NewHandle( sizeof(ldefRec) ) ;
+ if ( (**m_macList).listDefProc != NULL )
+ {
+ (**ldef).instruction = 0x4EF9; /* JMP instruction */
+ (**ldef).function = (void(*)()) listDef.u.userProc;
+ (**m_macList).listDefProc = (Handle) ldef ;
+ }
+
+ Point pt = (**m_macList).cellSize ;
+ pt.v = 14 ;
+ LCellSize( pt , m_macList ) ;
- (**m_macList).selFlags = 0 ;
+ LAddColumn( 1 , 0 , m_macList ) ;
+#endif
+ OptionBits options = 0;
if ( style & wxLB_MULTIPLE )
{
- (**m_macList).selFlags += lNoExtend ;
+ options += lNoExtend ;
}
else if ( style & wxLB_EXTENDED )
{
- (**m_macList).selFlags += lExtendDrag ;
+ options += lExtendDrag ;
}
else
{
- (**m_macList).selFlags = lOnlyOne ;
+ options = lOnlyOne ;
}
-
- Point pt = (**m_macList).cellSize ;
- pt.v = 14 ;
- LCellSize( pt , m_macList ) ;
-
- LAddColumn( 1 , 0 , m_macList ) ;
-
- ControlFontStyleRec controlstyle ;
- controlstyle.flags = kControlUseFontMask + kControlUseSizeMask ;
- //controlstyle.font = kControlFontSmallSystemFont ;
- controlstyle.font = kFontIDMonaco ;
- controlstyle.size = 9 ;
- //::UMASetControlFontStyle( m_macControl , &controlstyle ) ;
-#endif
+ SetListSelectionFlags(m_macList, options);
MacPostControlCreate() ;
for ( int i = 0 ; i < n ; i++ )
{
- Append( choices[i] ) ;
+ Append( choices[i] ) ;
}
LSetDrawingMode( true , m_macList ) ;
if ( m_macList )
{
#if !TARGET_CARBON
- DisposeExtLDEFInfo( m_macList ) ;
+ DisposeHandle( (**m_macList).listDefProc ) ;
+ (**m_macList).listDefProc = NULL ;
#endif
m_macList = NULL ;
}
Cell cell = { 0 , 0 } ;
cell.v = n ;
LAddRow( 1 , cell.v , m_macList ) ;
- LSetCell(text, strlen(text), cell, m_macList);
+// LSetCell(text, strlen(text), cell, m_macList);
Refresh();
}
Cell cell = { 0 , 0 } ;
cell.v = (**m_macList).dataBounds.bottom ;
LAddRow( 1 , cell.v , m_macList ) ;
- LSetCell(text, strlen(text), cell, m_macList);
+ // LSetCell(text, strlen(text), cell, m_macList);
Refresh();
}
// so we just have to redraw
Cell cell = { 0 , 0 } ;
cell.v = n ;
- LSetCell(text, strlen(text), cell, m_macList);
+// LSetCell(text, strlen(text), cell, m_macList);
Refresh();
}