⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtk.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
///////////////////////////////////////////////////////////////////////////////// Name:        src/univ/themes/gtk.cpp// Purpose:     wxUniversal theme implementing GTK-like LNF// Author:      Vadim Zeitlin// Modified by:// Created:     06.08.00// RCS-ID:      $Id: gtk.cpp,v 1.68 2006/10/30 12:33:24 VS Exp $// Copyright:   (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)// Licence:     wxWindows licence///////////////////////////////////////////////////////////////////////////////// ===========================================================================// declarations// ===========================================================================// ---------------------------------------------------------------------------// headers// ---------------------------------------------------------------------------// for compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif#include "wx/univ/theme.h"#if wxUSE_THEME_GTK#ifndef WX_PRECOMP    #include "wx/intl.h"    #include "wx/log.h"    #include "wx/dcmemory.h"    #include "wx/window.h"    #include "wx/menu.h"    #include "wx/bmpbuttn.h"    #include "wx/button.h"    #include "wx/checkbox.h"    #include "wx/listbox.h"    #include "wx/checklst.h"    #include "wx/combobox.h"    #include "wx/scrolbar.h"    #include "wx/slider.h"    #include "wx/textctrl.h"    #include "wx/toolbar.h"    #include "wx/statusbr.h"    #include "wx/settings.h"    #include "wx/toplevel.h"    #include "wx/image.h"#endif // WX_PRECOMP#include "wx/notebook.h"#include "wx/spinbutt.h"#include "wx/artprov.h"#ifdef wxUSE_TOGGLEBTN#include "wx/tglbtn.h"#endif // wxUSE_TOGGLEBTN#include "wx/univ/stdrend.h"#include "wx/univ/inpcons.h"#include "wx/univ/inphand.h"#include "wx/univ/colschem.h"class WXDLLEXPORT wxGTKMenuGeometryInfo;// ----------------------------------------------------------------------------// constants// ----------------------------------------------------------------------------// standard border sizestatic const int BORDER_THICKNESS = 2;// ----------------------------------------------------------------------------// wxGTKRenderer: draw the GUI elements in GTK style// ----------------------------------------------------------------------------class wxGTKRenderer : public wxStdRenderer{public:    wxGTKRenderer(const wxColourScheme *scheme);    // wxRenderer methods    virtual void DrawFocusRect(wxDC& dc, const wxRect& rect, int flags = 0);    virtual void DrawTextBorder(wxDC& dc,                                wxBorder border,                                const wxRect& rect,                                int flags = 0,                                wxRect *rectIn = NULL);    virtual void DrawButtonLabel(wxDC& dc,                                 const wxString& label,                                 const wxBitmap& image,                                 const wxRect& rect,                                 int flags,                                 int alignment,                                 int indexAccel,                                 wxRect *rectBounds);    virtual void DrawButtonBorder(wxDC& dc,                                  const wxRect& rect,                                  int flags = 0,                                  wxRect *rectIn = NULL);    virtual void DrawArrow(wxDC& dc,                           wxDirection dir,                           const wxRect& rect,                           int flags = 0);    virtual void DrawScrollbarArrow(wxDC& dc,                                    wxDirection dir,                                    const wxRect& rect,                                    int flags = 0);    virtual void DrawScrollbarThumb(wxDC& dc,                                    wxOrientation orient,                                    const wxRect& rect,                                    int flags = 0);    virtual void DrawScrollbarShaft(wxDC& dc,                                    wxOrientation orient,                                    const wxRect& rect,                                    int flags = 0);#if wxUSE_TOOLBAR    virtual void DrawToolBarButton(wxDC& dc,                                   const wxString& label,                                   const wxBitmap& bitmap,                                   const wxRect& rect,                                   int flags = 0,                                   long style = 0,                                   int tbarStyle = 0);#endif // wxUSE_TOOLBAR#if wxUSE_TEXTCTRL    virtual void DrawLineWrapMark(wxDC& dc, const wxRect& rect);#endif // wxUSE_TEXTCTRL#if wxUSE_NOTEBOOK    virtual void DrawTab(wxDC& dc,                         const wxRect& rect,                         wxDirection dir,                         const wxString& label,                         const wxBitmap& bitmap = wxNullBitmap,                         int flags = 0,                         int indexAccel = -1);#endif // wxUSE_NOTEBOOK#if wxUSE_SLIDER    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,                                 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    }#endif // wxUSE_SLIDER#if wxUSE_MENUS    virtual void DrawMenuBarItem(wxDC& dc,                                 const wxRect& rect,                                 const wxString& label,                                 int flags = 0,                                 int indexAccel = -1);    virtual void DrawMenuItem(wxDC& dc,                              wxCoord y,                              const wxMenuGeometryInfo& geometryInfo,                              const wxString& label,                              const wxString& accel,                              const wxBitmap& bitmap = wxNullBitmap,                              int flags = 0,                              int indexAccel = -1);    virtual void DrawMenuSeparator(wxDC& dc,                                   wxCoord y,                                   const wxMenuGeometryInfo& geomInfo);#endif // wxUSE_MENUS    virtual void GetComboBitmaps(wxBitmap *bmpNormal,                                 wxBitmap *bmpFocus,                                 wxBitmap *bmpPressed,                                 wxBitmap *bmpDisabled);    virtual void AdjustSize(wxSize *size, const wxWindow *window);    // geometry and hit testing#if wxUSE_SCROLLBAR    virtual wxSize GetScrollbarArrowSize() const        { return m_sizeScrollbarArrow; }#endif // wxUSE_SCROLLBAR    virtual wxSize GetCheckBitmapSize() const        { return wxSize(10, 10); }    virtual wxSize GetRadioBitmapSize() const        { return wxSize(11, 11); }    virtual wxCoord GetCheckItemMargin() const        { return 2; }#if wxUSE_TOOLBAR    virtual wxSize GetToolBarButtonSize(wxCoord *separator) const        { if ( separator ) *separator = 5; return wxSize(16, 15); }    virtual wxSize GetToolBarMargin() const        { return wxSize(6, 6); }#endif // wxUSE_TOOLBAR#if wxUSE_TEXTCTRL    virtual wxRect GetTextClientArea(const wxTextCtrl *text,                                     const wxRect& rect,                                     wxCoord *extraSpaceBeyond) const;#endif // wxUSE_TEXTCTRL#if wxUSE_NOTEBOOK    virtual wxSize GetTabIndent() const { return wxSize(2, 2); }    virtual wxSize GetTabPadding() const { return wxSize(6, 6); }#endif // wxUSE_NOTEBOOK#if wxUSE_SLIDER    virtual wxCoord GetSliderDim() const { return 15; }    virtual wxCoord GetSliderTickLen() const { return 0; }    virtual wxRect GetSliderShaftRect(const wxRect& rect,                                      int lenThumb,                                      wxOrientation orient,                                      long style = 0) const;    virtual wxSize GetSliderThumbSize(const wxRect& rect,                                      int lenThumb,                                      wxOrientation orient) const;#endif // wxUSE_SLIDER    virtual wxSize GetProgressBarStep() const { return wxSize(16, 32); }#if wxUSE_MENUS    virtual wxSize GetMenuBarItemSize(const wxSize& sizeText) const;    virtual wxMenuGeometryInfo *GetMenuGeometry(wxWindow *win,                                                const wxMenu& menu) const;#endif // wxUSE_MENUS    // helpers for "wxBitmap wxColourScheme::Get()"    void DrawCheckBitmap(wxDC& dc, const wxRect& rect);    void DrawUncheckBitmap(wxDC& dc, const wxRect& rect, bool isPressed);    void DrawUndeterminedBitmap(wxDC& dc, const wxRect& rect, bool isPressed);protected:    // overridden wxStdRenderer methods    virtual void DrawSunkenBorder(wxDC& dc, wxRect *rect);    virtual void DrawFrameWithLabel(wxDC& dc,                                    const wxString& label,                                    const wxRect& rectFrame,                                    const wxRect& rectText,                                    int flags,                                    int alignment,                                    int indexAccel);    virtual void DrawCheckItemBitmap(wxDC& dc,                                     const wxBitmap& bitmap,                                     const wxRect& rect,                                     int flags);    // get the colour to use for background    wxColour GetBackgroundColour(int flags) const    {        if ( flags & wxCONTROL_PRESSED )            return wxSCHEME_COLOUR(m_scheme, CONTROL_PRESSED);        else if ( flags & wxCONTROL_CURRENT )            return wxSCHEME_COLOUR(m_scheme, CONTROL_CURRENT);        else            return wxSCHEME_COLOUR(m_scheme, CONTROL);    }    // as DrawShadedRect() but the pixels in the bottom left and upper right    // border are drawn with the pen1, not pen2    void DrawAntiShadedRect(wxDC& dc, wxRect *rect,                            const wxPen& pen1, const wxPen& pen2);    // used for drawing opened rectangles - draws only one side of it at once    // (and doesn't adjust the rect)    void DrawAntiShadedRectSide(wxDC& dc,                                const wxRect& rect,                                const wxPen& pen1,                                const wxPen& pen2,                                wxDirection dir);    // draw an opened rect for the arrow in given direction    void DrawArrowBorder(wxDC& dc,                         wxRect *rect,                         wxDirection dir);    // draw two sides of the rectangle    void DrawThumbBorder(wxDC& dc,                         wxRect *rect,                         wxOrientation orient);    // just as DrawRaisedBorder() except that the bottom left and up right    // pixels of the interior rect are drawn in another colour (i.e. the inner    // rect is drawn with DrawAntiShadedRect() and not DrawShadedRect())    void DrawAntiRaisedBorder(wxDC& dc, wxRect *rect);    // draw inner GTK shadow    void DrawInnerShadedRect(wxDC& dc, wxRect *rect);    // get the line wrap indicator bitmap    wxBitmap GetLineWrapBitmap() const;    virtual wxBitmap GetCheckBitmap(int flags);    virtual wxBitmap GetRadioBitmap(int flags);    // draw a /\ or \/ line from (x1, y1) to (x2, y1) passing by the point    // ((x1 + x2)/2, y2)    void DrawUpZag(wxDC& dc,                   wxCoord x1, wxCoord x2,                   wxCoord y1, wxCoord y2);    void DrawDownZag(wxDC& dc,                     wxCoord x1, wxCoord x2,                     wxCoord y1, wxCoord y2);    // draw the radio button bitmap for the given state    void DrawRadioBitmap(wxDC& dc, const wxRect& rect, int flags);    // common part of DrawMenuItem() and DrawMenuBarItem()    void DoDrawMenuItem(wxDC& dc,                        const wxRect& rect,                        const wxString& label,                        int flags,                        int indexAccel,                        const wxString& accel = wxEmptyString,                        const wxBitmap& bitmap = wxNullBitmap,                        const wxGTKMenuGeometryInfo *geometryInfo = NULL);    // initialize the combo bitmaps    void InitComboBitmaps();    virtual wxBitmap GetFrameButtonBitmap(FrameButtonType WXUNUSED(type))    {        return wxNullBitmap;    }private:    // data    wxSize m_sizeScrollbarArrow;    // GDI objects    wxPen m_penGrey;    // the checkbox and radio button bitmaps: first row is for the normal,    // second for the pressed state and the columns are for checked, unchecked    // and undeterminated respectively    wxBitmap m_bitmapsCheckbox[IndicatorState_MaxCtrl][IndicatorStatus_Max],             m_bitmapsRadiobtn[IndicatorState_MaxCtrl][IndicatorStatus_Max];    // the line wrap bitmap (drawn at the end of wrapped lines)    wxBitmap m_bmpLineWrap;    // the combobox bitmaps    enum    {        ComboState_Normal,        ComboState_Focus,        ComboState_Pressed,        ComboState_Disabled,        ComboState_Max    };    wxBitmap m_bitmapsCombo[ComboState_Max];};// ----------------------------------------------------------------------------// wxGTKInputHandler and derived classes: process the keyboard and mouse// messages according to GTK standards// ----------------------------------------------------------------------------class wxGTKInputHandler : public wxInputHandler{public:    wxGTKInputHandler() { }    virtual bool HandleKey(wxInputConsumer *control,                           const wxKeyEvent& event,                           bool pressed);    virtual bool HandleMouse(wxInputConsumer *control,                             const wxMouseEvent& event);    virtual bool HandleMouseMove(wxInputConsumer *control,                                 const wxMouseEvent& event);};#if wxUSE_SCROLLBARclass wxGTKScrollBarInputHandler : public wxStdScrollBarInputHandler{public:    wxGTKScrollBarInputHandler(wxRenderer *renderer, wxInputHandler *handler)        : wxStdScrollBarInputHandler(renderer, handler) { }protected:    virtual void Highlight(wxScrollBar *scrollbar, bool doIt)    {        // only arrows and the thumb can be highlighted        if ( !IsArrow() && m_htLast != wxHT_SCROLLBAR_THUMB )            return;        wxStdScrollBarInputHandler::Highlight(scrollbar, doIt);    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -