]> git.saurik.com Git - wxWidgets.git/commitdiff
corrected GetCharWidth and implemented MacSuperChangedPosition for toolbars
authorStefan Csomor <csomor@advancedconcepts.ch>
Tue, 29 May 2001 14:37:43 +0000 (14:37 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Tue, 29 May 2001 14:37:43 +0000 (14:37 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10372 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/mac/toolbar.h
src/mac/carbon/dc.cpp
src/mac/carbon/toolbar.cpp
src/mac/dc.cpp
src/mac/toolbar.cpp

index 11a488ca90f5e094c36845ea71cfd3f37bb0c8ea..7b7c38456fa7ae02dfec2b16e5b43cb3eb7085f5 100644 (file)
@@ -63,6 +63,7 @@ class WXDLLEXPORT wxToolBar: public wxToolBarBase
        virtual wxString MacGetToolTipString( wxPoint &where ) ;
        void OnPaint(wxPaintEvent& event) ;
        void OnMouse(wxMouseEvent& event) ;
+       virtual void MacSuperChangedPosition() ;
 protected:
     // common part of all ctors
     void Init();
index 669a5bf5261c805ee0b1b6b9908d7c59a63e279a..acad87440d2c876e6f80bce00e957ce6ddc59faf 100644 (file)
@@ -1276,10 +1276,9 @@ wxCoord   wxDC::GetCharWidth(void) const
 
        MacInstallFont() ;
 
-       FontInfo fi ;
-       ::GetFontInfo( &fi ) ;
+    int width = ::TextWidth( "n" , 0 , 1 ) ;
 
-       return YDEV2LOGREL((fi.descent + fi.ascent) / 2) ;
+       return YDEV2LOGREL(width) ;
 }
 
 wxCoord   wxDC::GetCharHeight(void) const
index 3c9b8da316a292dc39c87500130dd22edba28f96..8e1d455afd0d82940218da77543eed335df9ada5 100644 (file)
@@ -425,6 +425,130 @@ void wxToolBar::SetRows(int nRows)
     m_maxRows = nRows;
 }
 
+void wxToolBar::MacSuperChangedPosition() 
+{
+  if (m_tools.Number() > 0)
+  {
+
+       Point localOrigin ;
+       Rect clipRect ;
+       WindowRef window ;
+       wxWindow *win ;
+       
+       GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ;
+
+       Rect toolbarrect = { m_y + localOrigin.v , m_x  + localOrigin.h , 
+               m_y + m_height + localOrigin.v  , m_x + m_width + localOrigin.h} ;
+       ControlFontStyleRec             controlstyle ;
+
+       controlstyle.flags = kControlUseFontMask ;
+       controlstyle.font = kControlFontSmallSystemFont ;
+       
+       wxNode *node = m_tools.First();
+       int noButtons = 0;
+       int x = 0 ;
+       wxSize toolSize = GetToolSize() ;
+    int tw, th;
+    GetSize(& tw, & th);
+    
+    int maxWidth = 0 ;
+    int maxHeight = 0 ;
+    int toolcount = 0 ;
+    {
+               WindowRef rootwindow = GetMacRootWindow() ;
+               wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ;
+               UMASetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ;
+               wxMacDrawingHelper focus( wxrootwindow ) ;
+       while (node)
+       {
+               wxToolBarTool *tool = (wxToolBarTool *)node->Data();
+               wxBitmapRefData * bmap = (wxBitmapRefData*) ( tool->GetBitmap1().GetRefData()) ;
+               
+               if(  !tool->IsSeparator()  )
+               {
+                       Rect toolrect = { toolbarrect.top + m_yMargin + kwxMacToolBarTopMargin, toolbarrect.left + x + m_xMargin + kwxMacToolBarLeftMargin , 0 , 0 } ;
+                       toolrect.right = toolrect.left + toolSize.x ;
+                       toolrect.bottom = toolrect.top + toolSize.y ;
+                                               
+                       ControlHandle m_macToolHandle = (ControlHandle) m_macToolHandles[toolcount++] ;
+                       
+               {
+                       Rect contrlRect ;               
+                       GetControlBounds( m_macToolHandle , &contrlRect ) ; 
+                       int former_mac_x = contrlRect.left ;
+                       int former_mac_y = contrlRect.top ;
+                       int mac_x = toolrect.left ;
+                       int mac_y = toolrect.top ;
+                                       
+                       if ( mac_x != former_mac_x || mac_y != former_mac_y )
+                       {
+                               {
+                                       Rect inval = { former_mac_y , former_mac_x , former_mac_y + toolSize.y , former_mac_x + toolSize.y } ;
+                                       InvalWindowRect( rootwindow , &inval ) ;
+                               }
+                               UMAMoveControl( m_macToolHandle , mac_x , mac_y ) ;
+                               {
+                                       Rect inval = { mac_y , mac_x , mac_y + toolSize.y , mac_x + toolSize.y } ;
+                                       InvalWindowRect( rootwindow , &inval ) ;
+                               }
+                       }
+               }
+                       
+                       x += (int)toolSize.x;
+                       noButtons ++;
+               }
+               else
+               {
+                toolcount++ ;
+                       x += (int)toolSize.x / 4;
+               }
+           if ( toolbarrect.left + x + m_xMargin  + kwxMacToolBarLeftMargin- m_x - localOrigin.h > maxWidth)
+                       maxWidth = toolbarrect.left + x  + kwxMacToolBarLeftMargin+ m_xMargin - m_x - localOrigin.h;
+               if (toolbarrect.top + m_yMargin  + kwxMacToolBarTopMargin - m_y - localOrigin.v > maxHeight)
+                       maxHeight = toolbarrect.top  + kwxMacToolBarTopMargin + m_yMargin - m_y - localOrigin.v ;
+
+               node = node->Next();
+       }
+               if ( wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) )
+               {
+               }
+               else
+               {
+                       UMASetThemeWindowBackground( rootwindow , kThemeBrushDocumentWindowBackground , false ) ;
+               }
+    }
+
+     if ( GetWindowStyleFlag() & wxTB_HORIZONTAL )
+     {
+       if ( m_maxRows == 0 )
+       {
+           // if not set yet, only one row
+           SetRows(1);
+       }
+       maxWidth = tw ; 
+       maxHeight += toolSize.y;
+       maxHeight += m_yMargin + kwxMacToolBarTopMargin;
+       m_maxHeight = maxHeight ;
+     }
+     else
+     {
+       if ( noButtons > 0 && m_maxRows == 0 )
+       {
+           // if not set yet, have one column
+           SetRows(noButtons);
+       }
+       maxHeight = th ;
+       maxWidth += toolSize.x;
+       maxWidth += m_xMargin + kwxMacToolBarLeftMargin;
+       m_maxWidth = maxWidth ;
+     }
+
+     SetSize(maxWidth, maxHeight);
+    }
+
+    wxWindow::MacSuperChangedPosition() ;
+}
+
 wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord x, wxCoord y) const
 {
     MacClientToRootWindow( &x , &y ) ;
index 669a5bf5261c805ee0b1b6b9908d7c59a63e279a..acad87440d2c876e6f80bce00e957ce6ddc59faf 100644 (file)
@@ -1276,10 +1276,9 @@ wxCoord   wxDC::GetCharWidth(void) const
 
        MacInstallFont() ;
 
-       FontInfo fi ;
-       ::GetFontInfo( &fi ) ;
+    int width = ::TextWidth( "n" , 0 , 1 ) ;
 
-       return YDEV2LOGREL((fi.descent + fi.ascent) / 2) ;
+       return YDEV2LOGREL(width) ;
 }
 
 wxCoord   wxDC::GetCharHeight(void) const
index 3c9b8da316a292dc39c87500130dd22edba28f96..8e1d455afd0d82940218da77543eed335df9ada5 100644 (file)
@@ -425,6 +425,130 @@ void wxToolBar::SetRows(int nRows)
     m_maxRows = nRows;
 }
 
+void wxToolBar::MacSuperChangedPosition() 
+{
+  if (m_tools.Number() > 0)
+  {
+
+       Point localOrigin ;
+       Rect clipRect ;
+       WindowRef window ;
+       wxWindow *win ;
+       
+       GetParent()->MacGetPortParams( &localOrigin , &clipRect , &window , &win ) ;
+
+       Rect toolbarrect = { m_y + localOrigin.v , m_x  + localOrigin.h , 
+               m_y + m_height + localOrigin.v  , m_x + m_width + localOrigin.h} ;
+       ControlFontStyleRec             controlstyle ;
+
+       controlstyle.flags = kControlUseFontMask ;
+       controlstyle.font = kControlFontSmallSystemFont ;
+       
+       wxNode *node = m_tools.First();
+       int noButtons = 0;
+       int x = 0 ;
+       wxSize toolSize = GetToolSize() ;
+    int tw, th;
+    GetSize(& tw, & th);
+    
+    int maxWidth = 0 ;
+    int maxHeight = 0 ;
+    int toolcount = 0 ;
+    {
+               WindowRef rootwindow = GetMacRootWindow() ;
+               wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ;
+               UMASetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ;
+               wxMacDrawingHelper focus( wxrootwindow ) ;
+       while (node)
+       {
+               wxToolBarTool *tool = (wxToolBarTool *)node->Data();
+               wxBitmapRefData * bmap = (wxBitmapRefData*) ( tool->GetBitmap1().GetRefData()) ;
+               
+               if(  !tool->IsSeparator()  )
+               {
+                       Rect toolrect = { toolbarrect.top + m_yMargin + kwxMacToolBarTopMargin, toolbarrect.left + x + m_xMargin + kwxMacToolBarLeftMargin , 0 , 0 } ;
+                       toolrect.right = toolrect.left + toolSize.x ;
+                       toolrect.bottom = toolrect.top + toolSize.y ;
+                                               
+                       ControlHandle m_macToolHandle = (ControlHandle) m_macToolHandles[toolcount++] ;
+                       
+               {
+                       Rect contrlRect ;               
+                       GetControlBounds( m_macToolHandle , &contrlRect ) ; 
+                       int former_mac_x = contrlRect.left ;
+                       int former_mac_y = contrlRect.top ;
+                       int mac_x = toolrect.left ;
+                       int mac_y = toolrect.top ;
+                                       
+                       if ( mac_x != former_mac_x || mac_y != former_mac_y )
+                       {
+                               {
+                                       Rect inval = { former_mac_y , former_mac_x , former_mac_y + toolSize.y , former_mac_x + toolSize.y } ;
+                                       InvalWindowRect( rootwindow , &inval ) ;
+                               }
+                               UMAMoveControl( m_macToolHandle , mac_x , mac_y ) ;
+                               {
+                                       Rect inval = { mac_y , mac_x , mac_y + toolSize.y , mac_x + toolSize.y } ;
+                                       InvalWindowRect( rootwindow , &inval ) ;
+                               }
+                       }
+               }
+                       
+                       x += (int)toolSize.x;
+                       noButtons ++;
+               }
+               else
+               {
+                toolcount++ ;
+                       x += (int)toolSize.x / 4;
+               }
+           if ( toolbarrect.left + x + m_xMargin  + kwxMacToolBarLeftMargin- m_x - localOrigin.h > maxWidth)
+                       maxWidth = toolbarrect.left + x  + kwxMacToolBarLeftMargin+ m_xMargin - m_x - localOrigin.h;
+               if (toolbarrect.top + m_yMargin  + kwxMacToolBarTopMargin - m_y - localOrigin.v > maxHeight)
+                       maxHeight = toolbarrect.top  + kwxMacToolBarTopMargin + m_yMargin - m_y - localOrigin.v ;
+
+               node = node->Next();
+       }
+               if ( wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) )
+               {
+               }
+               else
+               {
+                       UMASetThemeWindowBackground( rootwindow , kThemeBrushDocumentWindowBackground , false ) ;
+               }
+    }
+
+     if ( GetWindowStyleFlag() & wxTB_HORIZONTAL )
+     {
+       if ( m_maxRows == 0 )
+       {
+           // if not set yet, only one row
+           SetRows(1);
+       }
+       maxWidth = tw ; 
+       maxHeight += toolSize.y;
+       maxHeight += m_yMargin + kwxMacToolBarTopMargin;
+       m_maxHeight = maxHeight ;
+     }
+     else
+     {
+       if ( noButtons > 0 && m_maxRows == 0 )
+       {
+           // if not set yet, have one column
+           SetRows(noButtons);
+       }
+       maxHeight = th ;
+       maxWidth += toolSize.x;
+       maxWidth += m_xMargin + kwxMacToolBarLeftMargin;
+       m_maxWidth = maxWidth ;
+     }
+
+     SetSize(maxWidth, maxHeight);
+    }
+
+    wxWindow::MacSuperChangedPosition() ;
+}
+
 wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord x, wxCoord y) const
 {
     MacClientToRootWindow( &x , &y ) ;