X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/12ed316d02733e7111a6967f6ae41e2c0ceaa57a..0fe5e8fea017ecb73f8aaa8ceb745feb269b3f79:/src/common/tbarbase.cpp diff --git a/src/common/tbarbase.cpp b/src/common/tbarbase.cpp index d904ff9194..e88af6fddb 100644 --- a/src/common/tbarbase.cpp +++ b/src/common/tbarbase.cpp @@ -28,18 +28,15 @@ #pragma hdrstop #endif +#if wxUSE_TOOLBAR + #ifndef WX_PRECOMP - #include "wx/wx.h" + #include "wx/control.h" #endif #include "wx/frame.h" - -// For ::UpdateWindow -#ifdef __WXMSW__ -#include -#endif - -#if wxUSE_TOOLBAR +#include "wx/image.h" +#include "wx/settings.h" #include "wx/tbarbase.h" @@ -47,14 +44,12 @@ // wxWindows macros // ---------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY - BEGIN_EVENT_TABLE(wxToolBarBase, wxControl) - EVT_IDLE(wxToolBarBase::OnIdle) - END_EVENT_TABLE() -#endif - IMPLEMENT_CLASS(wxToolBarBase, wxControl) +BEGIN_EVENT_TABLE(wxToolBarBase, wxControl) + EVT_IDLE(wxToolBarBase::OnIdle) +END_EVENT_TABLE() + #include "wx/listimpl.cpp" WX_DEFINE_LIST(wxToolBarToolsList); @@ -321,6 +316,8 @@ wxToolBarToolBase *wxToolBarBase::FindById(int id) const // found break; } + + tool = NULL; } return tool; @@ -470,7 +467,12 @@ bool wxToolBarBase::OnLeftClick(int id, bool toggleDown) { wxCommandEvent event(wxEVT_COMMAND_TOOL_CLICKED, id); event.SetEventObject(this); - event.SetExtraLong((long) toggleDown); + + // we use SetInt() to make wxCommandEvent::IsChecked() return toggleDown + event.SetInt((int)toggleDown); + + // and SetExtraLong() for backwards compatibility + event.SetExtraLong((long)toggleDown); // Send events to this toolbar instead (and thence up the window hierarchy) GetEventHandler()->ProcessEvent(event); @@ -563,4 +565,64 @@ void wxToolBarBase::DoToolbarUpdates() } } +// Helper function, used by wxCreateGreyedImage + +static void wxGreyOutImage( const wxImage& src, + wxImage& dest, + const wxColour& darkCol, + const wxColour& lightCol, + const wxColour& bgCol ) +{ + // Second attempt, just making things monochrome + int width = src.GetWidth(); + int height = src.GetHeight(); + + int redCur, greenCur, blueCur; + for ( int x = 0; x < width; x++ ) + { + for ( int y = 1; y < height; y++ ) + { + redCur = src.GetRed(x, y); + greenCur = src.GetGreen(x, y); + blueCur = src.GetBlue(x, y); + + // Change light things to the background colour + if ( redCur >= (lightCol.Red() - 50) && greenCur >= (lightCol.Green() - 50) && blueCur >= (lightCol.Blue() - 50) ) + { + dest.SetRGB(x,y, bgCol.Red(), bgCol.Green(), bgCol.Blue()); + } + else if ( redCur == bgCol.Red() && greenCur == bgCol.Green() && blueCur == bgCol.Blue() ) + { + // Leave the background colour as-is + // dest.SetRGB(x,y, bgCol.Red(), bgCol.Green(), bgCol.Blue()); + } + else // if ( redCur <= darkCol.Red() && greenCur <= darkCol.Green() && blueCur <= darkCol.Blue() ) + { + // Change dark things to really dark + dest.SetRGB(x,y, darkCol.Red(), darkCol.Green(), darkCol.Blue()); + } + } + } +} + +/* + * Make a greyed-out image suitable for disabled buttons. + * This code is adapted from wxNewBitmapButton in FL. + */ + +bool wxCreateGreyedImage(const wxImage& in, wxImage& out) +{ + out = in.Copy(); + + // assuming the pixels along the edges are of the background color + wxColour bgCol(in.GetRed(0, 0), in.GetGreen(0, 0), in.GetBlue(0, 0)); + + wxColour darkCol = wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW) ; + wxColour lightCol = wxSystemSettings::GetColour(wxSYS_COLOUR_3DHIGHLIGHT) ; + + wxGreyOutImage(in, out, darkCol, lightCol, bgCol); + + return TRUE; +} + #endif // wxUSE_TOOLBAR