]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/bmpbtncmn.cpp
use common bottleneck
[wxWidgets.git] / src / common / bmpbtncmn.cpp
index 821f2315e26ad254919f0cc843a58ea0f28dc539..ae06c723ef6270b88ee969547e0a80ab7ff258b2 100644 (file)
-/////////////////////////////////////////////////////////////////////////////\r
-// Name:        src/common/bmpbtncmn.cpp\r
-// Purpose:     wxBitmapButton common code\r
-// Author:      Julian Smart\r
-// Modified by:\r
-// Created:     04/01/98\r
-// RCS-ID:      $Id: bmpbuttn.cpp 45338 2007-04-08 22:18:35Z VZ $\r
-// Copyright:   (c) Julian Smart\r
-// Licence:     wxWindows licence\r
-/////////////////////////////////////////////////////////////////////////////\r
-\r
-// For compilers that support precompilation, includes "wx.h".\r
-#include "wx/wxprec.h"\r
-\r
-#ifdef __BORLANDC__\r
-    #pragma hdrstop\r
-#endif\r
-\r
-#if wxUSE_BMPBUTTON\r
-\r
-#include "wx/bmpbuttn.h"\r
-\r
-#ifndef WX_PRECOMP\r
-    #include "wx/log.h"\r
-    #include "wx/dcmemory.h"\r
-    #include "wx/image.h"\r
-#endif\r
-\r
-// ----------------------------------------------------------------------------\r
-// XTI\r
-// ----------------------------------------------------------------------------\r
-\r
-wxDEFINE_FLAGS( wxBitmapButtonStyle )\r
-wxBEGIN_FLAGS( wxBitmapButtonStyle )\r
-    // new style border flags, we put them first to\r
-    // use them for streaming out\r
-    wxFLAGS_MEMBER(wxBORDER_SIMPLE)\r
-    wxFLAGS_MEMBER(wxBORDER_SUNKEN)\r
-    wxFLAGS_MEMBER(wxBORDER_DOUBLE)\r
-    wxFLAGS_MEMBER(wxBORDER_RAISED)\r
-    wxFLAGS_MEMBER(wxBORDER_STATIC)\r
-    wxFLAGS_MEMBER(wxBORDER_NONE)\r
-\r
-    // old style border flags\r
-    wxFLAGS_MEMBER(wxSIMPLE_BORDER)\r
-    wxFLAGS_MEMBER(wxSUNKEN_BORDER)\r
-    wxFLAGS_MEMBER(wxDOUBLE_BORDER)\r
-    wxFLAGS_MEMBER(wxRAISED_BORDER)\r
-    wxFLAGS_MEMBER(wxSTATIC_BORDER)\r
-    wxFLAGS_MEMBER(wxBORDER)\r
-\r
-    // standard window styles\r
-    wxFLAGS_MEMBER(wxTAB_TRAVERSAL)\r
-    wxFLAGS_MEMBER(wxCLIP_CHILDREN)\r
-    wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW)\r
-    wxFLAGS_MEMBER(wxWANTS_CHARS)\r
-    wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE)\r
-    wxFLAGS_MEMBER(wxALWAYS_SHOW_SB )\r
-    wxFLAGS_MEMBER(wxVSCROLL)\r
-    wxFLAGS_MEMBER(wxHSCROLL)\r
-\r
-    wxFLAGS_MEMBER(wxBU_AUTODRAW)\r
-    wxFLAGS_MEMBER(wxBU_LEFT)\r
-    wxFLAGS_MEMBER(wxBU_RIGHT)\r
-    wxFLAGS_MEMBER(wxBU_TOP)\r
-    wxFLAGS_MEMBER(wxBU_BOTTOM)\r
-wxEND_FLAGS( wxBitmapButtonStyle )\r
-\r
-wxIMPLEMENT_DYNAMIC_CLASS_XTI(wxBitmapButton, wxButton, "wx/bmpbuttn.h")\r
-\r
-wxBEGIN_PROPERTIES_TABLE(wxBitmapButton)\r
-    wxPROPERTY_FLAGS( WindowStyle, wxBitmapButtonStyle, long, \\r
-                      SetWindowStyleFlag, GetWindowStyleFlag, \\r
-                      wxEMPTY_PARAMETER_VALUE, 0 /*flags*/, wxT("Helpstring"), \\r
-                      wxT("group")) // style\r
-wxEND_PROPERTIES_TABLE()\r
-\r
-wxEMPTY_HANDLERS_TABLE(wxBitmapButton)\r
-\r
-wxCONSTRUCTOR_5( wxBitmapButton, wxWindow*, Parent, wxWindowID, Id, \\r
-                 wxBitmap, Bitmap, wxPoint, Position, wxSize, Size )\r
-\r
-/*\r
-TODO PROPERTIES :\r
-\r
-long "style" , wxBU_AUTODRAW\r
-bool "default" , 0\r
-bitmap "selected" ,\r
-bitmap "focus" ,\r
-bitmap "disabled" ,\r
-*/\r
-\r
-#endif // wxUSE_BMPBUTTON\r
+/////////////////////////////////////////////////////////////////////////////
+// Name:        src/common/bmpbtncmn.cpp
+// Purpose:     wxBitmapButton common code
+// Author:      Julian Smart
+// Modified by:
+// Created:     04/01/98
+// RCS-ID:      $Id$
+// Copyright:   (c) Julian Smart
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#if wxUSE_BMPBUTTON
+
+#include "wx/bmpbuttn.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/log.h"
+    #include "wx/dcmemory.h"
+    #include "wx/image.h"
+#endif
+
+#include "wx/artprov.h"
+#include "wx/renderer.h"
+
+// ----------------------------------------------------------------------------
+// XTI
+// ----------------------------------------------------------------------------
+
+wxDEFINE_FLAGS( wxBitmapButtonStyle )
+wxBEGIN_FLAGS( wxBitmapButtonStyle )
+    // new style border flags, we put them first to
+    // use them for streaming out
+    wxFLAGS_MEMBER(wxBORDER_SIMPLE)
+    wxFLAGS_MEMBER(wxBORDER_SUNKEN)
+    wxFLAGS_MEMBER(wxBORDER_DOUBLE)
+    wxFLAGS_MEMBER(wxBORDER_RAISED)
+    wxFLAGS_MEMBER(wxBORDER_STATIC)
+    wxFLAGS_MEMBER(wxBORDER_NONE)
+
+    // old style border flags
+    wxFLAGS_MEMBER(wxSIMPLE_BORDER)
+    wxFLAGS_MEMBER(wxSUNKEN_BORDER)
+    wxFLAGS_MEMBER(wxDOUBLE_BORDER)
+    wxFLAGS_MEMBER(wxRAISED_BORDER)
+    wxFLAGS_MEMBER(wxSTATIC_BORDER)
+    wxFLAGS_MEMBER(wxBORDER)
+
+    // standard window styles
+    wxFLAGS_MEMBER(wxTAB_TRAVERSAL)
+    wxFLAGS_MEMBER(wxCLIP_CHILDREN)
+    wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW)
+    wxFLAGS_MEMBER(wxWANTS_CHARS)
+    wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE)
+    wxFLAGS_MEMBER(wxALWAYS_SHOW_SB )
+    wxFLAGS_MEMBER(wxVSCROLL)
+    wxFLAGS_MEMBER(wxHSCROLL)
+
+    wxFLAGS_MEMBER(wxBU_AUTODRAW)
+    wxFLAGS_MEMBER(wxBU_LEFT)
+    wxFLAGS_MEMBER(wxBU_RIGHT)
+    wxFLAGS_MEMBER(wxBU_TOP)
+    wxFLAGS_MEMBER(wxBU_BOTTOM)
+wxEND_FLAGS( wxBitmapButtonStyle )
+
+wxIMPLEMENT_DYNAMIC_CLASS_XTI(wxBitmapButton, wxButton, "wx/bmpbuttn.h")
+
+wxBEGIN_PROPERTIES_TABLE(wxBitmapButton)
+    wxPROPERTY_FLAGS( WindowStyle, wxBitmapButtonStyle, long, \
+                      SetWindowStyleFlag, GetWindowStyleFlag, \
+                      wxEMPTY_PARAMETER_VALUE, 0 /*flags*/, wxT("Helpstring"), \
+                      wxT("group")) // style
+wxEND_PROPERTIES_TABLE()
+
+wxEMPTY_HANDLERS_TABLE(wxBitmapButton)
+
+wxCONSTRUCTOR_5( wxBitmapButton, wxWindow*, Parent, wxWindowID, Id, \
+                 wxBitmap, Bitmap, wxPoint, Position, wxSize, Size )
+
+/*
+TODO PROPERTIES :
+
+long "style" , wxBU_AUTODRAW
+bool "default" , 0
+bitmap "selected" ,
+bitmap "focus" ,
+bitmap "disabled" ,
+*/
+
+namespace
+{
+
+#ifdef wxHAS_DRAW_TITLE_BAR_BITMAP
+
+wxBitmap
+GetCloseButtonBitmap(wxWindow *win,
+                     const wxSize& size,
+                     const wxColour& colBg,
+                     int flags = 0)
+{
+    wxBitmap bmp(size);
+    wxMemoryDC dc(bmp);
+    dc.SetBackground(colBg);
+    dc.Clear();
+    wxRendererNative::Get().
+        DrawTitleBarBitmap(win, dc, size, wxTITLEBAR_BUTTON_CLOSE, flags);
+    return bmp;
+}
+
+#endif // wxHAS_DRAW_TITLE_BAR_BITMAP
+
+} // anonymous namespace
+
+/* static */
+wxBitmapButton*
+wxBitmapButtonBase::NewCloseButton(wxWindow* parent, wxWindowID winid)
+{
+    wxCHECK_MSG( parent, NULL, wxS("Must have a valid parent") );
+
+    const wxColour colBg = parent->GetBackgroundColour();
+
+#ifdef wxHAS_DRAW_TITLE_BAR_BITMAP
+    const wxSize sizeBmp = wxArtProvider::GetSizeHint(wxART_BUTTON);
+    wxBitmap bmp = GetCloseButtonBitmap(parent, sizeBmp, colBg);
+#else // !wxHAS_DRAW_TITLE_BAR_BITMAP
+    wxBitmap bmp = wxArtProvider::GetBitmap(wxART_CLOSE, wxART_BUTTON);
+#endif // wxHAS_DRAW_TITLE_BAR_BITMAP
+
+    wxBitmapButton* const button = new wxBitmapButton
+                                       (
+                                        parent,
+                                        winid,
+                                        bmp,
+                                        wxDefaultPosition,
+                                        wxDefaultSize,
+                                        wxBORDER_NONE
+                                       );
+
+#ifdef wxHAS_DRAW_TITLE_BAR_BITMAP
+    button->SetBitmapPressed(
+        GetCloseButtonBitmap(parent, sizeBmp, colBg, wxCONTROL_PRESSED));
+
+    button->SetBitmapCurrent(
+        GetCloseButtonBitmap(parent, sizeBmp, colBg, wxCONTROL_CURRENT));
+#endif // wxHAS_DRAW_TITLE_BAR_BITMAP
+
+    // The button should blend with its parent background.
+    button->SetBackgroundColour(colBg);
+
+    return button;
+}
+
+#endif // wxUSE_BMPBUTTON