X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/370efbe74165c03642ea7620d35d9e0be8572d74..5bcdac458c0d5bff7c499ae3c2b7cba40c4ad802:/src/univ/toolbar.cpp diff --git a/src/univ/toolbar.cpp b/src/univ/toolbar.cpp index bdd436fc04..264bddd043 100644 --- a/src/univ/toolbar.cpp +++ b/src/univ/toolbar.cpp @@ -35,11 +35,35 @@ #include "wx/log.h" #include "wx/frame.h" #include "wx/dc.h" + #include "wx/image.h" #endif #include "wx/univ/renderer.h" -#include "wx/image.h" +// ---------------------------------------------------------------------------- +// wxStdToolbarInputHandler: translates SPACE and ENTER keys and the left mouse +// click into button press/release actions +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxStdToolbarInputHandler : public wxStdInputHandler +{ +public: + wxStdToolbarInputHandler(wxInputHandler *inphand); + + virtual bool HandleKey(wxInputConsumer *consumer, + const wxKeyEvent& event, + bool pressed); + virtual bool HandleMouse(wxInputConsumer *consumer, + const wxMouseEvent& event); + virtual bool HandleMouseMove(wxInputConsumer *consumer, const wxMouseEvent& event); + virtual bool HandleFocus(wxInputConsumer *consumer, const wxFocusEvent& event); + virtual bool HandleActivation(wxInputConsumer *consumer, bool activated); + +private: + wxWindow *m_winCapture; + wxToolBarToolBase *m_toolCapture; + wxToolBarToolBase *m_toolLast; +}; // ---------------------------------------------------------------------------- // constants @@ -166,9 +190,11 @@ bool wxToolBar::Create(wxWindow *parent, return false; } + FixupStyle(); + CreateInputHandler(wxINP_HANDLER_TOOLBAR); - SetBestSize(size); + SetInitialSize(size); return true; } @@ -264,59 +290,15 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), void wxToolBar::DoEnableTool(wxToolBarToolBase *tool, bool enable) { +#if wxUSE_IMAGE // created disabled-state bitmap on demand if ( !enable && !tool->GetDisabledBitmap().Ok() ) { - wxImage image( tool->GetNormalBitmap().ConvertToImage() ); - - // TODO: don't hardcode 180 - unsigned char bg_red = 180; - unsigned char bg_green = 180; - unsigned char bg_blue = 180; + wxImage image(tool->GetNormalBitmap().ConvertToImage()); - unsigned char mask_red = image.GetMaskRed(); - unsigned char mask_green = image.GetMaskGreen(); - unsigned char mask_blue = image.GetMaskBlue(); - - bool has_mask = image.HasMask(); - - int x,y; - for (y = 0; y < image.GetHeight(); y++) - { - for (x = 0; x < image.GetWidth(); x++) - { - unsigned char red = image.GetRed(x,y); - unsigned char green = image.GetGreen(x,y); - unsigned char blue = image.GetBlue(x,y); - if (!has_mask || red != mask_red || green != mask_green || blue != mask_blue) - { - red = (unsigned char)((((wxInt32) red - bg_red) >> 1) + bg_red); - green = (unsigned char)((((wxInt32) green - bg_green) >> 1) + bg_green); - blue = (unsigned char)((((wxInt32) blue - bg_blue) >> 1) + bg_blue); - image.SetRGB( x, y, red, green, blue ); - } - } - } - - for (y = 0; y < image.GetHeight(); y++) - { - for (x = y % 2; x < image.GetWidth(); x += 2) - { - unsigned char red = image.GetRed(x,y); - unsigned char green = image.GetGreen(x,y); - unsigned char blue = image.GetBlue(x,y); - if (!has_mask || red != mask_red || green != mask_green || blue != mask_blue) - { - red = (unsigned char)((((wxInt32) red - bg_red) >> 1) + bg_red); - green = (unsigned char)((((wxInt32) green - bg_green) >> 1) + bg_green); - blue = (unsigned char)((((wxInt32) blue - bg_blue) >> 1) + bg_blue); - image.SetRGB( x, y, red, green, blue ); - } - } - } - - tool->SetDisabledBitmap(image); + tool->SetDisabledBitmap(image.ConvertToGreyscale()); } +#endif // wxUSE_IMAGE RefreshTool(tool); } @@ -441,7 +423,7 @@ bool wxToolBar::Realize() m_needsLayout = true; DoLayout(); - SetBestSize(wxDefaultSize); + SetInitialSize(wxDefaultSize); return true; } @@ -819,6 +801,14 @@ bool wxToolBar::PerformAction(const wxControlAction& action, return true; } +/* static */ +wxInputHandler *wxToolBar::GetStdInputHandler(wxInputHandler *handlerDef) +{ + static wxStdToolbarInputHandler s_handler(handlerDef); + + return &s_handler; +} + // ============================================================================ // wxStdToolbarInputHandler implementation // ============================================================================