X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/04dbb6467be8f564f380bd9a1106fbdecbd26a98..5268c5a32bbe68b834abeaa89c8cfb2099d50d2e:/src/common/tbarbase.cpp?ds=sidebyside diff --git a/src/common/tbarbase.cpp b/src/common/tbarbase.cpp index dbce9ffff6..93d6bbfc3f 100644 --- a/src/common/tbarbase.cpp +++ b/src/common/tbarbase.cpp @@ -31,14 +31,12 @@ #if wxUSE_TOOLBAR #ifndef WX_PRECOMP + #include "wx/control.h" #endif #include "wx/frame.h" - -// For ::UpdateWindow -#ifdef __WXMSW__ -#include -#endif +#include "wx/image.h" +#include "wx/settings.h" #include "wx/tbarbase.h" @@ -318,6 +316,8 @@ wxToolBarToolBase *wxToolBarBase::FindById(int id) const // found break; } + + tool = NULL; } return tool; @@ -505,15 +505,23 @@ void wxToolBarBase::OnMouseEnter(int id) (void)GetEventHandler()->ProcessEvent(event); - wxToolBarToolBase *tool = FindById(id); - if ( !tool || !tool->GetLongHelp() ) - return; - wxFrame *frame = wxDynamicCast(GetParent(), wxFrame); if ( !frame ) return; - frame->SetStatusText(tool->GetLongHelp()); + wxString helpstring; + + if ( id != -1 ) + { + wxToolBarToolBase *tool = FindById(id); + if ( tool ) + helpstring = tool->GetLongHelp(); + } + + // set the status text anyhow, even if the string is empty: this ensures + // that it is cleared when the mouse leaves the toolbar or enters a tool + // without help + frame->SetStatusText(helpstring); } // ---------------------------------------------------------------------------- @@ -565,4 +573,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