]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/tbarbase.cpp
Faster imagescale code
[wxWidgets.git] / src / common / tbarbase.cpp
index 724fab1429b4e181aad394c1607059c7e0e7c6fd..d50620d33fee2d59235e1ee81607acd09d4f0e2e 100644 (file)
 #endif
 
 // For ::UpdateWindow
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
 #include <windows.h>
 #endif
 
-#if USE_TOOLBAR
+#if wxUSE_TOOLBAR
 
 #include "wx/tbarbase.h"
 
 #if !USE_SHARED_LIBRARY
-IMPLEMENT_DYNAMIC_CLASS(wxToolBarBase, wxControl)
+IMPLEMENT_ABSTRACT_CLASS(wxToolBarBase, wxControl)
 IMPLEMENT_DYNAMIC_CLASS(wxToolBarTool, wxObject)
 
 BEGIN_EVENT_TABLE(wxToolBarBase, wxControl)
@@ -48,9 +48,9 @@ END_EVENT_TABLE()
 // is still valid: a tool may have quit the toolbar.
 static wxList gs_ToolBars;
 
-wxToolBarTool::wxToolBarTool(const int theIndex,
-                    const wxBitmap& theBitmap1, const wxBitmap& theBitmap2, const bool toggle,
-                    const long xPos, const long yPos, const wxString& helpS1, const wxString& helpS2)
+wxToolBarTool::wxToolBarTool(int theIndex,
+                    const wxBitmap& theBitmap1, const wxBitmap& theBitmap2, bool toggle,
+                    long xPos, long yPos, const wxString& helpS1, const wxString& helpS2)
 {
   m_toolStyle = wxTOOL_STYLE_BUTTON;
   m_clientData = NULL;
@@ -88,8 +88,8 @@ wxToolBarBase::wxToolBarBase(void) : m_tools(wxKEY_INTEGER)
 {
   gs_ToolBars.Append(this);
 
-  m_tilingDirection = wxVERTICAL;
-  m_rowsOrColumns = 0;
+  m_maxRows = 1;
+  m_maxCols = 32000;
   m_maxWidth = 0;
   m_maxHeight = 0;
   m_defaultWidth = 16;
@@ -141,16 +141,21 @@ void wxToolBarBase::OnRightClick(int toolIndex, long x, long y)
 {
     wxCommandEvent event(wxEVT_COMMAND_TOOL_RCLICKED, toolIndex);
     event.SetEventObject(this);
+    event.SetInt(toolIndex);
 
     GetEventHandler()->ProcessEvent(event);
 }
 
 // Called when the mouse cursor enters a tool bitmap (no button pressed).
 // Argument is -1 if mouse is exiting the toolbar.
+// Note that for this event, the id of the window is used,
+// and the integer parameter of wxCommandEvent is used to retrieve
+// the tool id.
 void wxToolBarBase::OnMouseEnter ( int toolIndex )
 {
-    wxCommandEvent event(wxEVT_COMMAND_TOOL_ENTER, toolIndex);
+    wxCommandEvent event(wxEVT_COMMAND_TOOL_ENTER, GetId());
     event.SetEventObject(this);
+    event.SetInt(toolIndex);
 
     GetEventHandler()->ProcessEvent(event);
 }
@@ -158,8 +163,8 @@ void wxToolBarBase::OnMouseEnter ( int toolIndex )
 // If pushedBitmap is NULL, a reversed version of bitmap is
 // created and used as the pushed/toggled image.
 // If toggle is TRUE, the button toggles between the two states.
-wxToolBarTool *wxToolBarBase::AddTool(const int index, const wxBitmap& bitmap, const wxBitmap& pushedBitmap,
-             const bool toggle, const long xPos, const long yPos, wxObject *clientData,
+wxToolBarTool *wxToolBarBase::AddTool(int index, const wxBitmap& bitmap, const wxBitmap& pushedBitmap,
+             bool toggle, long xPos, long yPos, wxObject *clientData,
              const wxString& helpString1, const wxString& helpString2)
 {
   wxToolBarTool *tool = new wxToolBarTool(index, bitmap, pushedBitmap, toggle, xPos, yPos, helpString1, helpString2);
@@ -190,7 +195,7 @@ void wxToolBarBase::AddSeparator ()
 {
   wxToolBarTool *tool = new wxToolBarTool;
   tool->m_toolStyle = wxTOOL_STYLE_SEPARATOR;
-  m_tools.Append(tool);
+  m_tools.Append(-1, tool);
 }
 
 void wxToolBarBase::ClearTools(void)
@@ -207,7 +212,7 @@ void wxToolBarBase::ClearTools(void)
   }
 }
 
-void wxToolBarBase::EnableTool(const int index, const bool enable)
+void wxToolBarBase::EnableTool(int index, bool enable)
 {
   wxNode *node = m_tools.Find((long)index);
   if (node)
@@ -218,11 +223,11 @@ void wxToolBarBase::EnableTool(const int index, const bool enable)
   }
 }
 
-void wxToolBarBase::ToggleTool(const int index, const bool toggle)
+void wxToolBarBase::ToggleTool(int index, bool toggle)
 {
 }
 
-void wxToolBarBase::SetToggle(const int index, const bool value)
+void wxToolBarBase::SetToggle(int index, bool value)
 {
   wxNode *node=m_tools.Find((long)index);
   if (node){
@@ -231,7 +236,7 @@ void wxToolBarBase::SetToggle(const int index, const bool value)
   }
 }
 
-bool wxToolBarBase::GetToolState(const int index) const
+bool wxToolBarBase::GetToolState(int index) const
 {
   wxNode *node = m_tools.Find((long)index);
   if (node)
@@ -246,7 +251,7 @@ bool wxToolBarBase::GetToolState(const int index) const
   else return FALSE;
 }
 
-bool wxToolBarBase::GetToolEnabled(const int index) const
+bool wxToolBarBase::GetToolEnabled(int index) const
 {
   wxNode *node = m_tools.Find((long)index);
   if (node)
@@ -261,7 +266,7 @@ bool wxToolBarBase::GetToolEnabled(const int index) const
   else return FALSE;
 }
 
-wxObject *wxToolBarBase::GetToolClientData(const int index) const
+wxObject *wxToolBarBase::GetToolClientData(int index) const
 {
   wxNode *node = m_tools.Find((long)index);
   if (node)
@@ -276,7 +281,7 @@ wxObject *wxToolBarBase::GetToolClientData(const int index) const
   else return NULL;
 }
 
-void wxToolBarBase::SetToolShortHelp(const int index, const wxString& helpString)
+void wxToolBarBase::SetToolShortHelp(int index, const wxString& helpString)
 {
   wxNode *node=m_tools.Find((long)index);
   if (node)
@@ -286,7 +291,7 @@ void wxToolBarBase::SetToolShortHelp(const int index, const wxString& helpString
   }
 }
 
-wxString wxToolBarBase::GetToolShortHelp(const int index) const
+wxString wxToolBarBase::GetToolShortHelp(int index) const
 {
   wxNode *node=m_tools.Find((long)index);
   if (node)
@@ -298,7 +303,7 @@ wxString wxToolBarBase::GetToolShortHelp(const int index) const
     return wxString("");
 }
 
-void wxToolBarBase::SetToolLongHelp(const int index, const wxString& helpString)
+void wxToolBarBase::SetToolLongHelp(int index, const wxString& helpString)
 {
   wxNode *node=m_tools.Find((long)index);
   if (node)
@@ -308,7 +313,7 @@ void wxToolBarBase::SetToolLongHelp(const int index, const wxString& helpString)
   }
 }
 
-wxString wxToolBarBase::GetToolLongHelp(const int index) const
+wxString wxToolBarBase::GetToolLongHelp(int index) const
 {
   wxNode *node=m_tools.Find((long)index);
   if (node)
@@ -320,7 +325,7 @@ wxString wxToolBarBase::GetToolLongHelp(const int index) const
     return wxString("");
 }
 
-wxToolBarTool *wxToolBarBase::FindToolForPosition(const long x, const long y) const
+wxToolBarTool *wxToolBarBase::FindToolForPosition(long x, long y) const
 {
   wxNode *node = m_tools.First();
   while (node)
@@ -345,18 +350,18 @@ wxSize wxToolBarBase::GetMaxSize ( void ) const
 // the tool we're leaving was a 'sprung push button' and if so,
 // spring it back to the up state.
 //
-void wxToolBarBase::SetMargins(const int x, const int y)
+void wxToolBarBase::SetMargins(int x, int y)
 {
   m_xMargin = x;
   m_yMargin = y;
 }
 
-void wxToolBarBase::SetToolPacking(const int packing)
+void wxToolBarBase::SetToolPacking(int packing)
 {
   m_toolPacking = packing;
 }
 
-void wxToolBarBase::SetToolSeparation(const int separation)
+void wxToolBarBase::SetToolSeparation(int separation)
 {
   m_toolSeparation = separation;
 }
@@ -367,94 +372,6 @@ void wxToolBarBase::Command(wxCommandEvent& event)
 
 void wxToolBarBase::Layout(void)
 {
-  m_currentRowsOrColumns = 0;
-  m_lastX = m_xMargin;
-  m_lastY = m_yMargin;
-  int maxToolWidth = 0;
-  int maxToolHeight = 0;
-  m_maxWidth = 0;
-  m_maxHeight = 0;
-
-  // Find the maximum tool width and height
-  wxNode *node = m_tools.First();
-  while (node)
-  {
-    wxToolBarTool *tool = (wxToolBarTool *)node->Data();
-    if (tool->GetWidth() > maxToolWidth)
-      maxToolWidth = (int)tool->GetWidth();
-    if (tool->GetHeight() > maxToolHeight)
-      maxToolHeight = (int)tool->GetHeight();
-    node = node->Next();
-  }
-
-  int separatorSize = m_toolSeparation;
-
-  node = m_tools.First();
-  while (node)
-  {
-    wxToolBarTool *tool = (wxToolBarTool *)node->Data();
-    if (tool->m_toolStyle == wxTOOL_STYLE_SEPARATOR)
-    {
-      if (m_tilingDirection == wxHORIZONTAL)
-      {
-        if (m_currentRowsOrColumns >= m_rowsOrColumns)
-          m_lastY += separatorSize;
-        else
-          m_lastX += separatorSize;
-      }
-      else
-      {
-        if (m_currentRowsOrColumns >= m_rowsOrColumns)
-          m_lastX += separatorSize;
-        else
-          m_lastY += separatorSize;
-      }
-    }
-    else if (tool->m_toolStyle == wxTOOL_STYLE_BUTTON)
-    {
-      if (m_tilingDirection == wxHORIZONTAL)
-      {
-        if (m_currentRowsOrColumns >= m_rowsOrColumns)
-        {
-          m_currentRowsOrColumns = 0;
-          m_lastX = m_xMargin;
-          m_lastY += maxToolHeight + m_toolPacking;
-        }
-        tool->m_x = (long) (m_lastX + (maxToolWidth - tool->GetWidth())/2.0);
-        tool->m_y = (long) (m_lastY + (maxToolHeight - tool->GetHeight())/2.0);
-  
-        m_lastX += maxToolWidth + m_toolPacking;
-      }
-      else
-      {
-        if (m_currentRowsOrColumns >= m_rowsOrColumns)
-        {
-          m_currentRowsOrColumns = 0;
-          m_lastX += (maxToolWidth + m_toolPacking);
-          m_lastY = m_yMargin;
-        }
-        tool->m_x = (long) (m_lastX + (maxToolWidth - tool->GetWidth())/2.0);
-        tool->m_y = (long) (m_lastY + (maxToolHeight - tool->GetHeight())/2.0);
-  
-        m_lastY += maxToolHeight + m_toolPacking;
-      }
-      m_currentRowsOrColumns ++;
-    }
-    
-    if (m_lastX > m_maxWidth)
-      m_maxWidth = m_lastX;
-    if (m_lastY > m_maxHeight)
-      m_maxHeight = m_lastY;
-
-    node = node->Next();
-  }
-  if (m_tilingDirection == wxVERTICAL)
-    m_maxWidth += maxToolWidth;
-  else
-    m_maxHeight += maxToolHeight;
-
-  m_maxWidth += m_xMargin;
-  m_maxHeight += m_yMargin;
 }
 
 
@@ -464,9 +381,9 @@ void wxToolBarBase::Layout(void)
  * pixelsPerUnitX/pixelsPerUnitY: number of pixels per unit (e.g. pixels per text line)
  * noUnitsX/noUnitsY:        : no. units per scrollbar
  */
-void wxToolBarBase::SetScrollbars (const int pixelsPerUnitX, const int pixelsPerUnitY,
-              const int noUnitsX, const int noUnitsY,
-              const int xPos, const int yPos)
+void wxToolBarBase::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
+              int noUnitsX, int noUnitsY,
+              int xPos, int yPos)
 {
       m_xScrollPixelsPerLine = pixelsPerUnitX;
       m_yScrollPixelsPerLine = pixelsPerUnitY;
@@ -500,7 +417,7 @@ void wxToolBarBase::SetScrollbars (const int pixelsPerUnitX, const int pixelsPer
     }
        AdjustScrollbars();
     Refresh();
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
     ::UpdateWindow ((HWND) GetHWND());
 #endif
 }
@@ -559,7 +476,7 @@ int wxToolBarBase::CalcScrollInc(wxScrollEvent& event)
   int nScrollInc = 0;
   switch (event.GetEventType())
   {
-    case wxEVENT_TYPE_SCROLL_TOP:
+    case wxEVT_SCROLL_TOP:
     {
       if (orient == wxHORIZONTAL)
         nScrollInc = - m_xScrollPosition;
@@ -567,7 +484,7 @@ int wxToolBarBase::CalcScrollInc(wxScrollEvent& event)
         nScrollInc = - m_yScrollPosition;
       break;
     }
-    case wxEVENT_TYPE_SCROLL_BOTTOM:
+    case wxEVT_SCROLL_BOTTOM:
     {
       if (orient == wxHORIZONTAL)
         nScrollInc = m_xScrollLines - m_xScrollPosition;
@@ -575,17 +492,17 @@ int wxToolBarBase::CalcScrollInc(wxScrollEvent& event)
         nScrollInc = m_yScrollLines - m_yScrollPosition;
       break;
     }
-    case wxEVENT_TYPE_SCROLL_LINEUP:
+    case wxEVT_SCROLL_LINEUP:
     {
       nScrollInc = -1;
       break;
     }
-    case wxEVENT_TYPE_SCROLL_LINEDOWN:
+    case wxEVT_SCROLL_LINEDOWN:
     {
       nScrollInc = 1;
       break;
     }
-    case wxEVENT_TYPE_SCROLL_PAGEUP:
+    case wxEVT_SCROLL_PAGEUP:
     {
       if (orient == wxHORIZONTAL)
         nScrollInc = -GetScrollPageSize(wxHORIZONTAL);
@@ -593,7 +510,7 @@ int wxToolBarBase::CalcScrollInc(wxScrollEvent& event)
         nScrollInc = -GetScrollPageSize(wxVERTICAL);
       break;
     }
-    case wxEVENT_TYPE_SCROLL_PAGEDOWN:
+    case wxEVT_SCROLL_PAGEDOWN:
     {
       if (orient == wxHORIZONTAL)
         nScrollInc = GetScrollPageSize(wxHORIZONTAL);
@@ -601,7 +518,7 @@ int wxToolBarBase::CalcScrollInc(wxScrollEvent& event)
         nScrollInc = GetScrollPageSize(wxVERTICAL);
       break;
     }
-    case wxEVENT_TYPE_SCROLL_THUMBTRACK:
+    case wxEVT_SCROLL_THUMBTRACK:
     {
       if (orient == wxHORIZONTAL)
         nScrollInc = pos - m_xScrollPosition;
@@ -698,7 +615,7 @@ void wxToolBarBase::AdjustScrollbars(void)
 // Default OnSize resets scrollbars, if any
 void wxToolBarBase::OnSize(wxSizeEvent& event)
 {
-#if USE_CONSTRAINTS
+#if wxUSE_CONSTRAINTS
   if (GetAutoLayout())
     Layout();
 #endif
@@ -737,7 +654,7 @@ void wxToolBarBase::SetScrollPageSize(int orient, int pageSize)
 /*
  * Scroll to given position (scroll position, not pixel position)
  */
-void wxToolBarBase::Scroll (const int x_pos, const int y_pos)
+void wxToolBarBase::Scroll (int x_pos, int y_pos)
 {
   int old_x, old_y;
   ViewStart (&old_x, &old_y);
@@ -755,12 +672,12 @@ void wxToolBarBase::Scroll (const int x_pos, const int y_pos)
       SetScrollPos (wxVERTICAL, y_pos, TRUE);
     }
   Refresh();
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
   UpdateWindow ((HWND) GetHWND());
 #endif
 }
 
-void wxToolBarBase::EnableScrolling (const bool x_scroll, const bool y_scroll)
+void wxToolBarBase::EnableScrolling (bool x_scroll, bool y_scroll)
 {
   m_xScrollingEnabled = x_scroll;
   m_yScrollingEnabled = y_scroll;
@@ -779,20 +696,6 @@ void wxToolBarBase::ViewStart (int *x, int *y) const
   *y = m_yScrollPosition;
 }
 
-/*
-void wxToolBarBase::CalcScrolledPosition(const int x, const int y, int *xx, int *yy) const
-{
-  *xx = (m_calcScrolledOffset ? (x - m_xScrollPosition * m_xScrollPixelsPerLine) : x);
-  *yy = (m_calcScrolledOffset ? (y - m_yScrollPosition * m_yScrollPixelsPerLine) : y);
-}
-
-void wxToolBarBase::CalcUnscrolledPosition(const int x, const int y, float *xx, float *yy) const
-{
-  *xx = (float)(m_calcScrolledOffset ? (x + m_xScrollPosition * m_xScrollPixelsPerLine) : x);
-  *yy = (float)(m_calcScrolledOffset ? (y + m_yScrollPosition * m_yScrollPixelsPerLine) : y);
-}
-*/
-
 void wxToolBarBase::OnIdle(wxIdleEvent& event)
 {
     wxWindow::OnIdle(event);
@@ -827,9 +730,9 @@ void wxToolBarBase::DoToolbarUpdates(void)
        }
 }
 
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
 // Circumvent wxControl::MSWOnMouseMove which doesn't set the cursor.
-void wxToolBarBase::MSWOnMouseMove(const int x, const int y, const WXUINT flags)
+void wxToolBarBase::MSWOnMouseMove(int x, int y, WXUINT flags)
 {
     wxWindow::MSWOnMouseMove(x, y, flags);
 }