X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/34d26f42b16d6fb233988fec2a7fa6c8f397972d..1a75e76f399bc91b3f841e7f77140e83f9bd5958:/src/univ/toolbar.cpp diff --git a/src/univ/toolbar.cpp b/src/univ/toolbar.cpp index e0d4b6f169..1d68c60857 100644 --- a/src/univ/toolbar.cpp +++ b/src/univ/toolbar.cpp @@ -40,6 +40,7 @@ #include "wx/toolbar.h" #include "wx/image.h" +#include "wx/log.h" // ---------------------------------------------------------------------------- // constants @@ -161,7 +162,7 @@ void wxToolBar::SetMargins(int x, int y) { // This required for similar visual effects under // native platforms and wxUniv. - wxToolBarBase::SetMargins( x + 2, y + 2 ); + wxToolBarBase::SetMargins( x + 3, y + 3 ); } // ---------------------------------------------------------------------------- @@ -405,7 +406,8 @@ void wxToolBar::DoLayout() tool->m_x = x; tool->m_y = y; - *pCur += (tool->IsSeparator() ? m_widthSeparator : widthTool) + margin; + // TODO ugly number fiddling + *pCur += ( tool->IsSeparator() ? m_widthSeparator : (widthTool+2) ) + margin; } // calculate the total toolbar size @@ -489,6 +491,12 @@ void wxToolBar::DoDraw(wxControlRenderer *renderer) break; } + if (tool->IsSeparator() && !HasFlag(wxTB_FLAT)) + { + // Draw seperators only in flat mode + continue; + } + // deal with the flags int flags = 0; @@ -632,11 +640,12 @@ bool wxStdToolbarInputHandler::HandleMouse(wxInputConsumer *consumer, if ( event.Button(1) ) { - if ( !tool || !tool->IsEnabled() ) - return TRUE; if ( event.LeftDown() || event.LeftDClick() ) { + if ( !tool || !tool->IsEnabled() ) + return TRUE; + m_winCapture = tbar; m_winCapture->CaptureMouse(); @@ -655,19 +664,13 @@ bool wxStdToolbarInputHandler::HandleMouse(wxInputConsumer *consumer, } if ( tool == m_toolCapture ) - { - // this will generate a click event - consumer->PerformAction( wxACTION_BUTTON_TOGGLE, tool->GetId() ); - - m_toolCapture = NULL; - - return TRUE; - } - //else: the mouse was released outside the tool or in - // a different tool + consumer->PerformAction( wxACTION_BUTTON_TOGGLE, m_toolCapture->GetId() ); + else + consumer->PerformAction( wxACTION_TOOLBAR_LEAVE, m_toolCapture->GetId() ); m_toolCapture = NULL; - + + return TRUE; } //else: don't do anything special about the double click } @@ -694,27 +697,40 @@ bool wxStdToolbarInputHandler::HandleMouseMove(wxInputConsumer *consumer, tool = (wxToolBarTool*) tbar->FindToolForPosition( event.GetX(), event.GetY() ); } - if ((tool) && (tool == m_toolLast)) + if (m_toolCapture) { - // Still over the same tool as last time - return TRUE; + // During capture we only care of the captured tool + if (tool && (tool != m_toolCapture)) + tool = NULL; + + if (tool == m_toolLast) + return TRUE; + + if (tool) + consumer->PerformAction( wxACTION_BUTTON_PRESS, m_toolCapture->GetId() ); + else + consumer->PerformAction( wxACTION_BUTTON_RELEASE, m_toolCapture->GetId() ); + + m_toolLast = tool; } - - if (m_toolLast) + else { - // Leave old tool if any - consumer->PerformAction( wxACTION_TOOLBAR_LEAVE, m_toolLast->GetId() ); - } + if (tool == m_toolLast) + return TRUE; + + if (m_toolLast) + { + // Leave old tool if any + consumer->PerformAction( wxACTION_TOOLBAR_LEAVE, m_toolLast->GetId() ); + } + + if (tool) + { + // Enter new tool if any + consumer->PerformAction( wxACTION_TOOLBAR_ENTER, tool->GetId() ); + } - if (m_toolCapture && (m_toolCapture != tool)) - m_toolLast = NULL; - else m_toolLast = tool; - - if (m_toolLast) - { - // Enter new tool if any - consumer->PerformAction( wxACTION_TOOLBAR_ENTER, m_toolLast->GetId() ); } return TRUE;