X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1b488c0eeb9348540f2c9733ff9d7513e06c3cb9..b09bda689c8525886d217a9b171b354391cd6d78:/src/univ/themes/gtk.cpp?ds=sidebyside diff --git a/src/univ/themes/gtk.cpp b/src/univ/themes/gtk.cpp index 785866b58e..4a0bcfdcc8 100644 --- a/src/univ/themes/gtk.cpp +++ b/src/univ/themes/gtk.cpp @@ -30,6 +30,7 @@ #include "wx/dcmemory.h" #include "wx/window.h" + #include "wx/bmpbuttn.h" #include "wx/button.h" #include "wx/checkbox.h" #include "wx/listbox.h" @@ -52,7 +53,7 @@ // constants (to be removed, for testing only) // ---------------------------------------------------------------------------- -static const size_t BORDER_THICKNESS = 10; +static const size_t BORDER_THICKNESS = 1; // ---------------------------------------------------------------------------- // wxGTKRenderer: draw the GUI elements in GTK style @@ -204,6 +205,37 @@ public: wxCoord y, const wxMenuGeometryInfo& geomInfo); #endif + + virtual void DrawFrameTitleBar(wxDC& dc, + const wxRect& rect, + const wxString& title, + const wxIcon& icon, + int flags, + int pressedButtons = 0); + virtual void DrawFrameBorder(wxDC& dc, + const wxRect& rect, + int flags); + virtual void DrawFrameBackground(wxDC& dc, + const wxRect& rect, + int flags); + virtual void DrawFrameTitle(wxDC& dc, + const wxRect& rect, + const wxString& title, + int flags); + virtual void DrawFrameIcon(wxDC& dc, + const wxRect& rect, + const wxIcon& icon, + int flags); + virtual void DrawFrameButton(wxDC& dc, + wxCoord x, wxCoord y, + int button, + int flags = 0); + + // titlebars + virtual wxRect GetFrameClientArea(const wxRect& rect, int flags) const; + virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const; + virtual wxSize GetFrameIconSize() const; + virtual void GetComboBitmaps(wxBitmap *bmpNormal, wxBitmap *bmpFocus, wxBitmap *bmpPressed, @@ -418,12 +450,12 @@ class wxGTKInputHandler : public wxInputHandler public: wxGTKInputHandler(wxGTKRenderer *renderer); - virtual bool HandleKey(wxControl *control, + virtual bool HandleKey(wxInputConsumer *control, const wxKeyEvent& event, bool pressed); - virtual bool HandleMouse(wxControl *control, + virtual bool HandleMouse(wxInputConsumer *control, const wxMouseEvent& event); - virtual bool HandleMouseMove(wxControl *control, const wxMouseEvent& event); + virtual bool HandleMouseMove(wxInputConsumer *control, const wxMouseEvent& event); protected: wxGTKRenderer *m_renderer; @@ -469,7 +501,7 @@ public: wxGTKCheckboxInputHandler(wxInputHandler *handler) : wxStdCheckboxInputHandler(handler) { } - virtual bool HandleKey(wxControl *control, + virtual bool HandleKey(wxInputConsumer *control, const wxKeyEvent& event, bool pressed); }; @@ -480,7 +512,7 @@ public: wxGTKTextCtrlInputHandler(wxInputHandler *handler) : wxStdTextCtrlInputHandler(handler) { } - virtual bool HandleKey(wxControl *control, + virtual bool HandleKey(wxInputConsumer *control, const wxKeyEvent& event, bool pressed); }; @@ -865,7 +897,10 @@ void wxGTKRenderer::DrawBorder(wxDC& dc, break; case wxBORDER_STATIC: - DrawShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight); + for ( width = 0; width < BORDER_THICKNESS; width++ ) + { + DrawShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight); + } break; case wxBORDER_RAISED: @@ -876,13 +911,19 @@ void wxGTKRenderer::DrawBorder(wxDC& dc, break; case wxBORDER_DOUBLE: - DrawShadedRect(dc, &rect, m_penLightGrey, m_penBlack); - DrawShadedRect(dc, &rect, m_penHighlight, m_penDarkGrey); - DrawRect(dc, &rect, m_penLightGrey); + for ( width = 0; width < BORDER_THICKNESS; width++ ) + { + DrawShadedRect(dc, &rect, m_penLightGrey, m_penBlack); + DrawShadedRect(dc, &rect, m_penHighlight, m_penDarkGrey); + DrawRect(dc, &rect, m_penLightGrey); + } break; case wxBORDER_SIMPLE: - DrawRect(dc, &rect, m_penBlack); + for ( width = 0; width < BORDER_THICKNESS; width++ ) + { + DrawRect(dc, &rect, m_penBlack); + } break; default: @@ -910,11 +951,11 @@ wxRect wxGTKRenderer::GetBorderDimensions(wxBorder border) const case wxBORDER_SIMPLE: case wxBORDER_STATIC: - width = 1; + width = BORDER_THICKNESS; break; case wxBORDER_DOUBLE: - width = 3; + width = 3*BORDER_THICKNESS; break; default: @@ -954,15 +995,18 @@ void wxGTKRenderer::DrawTextBorder(wxDC& dc, { wxRect rect = rectOrig; - if ( flags & wxCONTROL_FOCUSED ) - { - DrawRect(dc, &rect, m_penBlack); - DrawAntiShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight); - } - else // !focused + if ( border != wxBORDER_NONE ) { - DrawAntiShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight); - DrawAntiShadedRect(dc, &rect, m_penBlack, m_penHighlight); + if ( flags & wxCONTROL_FOCUSED ) + { + DrawRect(dc, &rect, m_penBlack); + DrawAntiShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight); + } + else // !focused + { + DrawAntiShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight); + DrawAntiShadedRect(dc, &rect, m_penBlack, m_penHighlight); + } } if ( rectIn ) @@ -980,8 +1024,12 @@ void wxGTKRenderer::DrawButtonBorder(wxDC& dc, { // button pressed: draw a black border around it and an inward shade DrawRect(dc, &rect, m_penBlack); - DrawAntiShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight); - DrawAntiShadedRect(dc, &rect, m_penBlack, m_penDarkGrey); + + for ( size_t width = 0; width < BORDER_THICKNESS; width++ ) + { + DrawAntiShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight); + DrawAntiShadedRect(dc, &rect, m_penBlack, m_penDarkGrey); + } } else { @@ -999,10 +1047,13 @@ void wxGTKRenderer::DrawButtonBorder(wxDC& dc, } // now draw a normal button - DrawShadedRect(dc, &rect, m_penHighlight, m_penBlack); - DrawAntiShadedRect(dc, &rect, - wxPen(GetBackgroundColour(flags), 0, wxSOLID), - m_penDarkGrey); + for ( size_t width = 0; width < BORDER_THICKNESS; width++ ) + { + DrawShadedRect(dc, &rect, m_penHighlight, m_penBlack); + DrawAntiShadedRect(dc, &rect, + wxPen(GetBackgroundColour(flags), 0, wxSOLID), + m_penDarkGrey); + } } if ( rectIn ) @@ -1472,13 +1523,11 @@ void wxGTKRenderer::DrawRadioButton(wxDC& dc, // text control // ---------------------------------------------------------------------------- -static const int TEXT_BORDER = 2; - wxRect wxGTKRenderer::GetTextTotalArea(const wxTextCtrl *text, const wxRect& rect) { wxRect rectTotal = rect; - rectTotal.Inflate(TEXT_BORDER); + rectTotal.Inflate(2*BORDER_THICKNESS); return rectTotal; } @@ -1487,7 +1536,7 @@ wxRect wxGTKRenderer::GetTextClientArea(const wxTextCtrl *text, wxCoord *extraSpaceBeyond) { wxRect rectText = rect; - rectText.Inflate(-TEXT_BORDER); + rectText.Inflate(-2*BORDER_THICKNESS); if ( text->WrapLines() ) { @@ -2280,18 +2329,30 @@ int wxGTKRenderer::PixelToScrollbar(const wxScrollBar *scrollbar, void wxGTKRenderer::AdjustSize(wxSize *size, const wxWindow *window) { - if ( wxDynamicCast(window, wxButton) ) +#if wxUSE_BMPBUTTON + if ( wxDynamicCast(window, wxBitmapButton) ) { - // TODO: this is ad hoc... - size->x += 3*window->GetCharWidth(); - wxCoord minBtnHeight = 18; - if ( size->y < minBtnHeight ) - size->y = minBtnHeight; - - // button border width + size->x += 4; size->y += 4; - } - else if ( wxDynamicCast(window, wxScrollBar) ) + } else +#endif // wxUSE_BMPBUTTON +#if wxUSE_BUTTON + if ( wxDynamicCast(window, wxButton) ) + { + if ( !(window->GetWindowStyle() & wxBU_EXACTFIT) ) + { + // TODO: this is ad hoc... + size->x += 3*window->GetCharWidth(); + wxCoord minBtnHeight = 18; + if ( size->y < minBtnHeight ) + size->y = minBtnHeight; + + // button border width + size->y += 4; + } + } else +#endif wxUSE_BUTTON + if ( wxDynamicCast(window, wxScrollBar) ) { // we only set the width of vert scrollbars and height of the // horizontal ones @@ -2309,6 +2370,69 @@ 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 pressedButtons = 0) +{ +} + +void wxGTKRenderer::DrawFrameBorder(wxDC& dc, + const wxRect& rect, + int flags) +{ +} + +void wxGTKRenderer::DrawFrameBackground(wxDC& dc, + const wxRect& rect, + int flags) +{ +} + +void wxGTKRenderer::DrawFrameTitle(wxDC& dc, + const wxRect& rect, + const wxString& title, + int flags) +{ +} + +void wxGTKRenderer::DrawFrameIcon(wxDC& dc, + const wxRect& rect, + const wxIcon& icon, + int flags) +{ +} + +void wxGTKRenderer::DrawFrameButton(wxDC& dc, + wxCoord x, wxCoord y, + int button, + int flags = 0) +{ +} + +wxRect wxGTKRenderer::GetFrameClientArea(const wxRect& rect, int flags) const +{ + return rect; +} + +wxSize wxGTKRenderer::GetFrameTotalSize(const wxSize& clientSize, int flags) const +{ + return clientSize; +} + +wxSize wxGTKRenderer::GetFrameIconSize() const +{ + return wxSize(-1, -1); +} + + + // ============================================================================ // wxInputHandler // ============================================================================ @@ -2322,20 +2446,20 @@ wxGTKInputHandler::wxGTKInputHandler(wxGTKRenderer *renderer) m_renderer = renderer; } -bool wxGTKInputHandler::HandleKey(wxControl *control, +bool wxGTKInputHandler::HandleKey(wxInputConsumer *control, const wxKeyEvent& event, bool pressed) { return FALSE; } -bool wxGTKInputHandler::HandleMouse(wxControl *control, +bool wxGTKInputHandler::HandleMouse(wxInputConsumer *control, const wxMouseEvent& event) { // clicking on the control gives it focus - if ( event.ButtonDown() ) + if ( event.ButtonDown() && wxWindow::FindFocus() != control->GetInputWindow() ) { - control->SetFocus(); + control->GetInputWindow()->SetFocus(); return TRUE; } @@ -2343,16 +2467,16 @@ bool wxGTKInputHandler::HandleMouse(wxControl *control, return FALSE; } -bool wxGTKInputHandler::HandleMouseMove(wxControl *control, +bool wxGTKInputHandler::HandleMouseMove(wxInputConsumer *control, const wxMouseEvent& event) { if ( event.Entering() ) { - control->SetCurrent(TRUE); + control->GetInputWindow()->SetCurrent(TRUE); } else if ( event.Leaving() ) { - control->SetCurrent(FALSE); + control->GetInputWindow()->SetCurrent(FALSE); } else { @@ -2366,7 +2490,7 @@ bool wxGTKInputHandler::HandleMouseMove(wxControl *control, // wxGTKCheckboxInputHandler // ---------------------------------------------------------------------------- -bool wxGTKCheckboxInputHandler::HandleKey(wxControl *control, +bool wxGTKCheckboxInputHandler::HandleKey(wxInputConsumer *control, const wxKeyEvent& event, bool pressed) { @@ -2388,7 +2512,7 @@ bool wxGTKCheckboxInputHandler::HandleKey(wxControl *control, // wxGTKTextCtrlInputHandler // ---------------------------------------------------------------------------- -bool wxGTKTextCtrlInputHandler::HandleKey(wxControl *control, +bool wxGTKTextCtrlInputHandler::HandleKey(wxInputConsumer *control, const wxKeyEvent& event, bool pressed) {