X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7c808858c9141174809b3a8167c7cd21f184dc4c..f239a20092359e3c914adb79bd39f3f5d2b2e06f:/src/generic/clrpickerg.cpp diff --git a/src/generic/clrpickerg.cpp b/src/generic/clrpickerg.cpp index e0db6bbb01..ffc71547ad 100644 --- a/src/generic/clrpickerg.cpp +++ b/src/generic/clrpickerg.cpp @@ -24,22 +24,19 @@ #pragma hdrstop #endif -#ifndef WX_PRECOMP - #include "wx/window.h" -#endif //WX_PRECOMP +#if wxUSE_COLOURPICKERCTRL #include "wx/clrpicker.h" #include "wx/colordlg.h" +#include "wx/dcmemory.h" // ============================================================================ // implementation // ============================================================================ -#if wxUSE_COLOURPICKERCTRL - wxColourData wxGenericColourButton::ms_data; -IMPLEMENT_DYNAMIC_CLASS(wxGenericColourButton, wxButton) +IMPLEMENT_DYNAMIC_CLASS(wxGenericColourButton, wxBitmapButton) // ---------------------------------------------------------------------------- // wxGenericColourButton @@ -50,16 +47,18 @@ bool wxGenericColourButton::Create( wxWindow *parent, wxWindowID id, const wxSize &size, long style, const wxValidator& validator, const wxString &name) { + m_bitmap = wxBitmap( 60, 13 ); + // create this button - if (!wxButton::Create( parent, id, wxEmptyString, pos, - size, style, validator, name )) + if (!wxBitmapButton::Create( parent, id, m_bitmap, pos, + size, style | wxBU_AUTODRAW, validator, name )) { wxFAIL_MSG( wxT("wxGenericColourButton creation failed") ); return false; } // and handle user clicks on it - Connect(wxEVT_COMMAND_BUTTON_CLICKED, + Connect(GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(wxGenericColourButton::OnButtonClick), NULL, this); @@ -84,7 +83,7 @@ void wxGenericColourButton::InitColourData() void wxGenericColourButton::OnButtonClick(wxCommandEvent& WXUNUSED(ev)) { - // update the wxColouData to be shown in the the dialog + // update the wxColouData to be shown in the dialog ms_data.SetColour(m_colour); // create the colour dialog and display it @@ -102,22 +101,39 @@ void wxGenericColourButton::OnButtonClick(wxCommandEvent& WXUNUSED(ev)) void wxGenericColourButton::UpdateColour() { - if ( !m_colour.Ok() ) + wxMemoryDC dc(m_bitmap); + dc.SetPen( *wxTRANSPARENT_PEN ); + dc.SetBrush( wxBrush(m_colour) ); + dc.DrawRectangle( 0,0,m_bitmap.GetWidth(),m_bitmap.GetHeight() ); + + if ( HasFlag(wxCLRP_SHOW_LABEL) ) { - if ( HasFlag(wxCLRP_SHOW_LABEL) ) - SetLabel(wxEmptyString); - return; + wxColour col( ~m_colour.Red(), ~m_colour.Green(), ~m_colour.Blue() ); + dc.SetTextForeground( col ); + dc.SetFont( GetFont() ); + dc.DrawText( m_colour.GetAsString(wxC2S_HTML_SYNTAX), 0, 0 ); } - // some combinations of the fg/bg colours may be unreadable, so we invert - // the colour to make sure fg colour is different enough from m_colour - wxColour colFg(~m_colour.Red(), ~m_colour.Green(), ~m_colour.Blue()); - - SetForegroundColour(colFg); - SetBackgroundColour(m_colour); + dc.SelectObject( wxNullBitmap ); + SetBitmapLabel( m_bitmap ); +} +wxSize wxGenericColourButton::DoGetBestSize() const +{ + wxSize sz(wxBitmapButton::DoGetBestSize()); +#ifdef __WXMAC__ + sz.y += 6; +#else + sz.y += 2; +#endif + sz.x += 30; if ( HasFlag(wxCLRP_SHOW_LABEL) ) - SetLabel(m_colour.GetAsString(wxC2S_HTML_SYNTAX)); + return sz; + + // if we have no label, then make this button a square + // (like e.g. native GTK version of this control) ??? + // sz.SetWidth(sz.GetHeight()); + return sz; } #endif // wxUSE_COLOURPICKERCTRL