From 7c551d959447b3aea01cc35f45aa4cacff2173ba Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Thu, 9 Dec 1999 10:30:35 +0000 Subject: [PATCH] small adaptions git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4882 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/app.cpp | 144 +++++++++++++++++++++++++++--------- src/mac/bmpbuttn.cpp | 64 +++++++++++++--- src/mac/carbon/app.cpp | 144 +++++++++++++++++++++++++++--------- src/mac/carbon/bmpbuttn.cpp | 64 +++++++++++++--- src/mac/carbon/choice.cpp | 3 +- src/mac/carbon/pnghand.cpp | 63 +++++++++++----- src/mac/carbon/statbmp.cpp | 26 +++++-- src/mac/carbon/toolbar.cpp | 46 +++++++++--- src/mac/carbon/window.cpp | 53 ++++++++++--- src/mac/choice.cpp | 3 +- src/mac/ldef/extldef.c | 91 +++++++++++++++++++++++ src/mac/ldef/extldef.h | 59 +++++++++++++++ src/mac/ldef/extldef.mcp | Bin 0 -> 102079 bytes src/mac/pnghand.cpp | 63 +++++++++++----- src/mac/statbmp.cpp | 26 +++++-- src/mac/toolbar.cpp | 46 +++++++++--- src/mac/window.cpp | 53 ++++++++++--- 17 files changed, 766 insertions(+), 182 deletions(-) create mode 100644 src/mac/ldef/extldef.c create mode 100644 src/mac/ldef/extldef.h create mode 100644 src/mac/ldef/extldef.mcp diff --git a/src/mac/app.cpp b/src/mac/app.cpp index 1bd9461b3d..e85f293e1c 100644 --- a/src/mac/app.cpp +++ b/src/mac/app.cpp @@ -504,6 +504,17 @@ void wxApp::CleanUp() int wxEntry( int argc, char *argv[] ) { +#ifdef __MWERKS__ +#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT + // This seems to be necessary since there are 'rogue' + // objects present at this point (perhaps global objects?) + // Setting a checkpoint will ignore them as far as the + // memory checking facility is concerned. + // Of course you may argue that memory allocated in globals should be + // checked, but this is a reasonable compromise. + wxDebugContext::SetCheckpoint(); +#endif +#endif if (!wxApp::Initialize()) return FALSE; if (!wxTheApp) @@ -1021,109 +1032,112 @@ void wxApp::MacHandleMouseUpEvent( EventRecord *ev ) } } -long wxMacTranslateKey(char key, char code) +long wxMacTranslateKey(unsigned char key, unsigned char code) { + long retval = key ; switch (key) { case 0x01 : - key = WXK_HOME; + retval = WXK_HOME; break; case 0x03 : - key = WXK_RETURN; + retval = WXK_RETURN; break; case 0x04 : - key = WXK_END; + retval = WXK_END; break; case 0x05 : - key = WXK_HELP; + retval = WXK_HELP; break; case 0x08 : - key = WXK_BACK; + retval = WXK_BACK; break; case 0x09 : - key = WXK_TAB; + retval = WXK_TAB; break; case 0x0b : - key = WXK_PAGEUP; + retval = WXK_PAGEUP; break; case 0x0c : - key = WXK_PAGEDOWN; + retval = WXK_PAGEDOWN; break; case 0x0d : - key = WXK_RETURN; + retval = WXK_RETURN; break; case 0x10 : { switch( code ) { case 0x7a : - key = WXK_F1 ; + retval = WXK_F1 ; break; case 0x78 : - key = WXK_F2 ; + retval = WXK_F2 ; break; case 0x63 : - key = WXK_F3 ; + retval = WXK_F3 ; break; case 0x76 : - key = WXK_F4 ; + retval = WXK_F4 ; break; case 0x60 : - key = WXK_F5 ; + retval = WXK_F5 ; break; case 0x61 : - key = WXK_F6 ; + retval = WXK_F6 ; break; case 0x62: - key = WXK_F7 ; + retval = WXK_F7 ; break; case 0x64 : - key = WXK_F8 ; + retval = WXK_F8 ; break; case 0x65 : - key = WXK_F9 ; + retval = WXK_F9 ; break; case 0x6D : - key = WXK_F10 ; + retval = WXK_F10 ; break; case 0x67 : - key = WXK_F11 ; + retval = WXK_F11 ; break; case 0x6F : - key = WXK_F12 ; + retval = WXK_F12 ; break; case 0x69 : - key = WXK_F13 ; + retval = WXK_F13 ; break; case 0x6B : - key = WXK_F14 ; + retval = WXK_F14 ; break; case 0x71 : - key = WXK_F15 ; + retval = WXK_F15 ; break; } } break ; case 0x1b : - key = WXK_DELETE ; + retval = WXK_ESCAPE ; break ; case 0x1c : - key = WXK_LEFT ; + retval = WXK_LEFT ; break ; case 0x1d : - key = WXK_RIGHT ; + retval = WXK_RIGHT ; break ; case 0x1e : - key = WXK_UP ; + retval = WXK_UP ; break ; case 0x1f : - key = WXK_DOWN ; + retval = WXK_DOWN ; break ; + case 0x7F : + retval = WXK_DELETE ; default: break ; } // end switch - return key; + return retval; } void wxApp::MacHandleKeyDownEvent( EventRecord *ev ) @@ -1141,17 +1155,79 @@ void wxApp::MacHandleKeyDownEvent( EventRecord *ev ) wxWindow* focus = wxWindow::FindFocus() ; if ( focus ) { - wxKeyEvent event(wxEVT_CHAR); + long keyval = wxMacTranslateKey(keychar, keycode) ; + + wxKeyEvent event(wxEVT_KEY_DOWN); event.m_shiftDown = ev->modifiers & shiftKey; event.m_controlDown = ev->modifiers & controlKey; event.m_altDown = ev->modifiers & optionKey; event.m_metaDown = ev->modifiers & cmdKey; - event.m_keyCode = wxMacTranslateKey(keychar, keycode); + event.m_keyCode = keyval; event.m_x = ev->where.h; event.m_y = ev->where.v; event.m_timeStamp = ev->when; event.SetEventObject(focus); - focus->GetEventHandler()->ProcessEvent( event ) ; + bool handled = focus->GetEventHandler()->ProcessEvent( event ) ; + if ( !handled ) + { + #if wxUSE_ACCEL + if (!handled) + { + wxWindow *ancestor = focus; + /* + while (ancestor) + { + int command = ancestor->GetAcceleratorTable()->GetCommand( event ); + if (command != -1) + { + wxCommandEvent command_event( wxEVT_COMMAND_MENU_SELECTED, command ); + handled = ancestor->GetEventHandler()->ProcessEvent( command_event ); + break; + } + if (ancestor->m_isFrame) + break; + ancestor = ancestor->GetParent(); + } + */ + } + #endif // wxUSE_ACCEL + } + if (!handled) + { + wxKeyEvent event(wxEVT_CHAR); + event.m_shiftDown = ev->modifiers & shiftKey; + event.m_controlDown = ev->modifiers & controlKey; + event.m_altDown = ev->modifiers & optionKey; + event.m_metaDown = ev->modifiers & cmdKey; + event.m_keyCode = keyval; + event.m_x = ev->where.h; + event.m_y = ev->where.v; + event.m_timeStamp = ev->when; + event.SetEventObject(focus); + handled = focus->GetEventHandler()->ProcessEvent( event ) ; + } + if ( !handled && + (keyval == WXK_TAB) && + (!focus->HasFlag(wxTE_PROCESS_TAB)) && + (focus->GetParent()) && + (focus->GetParent()->HasFlag( wxTAB_TRAVERSAL)) ) + { + wxNavigationKeyEvent new_event; + new_event.SetEventObject( focus ); + new_event.SetDirection( !event.ShiftDown() ); + /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */ + new_event.SetWindowChange( event.ControlDown() ); + new_event.SetCurrentFocus( focus ); + handled = focus->GetEventHandler()->ProcessEvent( new_event ); + } + /* generate wxID_CANCEL if command-. or has been pressed (typically in dialogs) */ + if ( (!handled) && + (keyval == '.' && event.ControlDown() ) ) + { + wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL); + new_event.SetEventObject( focus ); + handled = focus->GetEventHandler()->ProcessEvent( new_event ); + } } } } diff --git a/src/mac/bmpbuttn.cpp b/src/mac/bmpbuttn.cpp index 169f0d557a..fecc971add 100644 --- a/src/mac/bmpbuttn.cpp +++ b/src/mac/bmpbuttn.cpp @@ -19,6 +19,10 @@ IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton) #endif +#include + +PicHandle MakePict(GWorldPtr wp) ; + bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos, const wxSize& size, long style, @@ -26,13 +30,7 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit const wxString& name) { m_buttonBitmap = bitmap; - SetName(name); - SetValidator(validator); - parent->AddChild(this); - - m_backgroundColour = parent->GetBackgroundColour() ; - m_foregroundColour = parent->GetForegroundColour() ; - m_windowStyle = style; + m_marginX = 0; m_marginY = 0; @@ -52,14 +50,60 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit if ( height == -1 && bitmap.Ok()) height = bitmap.GetHeight() + 2*m_marginY; - /* TODO: create bitmap button - */ + m_macHorizontalBorder = 2 ; // additional pixels around the real control + m_macVerticalBorder = 2 ; + Rect bounds ; + Str255 title ; + MacPreControlCreate( parent , id , "" , pos , wxSize( width , height ) ,style, validator , name , &bounds , title ) ; + + m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , true , 0 , + kControlBehaviorOffsetContents + kControlContentPictHandle , 0, + kControlBevelButtonNormalBevelProc , (long) this ) ; + wxASSERT_MSG( m_macControl != NULL , "No valid mac control" ) ; + + m_buttonBitmap = bitmap; + PicHandle icon = NULL ; + if ( m_buttonBitmap.Ok() ) + { + wxBitmapRefData * bmap = (wxBitmapRefData*) ( m_buttonBitmap.GetRefData()) ; + if ( bmap->m_bitmapType == kMacBitmapTypePict ) + icon = bmap->m_hPict ; + else if ( bmap->m_bitmapType == kMacBitmapTypeGrafWorld ) + { + icon = MakePict( bmap->m_hBitmap ) ; + } + } + ControlButtonContentInfo info ; + + info.contentType = kControlContentPictHandle ; + info.u.picture = icon ; + + UMASetControlData( m_macControl , kControlButtonPart , kControlBevelButtonContentTag , sizeof(info) , (char*) &info ) ; + + MacPostControlCreate() ; - return FALSE; + return TRUE; } void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap) { m_buttonBitmap = bitmap; + PicHandle icon = NULL ; + if ( m_buttonBitmap.Ok() ) + { + wxBitmapRefData * bmap = (wxBitmapRefData*) ( m_buttonBitmap.GetRefData()) ; + if ( bmap->m_bitmapType == kMacBitmapTypePict ) + icon = bmap->m_hPict ; + else if ( bmap->m_bitmapType == kMacBitmapTypeGrafWorld ) + { + icon = MakePict( bmap->m_hBitmap ) ; + } + } + ControlButtonContentInfo info ; + + info.contentType = kControlContentPictHandle ; + info.u.picture = icon ; + + UMASetControlData( m_macControl , kControlButtonPart , kControlBevelButtonContentTag , sizeof(info) , (char*) &info ) ; } diff --git a/src/mac/carbon/app.cpp b/src/mac/carbon/app.cpp index 1bd9461b3d..e85f293e1c 100644 --- a/src/mac/carbon/app.cpp +++ b/src/mac/carbon/app.cpp @@ -504,6 +504,17 @@ void wxApp::CleanUp() int wxEntry( int argc, char *argv[] ) { +#ifdef __MWERKS__ +#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT + // This seems to be necessary since there are 'rogue' + // objects present at this point (perhaps global objects?) + // Setting a checkpoint will ignore them as far as the + // memory checking facility is concerned. + // Of course you may argue that memory allocated in globals should be + // checked, but this is a reasonable compromise. + wxDebugContext::SetCheckpoint(); +#endif +#endif if (!wxApp::Initialize()) return FALSE; if (!wxTheApp) @@ -1021,109 +1032,112 @@ void wxApp::MacHandleMouseUpEvent( EventRecord *ev ) } } -long wxMacTranslateKey(char key, char code) +long wxMacTranslateKey(unsigned char key, unsigned char code) { + long retval = key ; switch (key) { case 0x01 : - key = WXK_HOME; + retval = WXK_HOME; break; case 0x03 : - key = WXK_RETURN; + retval = WXK_RETURN; break; case 0x04 : - key = WXK_END; + retval = WXK_END; break; case 0x05 : - key = WXK_HELP; + retval = WXK_HELP; break; case 0x08 : - key = WXK_BACK; + retval = WXK_BACK; break; case 0x09 : - key = WXK_TAB; + retval = WXK_TAB; break; case 0x0b : - key = WXK_PAGEUP; + retval = WXK_PAGEUP; break; case 0x0c : - key = WXK_PAGEDOWN; + retval = WXK_PAGEDOWN; break; case 0x0d : - key = WXK_RETURN; + retval = WXK_RETURN; break; case 0x10 : { switch( code ) { case 0x7a : - key = WXK_F1 ; + retval = WXK_F1 ; break; case 0x78 : - key = WXK_F2 ; + retval = WXK_F2 ; break; case 0x63 : - key = WXK_F3 ; + retval = WXK_F3 ; break; case 0x76 : - key = WXK_F4 ; + retval = WXK_F4 ; break; case 0x60 : - key = WXK_F5 ; + retval = WXK_F5 ; break; case 0x61 : - key = WXK_F6 ; + retval = WXK_F6 ; break; case 0x62: - key = WXK_F7 ; + retval = WXK_F7 ; break; case 0x64 : - key = WXK_F8 ; + retval = WXK_F8 ; break; case 0x65 : - key = WXK_F9 ; + retval = WXK_F9 ; break; case 0x6D : - key = WXK_F10 ; + retval = WXK_F10 ; break; case 0x67 : - key = WXK_F11 ; + retval = WXK_F11 ; break; case 0x6F : - key = WXK_F12 ; + retval = WXK_F12 ; break; case 0x69 : - key = WXK_F13 ; + retval = WXK_F13 ; break; case 0x6B : - key = WXK_F14 ; + retval = WXK_F14 ; break; case 0x71 : - key = WXK_F15 ; + retval = WXK_F15 ; break; } } break ; case 0x1b : - key = WXK_DELETE ; + retval = WXK_ESCAPE ; break ; case 0x1c : - key = WXK_LEFT ; + retval = WXK_LEFT ; break ; case 0x1d : - key = WXK_RIGHT ; + retval = WXK_RIGHT ; break ; case 0x1e : - key = WXK_UP ; + retval = WXK_UP ; break ; case 0x1f : - key = WXK_DOWN ; + retval = WXK_DOWN ; break ; + case 0x7F : + retval = WXK_DELETE ; default: break ; } // end switch - return key; + return retval; } void wxApp::MacHandleKeyDownEvent( EventRecord *ev ) @@ -1141,17 +1155,79 @@ void wxApp::MacHandleKeyDownEvent( EventRecord *ev ) wxWindow* focus = wxWindow::FindFocus() ; if ( focus ) { - wxKeyEvent event(wxEVT_CHAR); + long keyval = wxMacTranslateKey(keychar, keycode) ; + + wxKeyEvent event(wxEVT_KEY_DOWN); event.m_shiftDown = ev->modifiers & shiftKey; event.m_controlDown = ev->modifiers & controlKey; event.m_altDown = ev->modifiers & optionKey; event.m_metaDown = ev->modifiers & cmdKey; - event.m_keyCode = wxMacTranslateKey(keychar, keycode); + event.m_keyCode = keyval; event.m_x = ev->where.h; event.m_y = ev->where.v; event.m_timeStamp = ev->when; event.SetEventObject(focus); - focus->GetEventHandler()->ProcessEvent( event ) ; + bool handled = focus->GetEventHandler()->ProcessEvent( event ) ; + if ( !handled ) + { + #if wxUSE_ACCEL + if (!handled) + { + wxWindow *ancestor = focus; + /* + while (ancestor) + { + int command = ancestor->GetAcceleratorTable()->GetCommand( event ); + if (command != -1) + { + wxCommandEvent command_event( wxEVT_COMMAND_MENU_SELECTED, command ); + handled = ancestor->GetEventHandler()->ProcessEvent( command_event ); + break; + } + if (ancestor->m_isFrame) + break; + ancestor = ancestor->GetParent(); + } + */ + } + #endif // wxUSE_ACCEL + } + if (!handled) + { + wxKeyEvent event(wxEVT_CHAR); + event.m_shiftDown = ev->modifiers & shiftKey; + event.m_controlDown = ev->modifiers & controlKey; + event.m_altDown = ev->modifiers & optionKey; + event.m_metaDown = ev->modifiers & cmdKey; + event.m_keyCode = keyval; + event.m_x = ev->where.h; + event.m_y = ev->where.v; + event.m_timeStamp = ev->when; + event.SetEventObject(focus); + handled = focus->GetEventHandler()->ProcessEvent( event ) ; + } + if ( !handled && + (keyval == WXK_TAB) && + (!focus->HasFlag(wxTE_PROCESS_TAB)) && + (focus->GetParent()) && + (focus->GetParent()->HasFlag( wxTAB_TRAVERSAL)) ) + { + wxNavigationKeyEvent new_event; + new_event.SetEventObject( focus ); + new_event.SetDirection( !event.ShiftDown() ); + /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */ + new_event.SetWindowChange( event.ControlDown() ); + new_event.SetCurrentFocus( focus ); + handled = focus->GetEventHandler()->ProcessEvent( new_event ); + } + /* generate wxID_CANCEL if command-. or has been pressed (typically in dialogs) */ + if ( (!handled) && + (keyval == '.' && event.ControlDown() ) ) + { + wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL); + new_event.SetEventObject( focus ); + handled = focus->GetEventHandler()->ProcessEvent( new_event ); + } } } } diff --git a/src/mac/carbon/bmpbuttn.cpp b/src/mac/carbon/bmpbuttn.cpp index 169f0d557a..fecc971add 100644 --- a/src/mac/carbon/bmpbuttn.cpp +++ b/src/mac/carbon/bmpbuttn.cpp @@ -19,6 +19,10 @@ IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton) #endif +#include + +PicHandle MakePict(GWorldPtr wp) ; + bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos, const wxSize& size, long style, @@ -26,13 +30,7 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit const wxString& name) { m_buttonBitmap = bitmap; - SetName(name); - SetValidator(validator); - parent->AddChild(this); - - m_backgroundColour = parent->GetBackgroundColour() ; - m_foregroundColour = parent->GetForegroundColour() ; - m_windowStyle = style; + m_marginX = 0; m_marginY = 0; @@ -52,14 +50,60 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit if ( height == -1 && bitmap.Ok()) height = bitmap.GetHeight() + 2*m_marginY; - /* TODO: create bitmap button - */ + m_macHorizontalBorder = 2 ; // additional pixels around the real control + m_macVerticalBorder = 2 ; + Rect bounds ; + Str255 title ; + MacPreControlCreate( parent , id , "" , pos , wxSize( width , height ) ,style, validator , name , &bounds , title ) ; + + m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , true , 0 , + kControlBehaviorOffsetContents + kControlContentPictHandle , 0, + kControlBevelButtonNormalBevelProc , (long) this ) ; + wxASSERT_MSG( m_macControl != NULL , "No valid mac control" ) ; + + m_buttonBitmap = bitmap; + PicHandle icon = NULL ; + if ( m_buttonBitmap.Ok() ) + { + wxBitmapRefData * bmap = (wxBitmapRefData*) ( m_buttonBitmap.GetRefData()) ; + if ( bmap->m_bitmapType == kMacBitmapTypePict ) + icon = bmap->m_hPict ; + else if ( bmap->m_bitmapType == kMacBitmapTypeGrafWorld ) + { + icon = MakePict( bmap->m_hBitmap ) ; + } + } + ControlButtonContentInfo info ; + + info.contentType = kControlContentPictHandle ; + info.u.picture = icon ; + + UMASetControlData( m_macControl , kControlButtonPart , kControlBevelButtonContentTag , sizeof(info) , (char*) &info ) ; + + MacPostControlCreate() ; - return FALSE; + return TRUE; } void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap) { m_buttonBitmap = bitmap; + PicHandle icon = NULL ; + if ( m_buttonBitmap.Ok() ) + { + wxBitmapRefData * bmap = (wxBitmapRefData*) ( m_buttonBitmap.GetRefData()) ; + if ( bmap->m_bitmapType == kMacBitmapTypePict ) + icon = bmap->m_hPict ; + else if ( bmap->m_bitmapType == kMacBitmapTypeGrafWorld ) + { + icon = MakePict( bmap->m_hBitmap ) ; + } + } + ControlButtonContentInfo info ; + + info.contentType = kControlContentPictHandle ; + info.u.picture = icon ; + + UMASetControlData( m_macControl , kControlButtonPart , kControlBevelButtonContentTag , sizeof(info) , (char*) &info ) ; } diff --git a/src/mac/carbon/choice.cpp b/src/mac/carbon/choice.cpp index da3c4efc92..42c52012b2 100644 --- a/src/mac/carbon/choice.cpp +++ b/src/mac/carbon/choice.cpp @@ -89,9 +89,8 @@ void wxChoice::MacHandleControlClick( ControlHandle control , SInt16 controlpart wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId ); event.SetInt(GetSelection()); event.SetEventObject(this); - event.SetString(copystring(GetStringSelection())); + event.SetString(GetStringSelection()); ProcessCommand(event); - delete[] event.GetString(); } diff --git a/src/mac/carbon/pnghand.cpp b/src/mac/carbon/pnghand.cpp index d8a662d7da..8d6d6544f5 100644 --- a/src/mac/carbon/pnghand.cpp +++ b/src/mac/carbon/pnghand.cpp @@ -106,14 +106,15 @@ wxPNGReader::Create(int width, int height, int depth, int colortype) { Width = width; Height = height; Depth = depth; ColorType = (colortype>=0) ? colortype: ((Depth>8) ? COLORTYPE_COLOR: 0); + delete Palette; + delete[] RawImage ; + RawImage = 0; + Palette = 0; if (lpbi) { wxMacDestroyGWorld( lpbi ) ; -// delete Palette; } - RawImage = 0; - Palette = 0; if (lpbi = wxMacCreateGWorld( Width , Height , Depth) ) { EfeWidth = (long)(((long)Width*Depth + 31) / 32) * 4; @@ -197,10 +198,11 @@ bool wxPNGReader::SetRGB(int x, int y, byte r, byte g, byte b) bool wxPNGReader::SetPalette(wxPalette* colourmap) { + delete Palette ; if (!colourmap) return FALSE; ColorType |= (COLORTYPE_PALETTE | COLORTYPE_COLOR); - Palette = colourmap; + Palette = new wxPalette( *colourmap ); return true ; // return (DibSetUsage(lpbi, (HPALETTE) Palette->GetHPALETTE(), WXIMA_COLORS ) != 0); } @@ -208,6 +210,7 @@ bool wxPNGReader::SetPalette(wxPalette* colourmap) bool wxPNGReader::SetPalette(int n, byte *r, byte *g, byte *b) { + delete Palette ; Palette = new wxPalette(); if (!Palette) return FALSE; @@ -223,6 +226,7 @@ wxPNGReader::SetPalette(int n, byte *r, byte *g, byte *b) bool wxPNGReader::SetPalette(int n, rgb_color_struct *rgb_struct) { + delete Palette ; Palette = new wxPalette(); if (!Palette) return FALSE; @@ -249,6 +253,10 @@ wxPNGReader::SetPalette(int n, rgb_color_struct *rgb_struct) void wxPNGReader::NullData() { + if (lpbi) { + wxMacDestroyGWorld( lpbi ) ; + } + delete Palette; lpbi = NULL; Palette = NULL; } @@ -516,30 +524,47 @@ bool wxPNGReader::ReadFile(char * ImageFileName) { if ( pixel_depth == 8 ) { + for ( int i = 0 ; i < info_ptr->width ; ++i ) + { + png_color_struct* color ; + RGBColor col ; + + int index = row_pointers[i] ; + color = &info_ptr->palette[index] ; + col.red = (((int)color->red) << 8) | ((int)color->red) ; + col.green = (((int)color->green) << 8) | ((int)color->green) ; + col.blue = (((int)color->blue) << 8) | ((int)color->blue) ; + SetCPixel( i, y, &col); + } + /* png_color_struct* color ; RGBColor col ; unsigned char* p = &row_pointers[0] ; + PenNormal() ; MoveTo( 0 , y ) ; - unsigned char lastcol = *p ; - color = &info_ptr->palette[lastcol] ; + int index = *p ; + color = &info_ptr->palette[index] ; col.red = (color->red << 8) | color->red ; col.green = (color->green << 8) | color->green ; col.blue = (color->blue << 8) | color->blue ; RGBForeColor( &col ) ; + col.red = col.green = col.blue = 0xFFFF ; + RGBBackColor( &col ) ; for ( int i = 0 ; i < info_ptr->width ; ++i , ++p) { - if ( *p != lastcol ) + if ( *p != index ) { LineTo( i , y ) ; - lastcol = *p ; - color = &info_ptr->palette[lastcol] ; - col.red = (color->red << 8) | color->red ; - col.green = (color->green << 8) | color->green ; - col.blue = (color->blue << 8) | color->blue ; + index = *p ; + color = &info_ptr->palette[index] ; + col.red = (((int)color->red) << 8) | ((int)color->red) ; + col.green = (((int)color->green) << 8) | ((int)color->green) ; + col.blue = (((int)color->blue) << 8) | ((int)color->blue) ; RGBForeColor( &col ) ; } } - LineTo( info_ptr->width - 1 , y ) ; + LineTo( info_ptr->width , y ) ; + */ } else { @@ -553,9 +578,9 @@ bool wxPNGReader::ReadFile(char * ImageFileName) int index = ( row_pointers[byte] >> offset ) & ( 0xFF >> ( 8 - pixel_depth ) ); color = &info_ptr->palette[index] ; - col.red = (color->red << 8) | color->red ; - col.green = (color->green << 8) | color->green ; - col.blue = (color->blue << 8) | color->blue ; + col.red = (((int)color->red) << 8) | ((int)color->red) ; + col.green = (((int)color->green) << 8) | ((int)color->green) ; + col.blue = (((int)color->blue) << 8) | ((int)color->blue) ; SetCPixel( i, y, &col); } } @@ -567,9 +592,9 @@ bool wxPNGReader::ReadFile(char * ImageFileName) png_color_struct* color ; RGBColor col ; color =(png_color_struct*) (&row_pointers[i*3]) ; - col.red = (color->red << 8) | color->red ; - col.green = (color->green << 8) | color->green ; - col.blue = (color->blue << 8) | color->blue ; + col.red = (((int)color->red) << 8) | ((int)color->red) ; + col.green = (((int)color->green) << 8) | ((int)color->green) ; + col.blue = (((int)color->blue) << 8) | ((int)color->blue) ; SetCPixel( i, y, &col); } } diff --git a/src/mac/carbon/statbmp.cpp b/src/mac/carbon/statbmp.cpp index 721c254234..86a8528929 100644 --- a/src/mac/carbon/statbmp.cpp +++ b/src/mac/carbon/statbmp.cpp @@ -34,9 +34,12 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id, long style, const wxString& name) { - m_messageBitmap = bitmap; SetName(name); - if (parent) parent->AddChild(this); + + m_backgroundColour = parent->GetBackgroundColour() ; + m_foregroundColour = parent->GetForegroundColour() ; + + m_messageBitmap = bitmap; if ( id == -1 ) m_windowId = (int)NewControlId(); @@ -46,7 +49,9 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id, m_windowStyle = style; bool ret = wxControl::Create( parent, id, pos, size, style , name ); - + + SetSizeOrDefault() ; + return ret; } @@ -58,14 +63,21 @@ void wxStaticBitmap::SetSize(int x, int y, int width, int height, int sizeFlags) void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap) { m_messageBitmap = bitmap; - - Refresh() ; + SetSizeOrDefault(); } void wxStaticBitmap::OnPaint( wxPaintEvent &event ) { wxPaintDC dc(this); PrepareDC(dc); - dc.SetPalette( *m_messageBitmap.GetPalette() ) ; - dc.DrawBitmap( m_messageBitmap , 0 , 0 ) ; + dc.SetPalette( *m_messageBitmap.GetPalette() ) ; + dc.DrawBitmap( m_messageBitmap , 0 , 0 ) ; +} + +wxSize wxStaticBitmap::DoGetBestSize() const +{ + if ( m_messageBitmap.Ok() ) + return wxSize(m_messageBitmap.GetWidth(), m_messageBitmap.GetHeight()); + else + return wxSize(16, 16); // completely arbitrary } diff --git a/src/mac/carbon/toolbar.cpp b/src/mac/carbon/toolbar.cpp index 0620c12afb..56654a1af6 100644 --- a/src/mac/carbon/toolbar.cpp +++ b/src/mac/carbon/toolbar.cpp @@ -40,8 +40,7 @@ wxToolBar::wxToolBar() bool wxToolBar::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) { - m_maxWidth = -1; - m_maxHeight = -1; + m_maxWidth = m_maxHeight = 0; m_defaultWidth = 24; m_defaultHeight = 22; @@ -152,7 +151,9 @@ bool wxToolBar::CreateTools() wxNode *node = m_tools.First(); int noButtons = 0; int x = 0 ; - + wxSize toolSize = GetToolSize() ; + int tw, th; + GetSize(& tw, & th); while (node) { wxToolBarTool *tool = (wxToolBarTool *)node->Data(); @@ -161,8 +162,8 @@ bool wxToolBar::CreateTools() if( tool->m_toolStyle != wxTOOL_STYLE_SEPARATOR ) { Rect toolrect = { toolbarrect.top + kwxMacToolBarTopMargin , toolbarrect.left + x + kwxMacToolBarLeftMargin , 0 , 0 } ; - toolrect.right = toolrect.left + m_defaultWidth ; - toolrect.bottom = toolrect.top + m_defaultHeight ; + toolrect.right = toolrect.left + toolSize.x ; + toolrect.bottom = toolrect.top + toolSize.y ; PicHandle icon = NULL ; if ( bmap ) @@ -197,17 +198,37 @@ bool wxToolBar::CreateTools() UMASetControlFontStyle( m_macToolHandle , &controlstyle ) ; UMAEmbedControl( m_macToolHandle , m_macControl ) ; - x += (int)m_defaultWidth; + x += (int)toolSize.x; noButtons ++; } else { m_macToolHandles.Add( NULL ) ; - x += (int)m_defaultWidth / 4; + x += (int)toolSize.x / 4; } + if ( toolbarrect.left + x + kwxMacToolBarLeftMargin > m_maxWidth) + m_maxWidth = toolbarrect.left + x + kwxMacToolBarLeftMargin; + if (toolbarrect.top + kwxMacToolBarTopMargin + toolSize.y > m_maxHeight) + m_maxHeight = toolbarrect.top + kwxMacToolBarTopMargin ; + node = node->Next(); } + if ( GetWindowStyleFlag() & wxTB_HORIZONTAL ) + { + m_maxWidth = tw ; // +=toolSize.x; + m_maxHeight += toolSize.y; + m_maxHeight += m_yMargin; + } + else + { + m_maxHeight = th ;// += toolSize.y; + m_maxWidth += toolSize.x; + m_maxWidth += m_xMargin; + } + + SetSize(m_maxWidth, m_maxHeight); + return TRUE; } @@ -218,8 +239,7 @@ void wxToolBar::SetToolBitmapSize(const wxSize& size) wxSize wxToolBar::GetMaxSize() const { - // TODO - return wxSize(0, 0); + return wxSize(m_maxWidth, m_maxHeight); } // The button size is bigger than the bitmap size @@ -291,7 +311,13 @@ wxToolBarTool *wxToolBar::AddTool(int index, const wxBitmap& bitmap, const wxBit else tool->m_y = m_yMargin; - tool->SetSize(m_defaultWidth, m_defaultHeight); + tool->SetSize(GetToolSize().x, GetToolSize().y); + + if ((tool->m_x + bitmap.GetWidth() + m_xMargin) > m_maxWidth) + m_maxWidth = (tool->m_x + tool->GetWidth() + m_xMargin); + + if ((tool->m_y + bitmap.GetHeight() + m_yMargin) > m_maxHeight) + m_maxHeight = (tool->m_y + tool->GetHeight() + m_yMargin); m_tools.Append((long)index, tool); return tool; diff --git a/src/mac/carbon/window.cpp b/src/mac/carbon/window.cpp index 43e490d70b..ed8396c774 100644 --- a/src/mac/carbon/window.cpp +++ b/src/mac/carbon/window.cpp @@ -35,6 +35,10 @@ #include "wx/menuitem.h" #include "wx/log.h" +#if wxUSE_CARET + #include "wx/caret.h" +#endif // wxUSE_CARET + #define wxWINDOW_HSCROLL 5998 #define wxWINDOW_VSCROLL 5997 #define MAC_SCROLLBAR_SIZE 16 @@ -198,25 +202,45 @@ void wxWindow::SetFocus() { if (gFocusWindow ) { + #if wxUSE_CARET + // Deal with caret + if ( gFocusWindow->m_caret ) + { + gFocusWindow->m_caret->OnKillFocus(); + } + #endif // wxUSE_CARET wxControl* control = wxDynamicCast( gFocusWindow , wxControl ) ; if ( control && control->GetMacControl() ) { UMASetKeyboardFocus( gFocusWindow->GetMacRootWindow() , control->GetMacControl() , kControlFocusNoPart ) ; } - wxFocusEvent event(wxEVT_KILL_FOCUS, gFocusWindow->m_windowId); - event.SetEventObject(gFocusWindow); + wxFocusEvent event(wxEVT_KILL_FOCUS, gFocusWindow->m_windowId); + event.SetEventObject(gFocusWindow); gFocusWindow->GetEventHandler()->ProcessEvent(event) ; } gFocusWindow = this ; { + #if wxUSE_CARET + // Deal with caret + if ( m_caret ) + { + m_caret->OnSetFocus(); + } + #endif // wxUSE_CARET + // panel wants to track the window which was the last to have focus in it + wxPanel *panel = wxDynamicCast(GetParent(), wxPanel); + if ( panel ) + { + panel->SetLastFocus(this); + } wxControl* control = wxDynamicCast( gFocusWindow , wxControl ) ; if ( control && control->GetMacControl() ) { UMASetKeyboardFocus( gFocusWindow->GetMacRootWindow() , control->GetMacControl() , kControlEditTextPart ) ; } - wxFocusEvent event(wxEVT_SET_FOCUS, m_windowId); - event.SetEventObject(this); + wxFocusEvent event(wxEVT_SET_FOCUS, m_windowId); + event.SetEventObject(this); GetEventHandler()->ProcessEvent(event) ; } } @@ -1348,6 +1372,9 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time) if ( focus.Ok() ) { WindowRef window = GetMacRootWindow() ; + bool eraseBackground = false ; + if ( m_macWindowData ) + eraseBackground = true ; if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE) ) { UMASetThemeWindowBackground( window , kThemeBrushDocumentWindowBackground , false ) ; @@ -1374,13 +1401,13 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time) if ( parent->m_backgroundColour != wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE ) ) { // if we have any other colours in the hierarchy - RGBBackColor( &parent->m_backgroundColour.GetPixel()) ; - break ; + RGBBackColor( &parent->m_backgroundColour.GetPixel()) ; + break ; } // if we have the normal colours in the hierarchy but another control etc. -> use it's background if ( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) { - ApplyThemeBackground (kThemeBackgroundTabPane, &(**updatergn).rgnBBox , kThemeStateActive,8,true); + ApplyThemeBackground(kThemeBackgroundTabPane, &(**updatergn).rgnBBox , kThemeStateActive,8,true); break ; } } @@ -1401,8 +1428,13 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time) { RGBBackColor( &m_backgroundColour.GetPixel()) ; } + if ( GetParent() && m_backgroundColour != GetParent()->GetBackgroundColour() ) + eraseBackground = true ; SetClip( updatergn ) ; - EraseRgn( updatergn ) ; + if ( eraseBackground ) + { + EraseRgn( updatergn ) ; + } } } @@ -1553,7 +1585,10 @@ void wxWindow::MacKeyDown( EventRecord *ev ) } - +bool wxWindow::AcceptsFocus() const +{ + return MacCanFocus() && wxWindowBase::AcceptsFocus(); +} ControlHandle wxWindow::MacGetContainerForEmbedding() { diff --git a/src/mac/choice.cpp b/src/mac/choice.cpp index da3c4efc92..42c52012b2 100644 --- a/src/mac/choice.cpp +++ b/src/mac/choice.cpp @@ -89,9 +89,8 @@ void wxChoice::MacHandleControlClick( ControlHandle control , SInt16 controlpart wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId ); event.SetInt(GetSelection()); event.SetEventObject(this); - event.SetString(copystring(GetStringSelection())); + event.SetString(GetStringSelection()); ProcessCommand(event); - delete[] event.GetString(); } diff --git a/src/mac/ldef/extldef.c b/src/mac/ldef/extldef.c new file mode 100644 index 0000000000..8e53fbf046 --- /dev/null +++ b/src/mac/ldef/extldef.c @@ -0,0 +1,91 @@ +#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); +} diff --git a/src/mac/ldef/extldef.h b/src/mac/ldef/extldef.h new file mode 100644 index 0000000000..683219907d --- /dev/null +++ b/src/mac/ldef/extldef.h @@ -0,0 +1,59 @@ +#pragma once + +#include +#include + +#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 ) + { + DisposeRoutineDescriptor( (RoutineDescriptor*) info->drawProc ) ; + free( (void*) (**lh).refCon ) ; + } +} diff --git a/src/mac/ldef/extldef.mcp b/src/mac/ldef/extldef.mcp new file mode 100644 index 0000000000000000000000000000000000000000..12bf6effdd0018dad05efb4ce941dd49a2a9cf9f GIT binary patch literal 102079 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 Uv+p6N?MFy8|21ACpCkMK0~SP)6951J literal 0 HcmV?d00001 diff --git a/src/mac/pnghand.cpp b/src/mac/pnghand.cpp index d8a662d7da..8d6d6544f5 100644 --- a/src/mac/pnghand.cpp +++ b/src/mac/pnghand.cpp @@ -106,14 +106,15 @@ wxPNGReader::Create(int width, int height, int depth, int colortype) { Width = width; Height = height; Depth = depth; ColorType = (colortype>=0) ? colortype: ((Depth>8) ? COLORTYPE_COLOR: 0); + delete Palette; + delete[] RawImage ; + RawImage = 0; + Palette = 0; if (lpbi) { wxMacDestroyGWorld( lpbi ) ; -// delete Palette; } - RawImage = 0; - Palette = 0; if (lpbi = wxMacCreateGWorld( Width , Height , Depth) ) { EfeWidth = (long)(((long)Width*Depth + 31) / 32) * 4; @@ -197,10 +198,11 @@ bool wxPNGReader::SetRGB(int x, int y, byte r, byte g, byte b) bool wxPNGReader::SetPalette(wxPalette* colourmap) { + delete Palette ; if (!colourmap) return FALSE; ColorType |= (COLORTYPE_PALETTE | COLORTYPE_COLOR); - Palette = colourmap; + Palette = new wxPalette( *colourmap ); return true ; // return (DibSetUsage(lpbi, (HPALETTE) Palette->GetHPALETTE(), WXIMA_COLORS ) != 0); } @@ -208,6 +210,7 @@ bool wxPNGReader::SetPalette(wxPalette* colourmap) bool wxPNGReader::SetPalette(int n, byte *r, byte *g, byte *b) { + delete Palette ; Palette = new wxPalette(); if (!Palette) return FALSE; @@ -223,6 +226,7 @@ wxPNGReader::SetPalette(int n, byte *r, byte *g, byte *b) bool wxPNGReader::SetPalette(int n, rgb_color_struct *rgb_struct) { + delete Palette ; Palette = new wxPalette(); if (!Palette) return FALSE; @@ -249,6 +253,10 @@ wxPNGReader::SetPalette(int n, rgb_color_struct *rgb_struct) void wxPNGReader::NullData() { + if (lpbi) { + wxMacDestroyGWorld( lpbi ) ; + } + delete Palette; lpbi = NULL; Palette = NULL; } @@ -516,30 +524,47 @@ bool wxPNGReader::ReadFile(char * ImageFileName) { if ( pixel_depth == 8 ) { + for ( int i = 0 ; i < info_ptr->width ; ++i ) + { + png_color_struct* color ; + RGBColor col ; + + int index = row_pointers[i] ; + color = &info_ptr->palette[index] ; + col.red = (((int)color->red) << 8) | ((int)color->red) ; + col.green = (((int)color->green) << 8) | ((int)color->green) ; + col.blue = (((int)color->blue) << 8) | ((int)color->blue) ; + SetCPixel( i, y, &col); + } + /* png_color_struct* color ; RGBColor col ; unsigned char* p = &row_pointers[0] ; + PenNormal() ; MoveTo( 0 , y ) ; - unsigned char lastcol = *p ; - color = &info_ptr->palette[lastcol] ; + int index = *p ; + color = &info_ptr->palette[index] ; col.red = (color->red << 8) | color->red ; col.green = (color->green << 8) | color->green ; col.blue = (color->blue << 8) | color->blue ; RGBForeColor( &col ) ; + col.red = col.green = col.blue = 0xFFFF ; + RGBBackColor( &col ) ; for ( int i = 0 ; i < info_ptr->width ; ++i , ++p) { - if ( *p != lastcol ) + if ( *p != index ) { LineTo( i , y ) ; - lastcol = *p ; - color = &info_ptr->palette[lastcol] ; - col.red = (color->red << 8) | color->red ; - col.green = (color->green << 8) | color->green ; - col.blue = (color->blue << 8) | color->blue ; + index = *p ; + color = &info_ptr->palette[index] ; + col.red = (((int)color->red) << 8) | ((int)color->red) ; + col.green = (((int)color->green) << 8) | ((int)color->green) ; + col.blue = (((int)color->blue) << 8) | ((int)color->blue) ; RGBForeColor( &col ) ; } } - LineTo( info_ptr->width - 1 , y ) ; + LineTo( info_ptr->width , y ) ; + */ } else { @@ -553,9 +578,9 @@ bool wxPNGReader::ReadFile(char * ImageFileName) int index = ( row_pointers[byte] >> offset ) & ( 0xFF >> ( 8 - pixel_depth ) ); color = &info_ptr->palette[index] ; - col.red = (color->red << 8) | color->red ; - col.green = (color->green << 8) | color->green ; - col.blue = (color->blue << 8) | color->blue ; + col.red = (((int)color->red) << 8) | ((int)color->red) ; + col.green = (((int)color->green) << 8) | ((int)color->green) ; + col.blue = (((int)color->blue) << 8) | ((int)color->blue) ; SetCPixel( i, y, &col); } } @@ -567,9 +592,9 @@ bool wxPNGReader::ReadFile(char * ImageFileName) png_color_struct* color ; RGBColor col ; color =(png_color_struct*) (&row_pointers[i*3]) ; - col.red = (color->red << 8) | color->red ; - col.green = (color->green << 8) | color->green ; - col.blue = (color->blue << 8) | color->blue ; + col.red = (((int)color->red) << 8) | ((int)color->red) ; + col.green = (((int)color->green) << 8) | ((int)color->green) ; + col.blue = (((int)color->blue) << 8) | ((int)color->blue) ; SetCPixel( i, y, &col); } } diff --git a/src/mac/statbmp.cpp b/src/mac/statbmp.cpp index 721c254234..86a8528929 100644 --- a/src/mac/statbmp.cpp +++ b/src/mac/statbmp.cpp @@ -34,9 +34,12 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id, long style, const wxString& name) { - m_messageBitmap = bitmap; SetName(name); - if (parent) parent->AddChild(this); + + m_backgroundColour = parent->GetBackgroundColour() ; + m_foregroundColour = parent->GetForegroundColour() ; + + m_messageBitmap = bitmap; if ( id == -1 ) m_windowId = (int)NewControlId(); @@ -46,7 +49,9 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id, m_windowStyle = style; bool ret = wxControl::Create( parent, id, pos, size, style , name ); - + + SetSizeOrDefault() ; + return ret; } @@ -58,14 +63,21 @@ void wxStaticBitmap::SetSize(int x, int y, int width, int height, int sizeFlags) void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap) { m_messageBitmap = bitmap; - - Refresh() ; + SetSizeOrDefault(); } void wxStaticBitmap::OnPaint( wxPaintEvent &event ) { wxPaintDC dc(this); PrepareDC(dc); - dc.SetPalette( *m_messageBitmap.GetPalette() ) ; - dc.DrawBitmap( m_messageBitmap , 0 , 0 ) ; + dc.SetPalette( *m_messageBitmap.GetPalette() ) ; + dc.DrawBitmap( m_messageBitmap , 0 , 0 ) ; +} + +wxSize wxStaticBitmap::DoGetBestSize() const +{ + if ( m_messageBitmap.Ok() ) + return wxSize(m_messageBitmap.GetWidth(), m_messageBitmap.GetHeight()); + else + return wxSize(16, 16); // completely arbitrary } diff --git a/src/mac/toolbar.cpp b/src/mac/toolbar.cpp index 0620c12afb..56654a1af6 100644 --- a/src/mac/toolbar.cpp +++ b/src/mac/toolbar.cpp @@ -40,8 +40,7 @@ wxToolBar::wxToolBar() bool wxToolBar::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) { - m_maxWidth = -1; - m_maxHeight = -1; + m_maxWidth = m_maxHeight = 0; m_defaultWidth = 24; m_defaultHeight = 22; @@ -152,7 +151,9 @@ bool wxToolBar::CreateTools() wxNode *node = m_tools.First(); int noButtons = 0; int x = 0 ; - + wxSize toolSize = GetToolSize() ; + int tw, th; + GetSize(& tw, & th); while (node) { wxToolBarTool *tool = (wxToolBarTool *)node->Data(); @@ -161,8 +162,8 @@ bool wxToolBar::CreateTools() if( tool->m_toolStyle != wxTOOL_STYLE_SEPARATOR ) { Rect toolrect = { toolbarrect.top + kwxMacToolBarTopMargin , toolbarrect.left + x + kwxMacToolBarLeftMargin , 0 , 0 } ; - toolrect.right = toolrect.left + m_defaultWidth ; - toolrect.bottom = toolrect.top + m_defaultHeight ; + toolrect.right = toolrect.left + toolSize.x ; + toolrect.bottom = toolrect.top + toolSize.y ; PicHandle icon = NULL ; if ( bmap ) @@ -197,17 +198,37 @@ bool wxToolBar::CreateTools() UMASetControlFontStyle( m_macToolHandle , &controlstyle ) ; UMAEmbedControl( m_macToolHandle , m_macControl ) ; - x += (int)m_defaultWidth; + x += (int)toolSize.x; noButtons ++; } else { m_macToolHandles.Add( NULL ) ; - x += (int)m_defaultWidth / 4; + x += (int)toolSize.x / 4; } + if ( toolbarrect.left + x + kwxMacToolBarLeftMargin > m_maxWidth) + m_maxWidth = toolbarrect.left + x + kwxMacToolBarLeftMargin; + if (toolbarrect.top + kwxMacToolBarTopMargin + toolSize.y > m_maxHeight) + m_maxHeight = toolbarrect.top + kwxMacToolBarTopMargin ; + node = node->Next(); } + if ( GetWindowStyleFlag() & wxTB_HORIZONTAL ) + { + m_maxWidth = tw ; // +=toolSize.x; + m_maxHeight += toolSize.y; + m_maxHeight += m_yMargin; + } + else + { + m_maxHeight = th ;// += toolSize.y; + m_maxWidth += toolSize.x; + m_maxWidth += m_xMargin; + } + + SetSize(m_maxWidth, m_maxHeight); + return TRUE; } @@ -218,8 +239,7 @@ void wxToolBar::SetToolBitmapSize(const wxSize& size) wxSize wxToolBar::GetMaxSize() const { - // TODO - return wxSize(0, 0); + return wxSize(m_maxWidth, m_maxHeight); } // The button size is bigger than the bitmap size @@ -291,7 +311,13 @@ wxToolBarTool *wxToolBar::AddTool(int index, const wxBitmap& bitmap, const wxBit else tool->m_y = m_yMargin; - tool->SetSize(m_defaultWidth, m_defaultHeight); + tool->SetSize(GetToolSize().x, GetToolSize().y); + + if ((tool->m_x + bitmap.GetWidth() + m_xMargin) > m_maxWidth) + m_maxWidth = (tool->m_x + tool->GetWidth() + m_xMargin); + + if ((tool->m_y + bitmap.GetHeight() + m_yMargin) > m_maxHeight) + m_maxHeight = (tool->m_y + tool->GetHeight() + m_yMargin); m_tools.Append((long)index, tool); return tool; diff --git a/src/mac/window.cpp b/src/mac/window.cpp index 43e490d70b..ed8396c774 100644 --- a/src/mac/window.cpp +++ b/src/mac/window.cpp @@ -35,6 +35,10 @@ #include "wx/menuitem.h" #include "wx/log.h" +#if wxUSE_CARET + #include "wx/caret.h" +#endif // wxUSE_CARET + #define wxWINDOW_HSCROLL 5998 #define wxWINDOW_VSCROLL 5997 #define MAC_SCROLLBAR_SIZE 16 @@ -198,25 +202,45 @@ void wxWindow::SetFocus() { if (gFocusWindow ) { + #if wxUSE_CARET + // Deal with caret + if ( gFocusWindow->m_caret ) + { + gFocusWindow->m_caret->OnKillFocus(); + } + #endif // wxUSE_CARET wxControl* control = wxDynamicCast( gFocusWindow , wxControl ) ; if ( control && control->GetMacControl() ) { UMASetKeyboardFocus( gFocusWindow->GetMacRootWindow() , control->GetMacControl() , kControlFocusNoPart ) ; } - wxFocusEvent event(wxEVT_KILL_FOCUS, gFocusWindow->m_windowId); - event.SetEventObject(gFocusWindow); + wxFocusEvent event(wxEVT_KILL_FOCUS, gFocusWindow->m_windowId); + event.SetEventObject(gFocusWindow); gFocusWindow->GetEventHandler()->ProcessEvent(event) ; } gFocusWindow = this ; { + #if wxUSE_CARET + // Deal with caret + if ( m_caret ) + { + m_caret->OnSetFocus(); + } + #endif // wxUSE_CARET + // panel wants to track the window which was the last to have focus in it + wxPanel *panel = wxDynamicCast(GetParent(), wxPanel); + if ( panel ) + { + panel->SetLastFocus(this); + } wxControl* control = wxDynamicCast( gFocusWindow , wxControl ) ; if ( control && control->GetMacControl() ) { UMASetKeyboardFocus( gFocusWindow->GetMacRootWindow() , control->GetMacControl() , kControlEditTextPart ) ; } - wxFocusEvent event(wxEVT_SET_FOCUS, m_windowId); - event.SetEventObject(this); + wxFocusEvent event(wxEVT_SET_FOCUS, m_windowId); + event.SetEventObject(this); GetEventHandler()->ProcessEvent(event) ; } } @@ -1348,6 +1372,9 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time) if ( focus.Ok() ) { WindowRef window = GetMacRootWindow() ; + bool eraseBackground = false ; + if ( m_macWindowData ) + eraseBackground = true ; if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE) ) { UMASetThemeWindowBackground( window , kThemeBrushDocumentWindowBackground , false ) ; @@ -1374,13 +1401,13 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time) if ( parent->m_backgroundColour != wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE ) ) { // if we have any other colours in the hierarchy - RGBBackColor( &parent->m_backgroundColour.GetPixel()) ; - break ; + RGBBackColor( &parent->m_backgroundColour.GetPixel()) ; + break ; } // if we have the normal colours in the hierarchy but another control etc. -> use it's background if ( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) { - ApplyThemeBackground (kThemeBackgroundTabPane, &(**updatergn).rgnBBox , kThemeStateActive,8,true); + ApplyThemeBackground(kThemeBackgroundTabPane, &(**updatergn).rgnBBox , kThemeStateActive,8,true); break ; } } @@ -1401,8 +1428,13 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time) { RGBBackColor( &m_backgroundColour.GetPixel()) ; } + if ( GetParent() && m_backgroundColour != GetParent()->GetBackgroundColour() ) + eraseBackground = true ; SetClip( updatergn ) ; - EraseRgn( updatergn ) ; + if ( eraseBackground ) + { + EraseRgn( updatergn ) ; + } } } @@ -1553,7 +1585,10 @@ void wxWindow::MacKeyDown( EventRecord *ev ) } - +bool wxWindow::AcceptsFocus() const +{ + return MacCanFocus() && wxWindowBase::AcceptsFocus(); +} ControlHandle wxWindow::MacGetContainerForEmbedding() { -- 2.45.2