X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0fe5e8fea017ecb73f8aaa8ceb745feb269b3f79..7a21e692d22ec16a5de7dbbb73761d4c4456edaa:/src/univ/themes/gtk.cpp diff --git a/src/univ/themes/gtk.cpp b/src/univ/themes/gtk.cpp index 7761d66acc..2471eca2f9 100644 --- a/src/univ/themes/gtk.cpp +++ b/src/univ/themes/gtk.cpp @@ -6,7 +6,7 @@ // Created: 06.08.00 // RCS-ID: $Id$ // Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // =========================================================================== @@ -48,12 +48,13 @@ #include "wx/notebook.h" #include "wx/spinbutt.h" +#include "wx/toplevel.h" +#include "wx/artprov.h" #include "wx/univ/renderer.h" #include "wx/univ/inphand.h" #include "wx/univ/colschem.h" #include "wx/univ/theme.h" -#include "wx/toplevel.h" class WXDLLEXPORT wxGTKMenuGeometryInfo; @@ -76,7 +77,8 @@ public: virtual void DrawBackground(wxDC& dc, const wxColour& col, const wxRect& rect, - int flags = 0); + int flags = 0, + wxWindow *window = NULL ); virtual void DrawLabel(wxDC& dc, const wxString& label, const wxRect& rect, @@ -163,7 +165,8 @@ public: const wxString& label, const wxBitmap& bitmap, const wxRect& rect, - int flags); + int flags = 0, + long style = 0); virtual void DrawTextLine(wxDC& dc, const wxString& text, @@ -182,21 +185,25 @@ public: virtual void DrawSliderShaft(wxDC& dc, const wxRect& rect, + int lenThumb, wxOrientation orient, int flags = 0, + long style = 0, wxRect *rectShaft = NULL); virtual void DrawSliderThumb(wxDC& dc, const wxRect& rect, wxOrientation orient, - int flags = 0); - virtual void DrawSliderTicks(wxDC& dc, - const wxRect& rect, - const wxSize& sizeThumb, - wxOrientation orient, - int start, - int end, - int step, - int flags) + int flags = 0, + long style = 0); + virtual void DrawSliderTicks(wxDC& WXUNUSED(dc), + const wxRect& WXUNUSED(rect), + int WXUNUSED(lenThumb), + wxOrientation WXUNUSED(orient), + int WXUNUSED(start), + int WXUNUSED(end), + int WXUNUSED(step) = 1, + int WXUNUSED(flags) = 0, + long WXUNUSED(style) = 0) { // we don't have the ticks in GTK version } @@ -255,8 +262,6 @@ public: virtual wxSize GetFrameMinSize(int flags) const; virtual wxSize GetFrameIconSize() const; virtual int HitTestFrame(const wxRect& rect, const wxPoint& pt, int flags) const; - - virtual wxIcon GetStdIcon(int which) const; virtual void GetComboBitmaps(wxBitmap *bmpNormal, wxBitmap *bmpFocus, @@ -305,8 +310,11 @@ public: virtual wxCoord GetSliderDim() const { return 15; } virtual wxCoord GetSliderTickLen() const { return 0; } virtual wxRect GetSliderShaftRect(const wxRect& rect, - wxOrientation orient) const; + int lenThumb, + wxOrientation orient, + long style = 0) const; virtual wxSize GetSliderThumbSize(const wxRect& rect, + int lenThumb, wxOrientation orient) const; virtual wxSize GetProgressBarStep() const { return wxSize(16, 32); } @@ -337,7 +345,8 @@ protected: // draw the background with any colour, not only the default one(s) void DoDrawBackground(wxDC& dc, const wxColour& col, - const wxRect& rect); + const wxRect& rect, + wxWindow *window = NULL); // DrawBorder() helpers: all of them shift and clip the DC after drawing // the border @@ -566,11 +575,23 @@ public: virtual wxColour GetBackground(wxWindow *win) const; }; +// ---------------------------------------------------------------------------- +// wxGTKArtProvider +// ---------------------------------------------------------------------------- + +class wxGTKArtProvider : public wxArtProvider +{ +protected: + virtual wxBitmap CreateBitmap(const wxArtID& id, + const wxArtClient& client, + const wxSize& size); +}; + // ---------------------------------------------------------------------------- // wxGTKTheme // ---------------------------------------------------------------------------- -WX_DEFINE_ARRAY(wxInputHandler *, wxArrayHandlers); +WX_DEFINE_ARRAY_PTR(wxInputHandler *, wxArrayHandlers); class wxGTKTheme : public wxTheme { @@ -579,6 +600,7 @@ public: virtual ~wxGTKTheme(); virtual wxRenderer *GetRenderer(); + virtual wxArtProvider *GetArtProvider(); virtual wxInputHandler *GetInputHandler(const wxString& control); virtual wxColourScheme *GetColourScheme(); @@ -588,6 +610,8 @@ private: wxGTKRenderer *m_renderer; + wxGTKArtProvider *m_artProvider; + // the names of the already created handlers and the handlers themselves // (these arrays are synchronized) wxSortedArrayString m_handlerNames; @@ -615,6 +639,7 @@ wxGTKTheme::wxGTKTheme() m_scheme = NULL; m_renderer = NULL; m_handlerDefault = NULL; + m_artProvider = NULL; } wxGTKTheme::~wxGTKTheme() @@ -629,6 +654,7 @@ wxGTKTheme::~wxGTKTheme() delete m_handlerDefault; delete m_renderer; delete m_scheme; + wxArtProvider::RemoveProvider(m_artProvider); } wxRenderer *wxGTKTheme::GetRenderer() @@ -641,6 +667,16 @@ wxRenderer *wxGTKTheme::GetRenderer() return m_renderer; } +wxArtProvider *wxGTKTheme::GetArtProvider() +{ + if ( !m_artProvider ) + { + m_artProvider = new wxGTKArtProvider; + } + + return m_artProvider; +} + wxColourScheme *wxGTKTheme::GetColourScheme() { if ( !m_scheme ) @@ -739,7 +775,7 @@ wxColour wxGTKColourScheme::GetBackground(wxWindow *win) const col = win->GetBackgroundColour(); } - if ( win->IsContainerWindow() ) + if ( !win->ShouldInheritColours() ) { // doesn't depend on the state if ( !col.Ok() ) @@ -944,7 +980,7 @@ void wxGTKRenderer::DrawAntiRaisedBorder(wxDC& dc, wxRect *rect) void wxGTKRenderer::DrawBorder(wxDC& dc, wxBorder border, const wxRect& rectTotal, - int flags, + int WXUNUSED(flags), wxRect *rectIn) { size_t width; @@ -1298,7 +1334,7 @@ void wxGTKRenderer::DrawCheckItem(wxDC& dc, DrawCheckButton(dc, _T(""), bitmap, rectBitmap, flags & ~wxCONTROL_FOCUSED); wxRect rectLabel = rect; - wxCoord shift = rectBitmap.width + 2*GetCheckItemMargin(); + wxCoord shift = rectBitmap.width + 2*GetCheckItemMargin(); rectLabel.x += shift; rectLabel.width -= shift; DrawItem(dc, label, rectLabel, flags); @@ -1582,6 +1618,10 @@ void wxGTKRenderer::DrawRadioButton(wxDC& dc, dc.SetBackground(*wxLIGHT_GREY_BRUSH); dc.Clear(); DrawRadioBitmap(dc, rect, flags); + + // must unselect the bitmap before setting a mask for it because of the + // MSW limitations + dc.SelectObject(wxNullBitmap); bitmap.SetMask(new wxMask(bitmap, *wxLIGHT_GREY)); } @@ -1593,7 +1633,8 @@ void wxGTKRenderer::DrawToolBarButton(wxDC& dc, const wxString& label, const wxBitmap& bitmap, const wxRect& rectOrig, - int flags) + int flags, + long WXUNUSED(style)) { // we don't draw the separators at all if ( !label.empty() || bitmap.Ok() ) @@ -1622,7 +1663,7 @@ void wxGTKRenderer::DrawToolBarButton(wxDC& dc, // text control // ---------------------------------------------------------------------------- -wxRect wxGTKRenderer::GetTextTotalArea(const wxTextCtrl *text, +wxRect wxGTKRenderer::GetTextTotalArea(const wxTextCtrl * WXUNUSED(text), const wxRect& rect) const { wxRect rectTotal = rect; @@ -1833,13 +1874,14 @@ void wxGTKRenderer::DrawTab(wxDC& dc, // ---------------------------------------------------------------------------- wxSize wxGTKRenderer::GetSliderThumbSize(const wxRect& rect, + int lenThumb, wxOrientation orient) const { static const wxCoord SLIDER_THUMB_LENGTH = 30; wxSize size; - wxRect rectShaft = GetSliderShaftRect(rect, orient); + wxRect rectShaft = GetSliderShaftRect(rect, lenThumb, orient); if ( orient == wxHORIZONTAL ) { size.x = wxMin(SLIDER_THUMB_LENGTH, rectShaft.width); @@ -1855,15 +1897,19 @@ wxSize wxGTKRenderer::GetSliderThumbSize(const wxRect& rect, } wxRect wxGTKRenderer::GetSliderShaftRect(const wxRect& rect, - wxOrientation WXUNUSED(orient)) const + int WXUNUSED(lenThumb), + wxOrientation WXUNUSED(orient), + long WXUNUSED(style)) const { return rect.Deflate(2*BORDER_THICKNESS, 2*BORDER_THICKNESS); } void wxGTKRenderer::DrawSliderShaft(wxDC& dc, const wxRect& rectOrig, - wxOrientation orient, + int WXUNUSED(lenThumb), + wxOrientation WXUNUSED(orient), int flags, + long WXUNUSED(style), wxRect *rectShaft) { wxRect rect = rectOrig; @@ -1890,7 +1936,8 @@ void wxGTKRenderer::DrawSliderShaft(wxDC& dc, void wxGTKRenderer::DrawSliderThumb(wxDC& dc, const wxRect& rectOrig, wxOrientation orient, - int flags) + int WXUNUSED(flags), + long WXUNUSED(style)) { // draw the thumb border wxRect rect = rectOrig; @@ -2108,7 +2155,7 @@ wxMenuGeometryInfo *wxGTKRenderer::GetMenuGeometry(wxWindow *win, widthAccelMax = 0, widthBmpMax = MENU_LEFT_MARGIN; - for ( wxMenuItemList::Node *node = menu.GetMenuItems().GetFirst(); + for ( wxMenuItemList::compatibility_iterator node = menu.GetMenuItems().GetFirst(); node; node = node->GetNext() ) { @@ -2180,15 +2227,16 @@ wxMenuGeometryInfo *wxGTKRenderer::GetMenuGeometry(wxWindow *win, // status bar // ---------------------------------------------------------------------------- -wxSize wxGTKRenderer::GetStatusBarBorders(wxCoord *borderBetweenFields) const +wxSize +wxGTKRenderer::GetStatusBarBorders(wxCoord * WXUNUSED(borderBetweenFields)) const { return wxSize(0, 0); } -void wxGTKRenderer::DrawStatusField(wxDC& dc, - const wxRect& rect, - const wxString& label, - int flags) +void wxGTKRenderer::DrawStatusField(wxDC& WXUNUSED(dc), + const wxRect& WXUNUSED(rect), + const wxString& WXUNUSED(label), + int WXUNUSED(flags)) { } @@ -2256,7 +2304,8 @@ void wxGTKRenderer::GetComboBitmaps(wxBitmap *bmpNormal, void wxGTKRenderer::DoDrawBackground(wxDC& dc, const wxColour& col, - const wxRect& rect) + const wxRect& rect, + wxWindow * WXUNUSED(window)) { wxBrush brush(col, wxSOLID); dc.SetBrush(brush); @@ -2267,10 +2316,11 @@ void wxGTKRenderer::DoDrawBackground(wxDC& dc, void wxGTKRenderer::DrawBackground(wxDC& dc, const wxColour& col, const wxRect& rect, - int flags) + int flags, + wxWindow *window ) { wxColour colBg = col.Ok() ? col : GetBackgroundColour(flags); - DoDrawBackground(dc, colBg, rect); + DoDrawBackground(dc, colBg, rect, window ); } // ---------------------------------------------------------------------------- @@ -2601,7 +2651,7 @@ void wxGTKRenderer::DrawScrollbarThumb(wxDC& dc, void wxGTKRenderer::DrawScrollbarShaft(wxDC& dc, wxOrientation orient, const wxRect& rect, - int flags) + int WXUNUSED(flags)) { wxRect rectBar = rect; DrawThumbBorder(dc, &rectBar, orient); @@ -2707,60 +2757,65 @@ void wxGTKRenderer::AdjustSize(wxSize *size, const wxWindow *window) // top level windows // ---------------------------------------------------------------------------- -void wxGTKRenderer::DrawFrameTitleBar(wxDC& dc, - const wxRect& rect, - const wxString& title, - const wxIcon& icon, - int flags, - int specialButton, - int specialButtonFlag) +void wxGTKRenderer::DrawFrameTitleBar(wxDC& WXUNUSED(dc), + const wxRect& WXUNUSED(rect), + const wxString& WXUNUSED(title), + const wxIcon& WXUNUSED(icon), + int WXUNUSED(flags), + int WXUNUSED(specialButton), + int WXUNUSED(specialButtonFlag)) { } -void wxGTKRenderer::DrawFrameBorder(wxDC& dc, - const wxRect& rect, - int flags) +void wxGTKRenderer::DrawFrameBorder(wxDC& WXUNUSED(dc), + const wxRect& WXUNUSED(rect), + int WXUNUSED(flags)) { } -void wxGTKRenderer::DrawFrameBackground(wxDC& dc, - const wxRect& rect, - int flags) +void wxGTKRenderer::DrawFrameBackground(wxDC& WXUNUSED(dc), + const wxRect& WXUNUSED(rect), + int WXUNUSED(flags)) { } -void wxGTKRenderer::DrawFrameTitle(wxDC& dc, - const wxRect& rect, - const wxString& title, - int flags) +void wxGTKRenderer::DrawFrameTitle(wxDC& WXUNUSED(dc), + const wxRect& WXUNUSED(rect), + const wxString& WXUNUSED(title), + int WXUNUSED(flags)) { } -void wxGTKRenderer::DrawFrameIcon(wxDC& dc, - const wxRect& rect, - const wxIcon& icon, - int flags) +void wxGTKRenderer::DrawFrameIcon(wxDC& WXUNUSED(dc), + const wxRect& WXUNUSED(rect), + const wxIcon& WXUNUSED(icon), + int WXUNUSED(flags)) { } -void wxGTKRenderer::DrawFrameButton(wxDC& dc, - wxCoord x, wxCoord y, - int button, - int flags) +void wxGTKRenderer::DrawFrameButton(wxDC& WXUNUSED(dc), + wxCoord WXUNUSED(x), + wxCoord WXUNUSED(y), + int WXUNUSED(button), + int WXUNUSED(flags)) { } -wxRect wxGTKRenderer::GetFrameClientArea(const wxRect& rect, int flags) const +wxRect +wxGTKRenderer::GetFrameClientArea(const wxRect& rect, + int WXUNUSED(flags)) const { return rect; } -wxSize wxGTKRenderer::GetFrameTotalSize(const wxSize& clientSize, int flags) const +wxSize +wxGTKRenderer::GetFrameTotalSize(const wxSize& clientSize, + int WXUNUSED(flags)) const { return clientSize; } -wxSize wxGTKRenderer::GetFrameMinSize(int flags) const +wxSize wxGTKRenderer::GetFrameMinSize(int WXUNUSED(flags)) const { return wxSize(0,0); } @@ -2770,7 +2825,10 @@ wxSize wxGTKRenderer::GetFrameIconSize() const return wxSize(-1, -1); } -int wxGTKRenderer::HitTestFrame(const wxRect& rect, const wxPoint& pt, int flags) const +int +wxGTKRenderer::HitTestFrame(const wxRect& WXUNUSED(rect), + const wxPoint& WXUNUSED(pt), + int WXUNUSED(flags)) const { return wxHT_TOPLEVEL_CLIENT_AREA; } @@ -2780,7 +2838,7 @@ int wxGTKRenderer::HitTestFrame(const wxRect& rect, const wxPoint& pt, int flags // standard icons // ---------------------------------------------------------------------------- -static char *error_xpm[] = { +static const char *error_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 537 2", " c Gray0", @@ -3371,7 +3429,7 @@ static char *error_xpm[] = { "W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+W+" }; -static char *info_xpm[] = { +static const char *info_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 478 2", " c Gray0", @@ -3904,7 +3962,7 @@ static char *info_xpm[] = { }; /* XPM */ -static char *warning_xpm[] = { +static const char *warning_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 270 2", " c Gray0", @@ -4229,7 +4287,7 @@ static char *warning_xpm[] = { }; /* XPM */ -static char *question_xpm[] = { +static const char *question_xpm[] = { /* columns rows colors chars-per-pixel */ "48 48 101 2", " c Gray0", @@ -4384,27 +4442,19 @@ static char *question_xpm[] = { "$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$." }; - -wxIcon wxGTKRenderer::GetStdIcon(int which) const +wxBitmap wxGTKArtProvider::CreateBitmap(const wxArtID& id, + const wxArtClient& WXUNUSED(client), + const wxSize& WXUNUSED(size)) { - switch(which) - { - case wxICON_INFORMATION: - return wxIcon(info_xpm); - - case wxICON_QUESTION: - return wxIcon(question_xpm); - - case wxICON_EXCLAMATION: - return wxIcon(warning_xpm); - - default: - wxFAIL_MSG(wxT("requested non existent standard icon")); - // still fall through - - case wxICON_HAND: - return wxIcon(error_xpm); - } + if ( id == wxART_INFORMATION ) + return wxBitmap(info_xpm); + if ( id == wxART_ERROR ) + return wxBitmap(error_xpm); + if ( id == wxART_WARNING ) + return wxBitmap(warning_xpm); + if ( id == wxART_QUESTION ) + return wxBitmap(question_xpm); + return wxNullBitmap; } @@ -4421,9 +4471,9 @@ wxGTKInputHandler::wxGTKInputHandler(wxGTKRenderer *renderer) m_renderer = renderer; } -bool wxGTKInputHandler::HandleKey(wxInputConsumer *control, - const wxKeyEvent& event, - bool pressed) +bool wxGTKInputHandler::HandleKey(wxInputConsumer * WXUNUSED(control), + const wxKeyEvent& WXUNUSED(event), + bool WXUNUSED(pressed)) { return FALSE; }