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

📄 gtk.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    {        if ( flags & wxCONTROL_FOCUSED )        {            DrawRect(dc, &rect, m_penBlack);            DrawAntiShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight);        }        else // !focused        {            DrawInnerShadedRect(dc, &rect);        }    }    if ( rectIn )        *rectIn = rect;}void wxGTKRenderer::DrawButtonLabel(wxDC& dc,                                    const wxString& label,                                    const wxBitmap& image,                                    const wxRect& rect,                                    int flags,                                    int alignment,                                    int indexAccel,                                    wxRect *rectBounds){    // no focus rect around buttons label in GTK+    wxStdRenderer::DrawButtonLabel(dc, label, image, rect, flags,                                   alignment, indexAccel, rectBounds);}void wxGTKRenderer::DrawButtonBorder(wxDC& dc,                                     const wxRect& rectTotal,                                     int flags,                                     wxRect *rectIn){    wxRect rect = rectTotal;    if ( flags & wxCONTROL_PRESSED )    {        // button pressed: draw a black border around it and an inward shade        DrawRect(dc, &rect, m_penBlack);        DrawInnerShadedRect(dc, &rect);    }    else // button not pressed    {        if ( flags & wxCONTROL_ISDEFAULT )        {            // TODO        }        if ( flags & wxCONTROL_FOCUSED )        {            // button is currently default: add an extra border around it            DrawRect(dc, &rect, m_penBlack);        }        // now draw a normal button        DrawShadedRect(dc, &rect, m_penHighlight, m_penBlack);        DrawAntiShadedRect(dc, &rect, GetBackgroundColour(flags), m_penDarkGrey);    }    if ( rectIn )        *rectIn = rect;}// ----------------------------------------------------------------------------// lines and frames// ----------------------------------------------------------------------------void wxGTKRenderer::DrawFrameWithLabel(wxDC& dc,                                       const wxString& label,                                       const wxRect& rectFrame,                                       const wxRect& rectTextOrig,                                       int flags,                                       int alignment,                                       int indexAccel){    wxRect rectText(rectTextOrig);    rectText.Inflate(1, 0);    wxRect rectLabel;    DrawLabel(dc, label, rectText, flags, alignment, indexAccel, &rectLabel);    rectLabel.x -= 1;    rectLabel.width += 2;    DrawFrameWithoutLabel(dc, rectFrame, rectLabel);    // GTK+ does it like this    dc.SetPen(m_penHighlight);    dc.DrawPoint(rectText.x, rectFrame.y);    dc.DrawPoint(rectText.x + rectLabel.width - 3, rectFrame.y);}// ----------------------------------------------------------------------------// check/radion buttons// ----------------------------------------------------------------------------void wxGTKRenderer::DrawCheckItemBitmap(wxDC& dc,                                        const wxBitmap& bitmap,                                        const wxRect& rect,                                        int flags){    // never draw the focus rect around the check indicators here    DrawCheckButton(dc, wxEmptyString, bitmap, rect, flags & ~wxCONTROL_FOCUSED);}void wxGTKRenderer::DrawUndeterminedBitmap(wxDC& dc,                                           const wxRect& rectTotal,                                           bool isPressed){    // FIXME: For sure it is not GTK look but it is better than nothing.    // Show me correct look and I will immediatelly make it better (ABX)    wxRect rect = rectTotal;    wxColour col1, col2;    if ( isPressed )    {        col1 = wxSCHEME_COLOUR(m_scheme, SHADOW_DARK);        col2 = wxSCHEME_COLOUR(m_scheme, CONTROL_PRESSED);    }    else    {        col1 = wxSCHEME_COLOUR(m_scheme, SHADOW_DARK);        col2 = wxSCHEME_COLOUR(m_scheme, SHADOW_IN);    }    dc.SetPen(*wxTRANSPARENT_PEN);    dc.SetBrush(col1);    dc.DrawRectangle(rect);    rect.Deflate(1);    dc.SetBrush(col2);    dc.DrawRectangle(rect);}void wxGTKRenderer::DrawUncheckBitmap(wxDC& dc,                                      const wxRect& rectTotal,                                      bool isPressed){    wxRect rect = rectTotal;    DrawAntiRaisedBorder(dc, &rect);    wxColour col = wxSCHEME_COLOUR(m_scheme, SHADOW_IN);    dc.SetPen(wxPen(col));    dc.DrawPoint(rect.GetRight() - 1, rect.GetBottom() - 1);    if ( isPressed )        col = wxSCHEME_COLOUR(m_scheme, CONTROL_PRESSED);    //else: it is SHADOW_IN, leave as is    dc.SetPen(*wxTRANSPARENT_PEN);    dc.SetBrush(col);    dc.DrawRectangle(rect);}void wxGTKRenderer::DrawCheckBitmap(wxDC& dc, const wxRect& rectTotal){    wxRect rect = rectTotal;    DrawAntiShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight);    DrawShadedRect(dc, &rect, m_penBlack, m_penLightGrey);    dc.SetPen(*wxTRANSPARENT_PEN);    dc.SetBrush(wxSCHEME_COLOUR(m_scheme, CONTROL_PRESSED));    dc.DrawRectangle(rect);}void wxGTKRenderer::DrawRadioBitmap(wxDC& dc,                                    const wxRect& rect,                                    int flags){    wxCoord x = rect.x,            y = rect.y,            xRight = rect.GetRight(),            yBottom = rect.GetBottom();    wxCoord yMid = (y + yBottom) / 2;    // then draw the upper half    dc.SetPen(flags & wxCONTROL_CHECKED ? m_penDarkGrey : m_penHighlight);    DrawUpZag(dc, x, xRight, yMid, y);    DrawUpZag(dc, x + 1, xRight - 1, yMid, y + 1);    bool drawIt = true;    if ( flags & wxCONTROL_CHECKED )        dc.SetPen(m_penBlack);    else if ( flags & wxCONTROL_PRESSED )        dc.SetPen(wxPen(wxSCHEME_COLOUR(m_scheme, CONTROL_PRESSED)));    else // unchecked and unpressed        drawIt = false;    if ( drawIt )        DrawUpZag(dc, x + 2, xRight - 2, yMid, y + 2);    // and then the lower one    dc.SetPen(flags & wxCONTROL_CHECKED ? m_penHighlight : m_penBlack);    DrawDownZag(dc, x, xRight, yMid, yBottom);    if ( !(flags & wxCONTROL_CHECKED) )        dc.SetPen(m_penDarkGrey);    DrawDownZag(dc, x + 1, xRight - 1, yMid, yBottom - 1);    if ( !(flags & wxCONTROL_CHECKED) )        drawIt = true; // with the same pen    else if ( flags & wxCONTROL_PRESSED )    {        dc.SetPen(wxPen(wxSCHEME_COLOUR(m_scheme, CONTROL_PRESSED)));        drawIt = true;    }    else // checked and unpressed        drawIt = false;    if ( drawIt )        DrawDownZag(dc, x + 2, xRight - 2, yMid, yBottom - 2);}void wxGTKRenderer::DrawUpZag(wxDC& dc,                              wxCoord x1,                              wxCoord x2,                              wxCoord y1,                              wxCoord y2){    wxCoord xMid = (x1 + x2) / 2;    dc.DrawLine(x1, y1, xMid, y2);    dc.DrawLine(xMid, y2, x2 + 1, y1 + 1);}void wxGTKRenderer::DrawDownZag(wxDC& dc,                                wxCoord x1,                                wxCoord x2,                                wxCoord y1,                                wxCoord y2){    wxCoord xMid = (x1 + x2) / 2;    dc.DrawLine(x1 + 1, y1 + 1, xMid, y2);    dc.DrawLine(xMid, y2, x2, y1);}wxBitmap wxGTKRenderer::GetCheckBitmap(int flags){    if ( !m_bitmapsCheckbox[0][0].Ok() )    {        // init the bitmaps once only        wxRect rect;        wxSize size = GetCheckBitmapSize();        rect.width = size.x;        rect.height = size.y;        for ( int i = 0; i < 2; i++ )        {            for ( int j = 0; j < 3; j++ )                m_bitmapsCheckbox[i][j].Create(rect.width, rect.height);        }        wxMemoryDC dc;        // normal checked        dc.SelectObject(m_bitmapsCheckbox[0][0]);        DrawCheckBitmap(dc, rect);        // normal unchecked        dc.SelectObject(m_bitmapsCheckbox[0][1]);        DrawUncheckBitmap(dc, rect, false);        // normal undeterminated        dc.SelectObject(m_bitmapsCheckbox[0][2]);        DrawUndeterminedBitmap(dc, rect, false);        // pressed checked        m_bitmapsCheckbox[1][0] = m_bitmapsCheckbox[0][0];        // pressed unchecked        dc.SelectObject(m_bitmapsCheckbox[1][1]);        DrawUncheckBitmap(dc, rect, true);        // pressed undeterminated        dc.SelectObject(m_bitmapsCheckbox[1][2]);        DrawUndeterminedBitmap(dc, rect, true);    }    IndicatorState state;    IndicatorStatus status;    GetIndicatorsFromFlags(flags, state, status);    // disabled looks the same as normal    if ( state == IndicatorState_Disabled )        state = IndicatorState_Normal;    return m_bitmapsCheckbox[state][status];}wxBitmap wxGTKRenderer::GetRadioBitmap(int flags){    IndicatorState state;    IndicatorStatus status;    GetIndicatorsFromFlags(flags, state, status);    wxBitmap& bmp = m_bitmapsRadiobtn[state][status];    if ( !bmp.Ok() )    {        const wxSize size = GetRadioBitmapSize();        wxMemoryDC dc;        bmp.Create(size.x, size.y);        dc.SelectObject(bmp);        DrawRadioBitmap(dc, size, flags);    }    return bmp;}wxBitmap wxGTKRenderer::GetLineWrapBitmap() const{    if ( !m_bmpLineWrap.Ok() )    {        // the line wrap bitmap as used by GTK+        #define line_wrap_width 6        #define line_wrap_height 9        static const char line_wrap_bits[] =        {          0x1e, 0x3e, 0x30, 0x30, 0x39, 0x1f, 0x0f, 0x0f, 0x1f,        };        wxBitmap bmpLineWrap(line_wrap_bits, line_wrap_width, line_wrap_height);        if ( !bmpLineWrap.Ok() )        {            wxFAIL_MSG( _T("Failed to create line wrap XBM") );        }        else        {            wxConstCast(this, wxGTKRenderer)->m_bmpLineWrap = bmpLineWrap;        }    }    return m_bmpLineWrap;}#if wxUSE_TOOLBARvoid wxGTKRenderer::DrawToolBarButton(wxDC& dc,                                      const wxString& label,                                      const wxBitmap& bitmap,                                      const wxRect& rectOrig,                                      int flags,                                      long WXUNUSED(style),                                      int tbarStyle){    // we don't draw the separators at all    if ( !label.empty() || bitmap.Ok() )    {        wxRect rect = rectOrig;        rect.Deflate(BORDER_THICKNESS);        if ( flags & wxCONTROL_PRESSED )        {            DrawBorder(dc, wxBORDER_SUNKEN, rect, flags, &rect);            DrawBackground(dc, wxSCHEME_COLOUR(m_scheme, CONTROL_PRESSED), rect);        }        else if ( flags & wxCONTROL_CURRENT )        {            DrawBorder(dc, wxBORDER_RAISED, rect, flags, &rect);            DrawBackground(dc, wxSCHEME_COLOUR(m_scheme, CONTROL_CURRENT), rect);        }        if(tbarStyle & wxTB_TEXT)        {            if(tbarStyle & wxTB_HORIZONTAL)            {                dc.DrawLabel(label, bitmap, rect, wxALIGN_CENTRE);            }            else            {                dc.DrawLabel(label, bitmap, rect, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);            }        }        else        {            int xpoint = (rect.GetLeft() + rect.GetRight() + 1 - bitmap.GetWidth()) / 2;            int ypoint = (rect.GetTop() + rect.GetBottom() + 1 - bitmap.GetHeight()) / 2;            dc.DrawBitmap(bitmap, xpoint, ypoint);        }    }}#endif // wxUSE_TOOLBAR// ----------------------------------------------------------------------------// text control// ----------------------------------------------------------------------------#if wxUSE_TEXTCTRLwxRect wxGTKRenderer::GetTextClientArea(const wxTextCtrl *text,                                        const wxRect& rect,                                        wxCoord *extraSpaceBeyond) const{    wxRect      rectText = wxStdRenderer::GetTextClientArea(text, rect, extraSpaceBeyond);    if ( text->WrapLines() )    {        // leave enough for the line wrap bitmap indicator        wxCoord widthMark = GetLineWrapBitmap().GetWidth() + 2;        rectText.width -= widthMark;        if ( extraSpaceBeyond )            *extraSpaceBeyond = widthMark;    }    return rectText;}void wxGTKRenderer::DrawLineWrapMark(wxDC& dc, const wxRect& rect){    wxBitmap bmpLineWrap = GetLineWrapBitmap();

⌨️ 快捷键说明

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