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

📄 renderer.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
///////////////////////////////////////////////////////////////////////////////// Name:        src/mac/carbon/renderer.cpp// Purpose:     implementation of wxRendererNative for Mac// Author:      Vadim Zeitlin// Modified by:// Created:     20.07.2003// RCS-ID:      $Id: renderer.cpp,v 1.40 2006/11/30 23:44:40 RD Exp $// Copyright:   (c) 2003 Vadim Zeitlin <vadim@wxwindows.org>// License:     wxWindows licence///////////////////////////////////////////////////////////////////////////////// for compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif#ifndef WX_PRECOMP    #include "wx/string.h"    #include "wx/dc.h"    #include "wx/bitmap.h"    #include "wx/settings.h"    #include "wx/dcclient.h"    #include "wx/toplevel.h"#endif#include "wx/renderer.h"#include "wx/graphics.h"#include "wx/mac/uma.h"class WXDLLEXPORT wxRendererMac : public wxDelegateRendererNative{public:    // draw the header control button (used by wxListCtrl)    virtual int DrawHeaderButton( wxWindow *win,        wxDC& dc,        const wxRect& rect,        int flags = 0,        wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE,        wxHeaderButtonParams* params = NULL );    virtual int GetHeaderButtonHeight(wxWindow *win);        // draw the expanded/collapsed icon for a tree control item    virtual void DrawTreeItemButton( wxWindow *win,        wxDC& dc,        const wxRect& rect,        int flags = 0 );    // draw a (vertical) sash    virtual void DrawSplitterSash( wxWindow *win,        wxDC& dc,        const wxSize& size,        wxCoord position,        wxOrientation orient,        int flags = 0 );    virtual void DrawComboBoxDropButton(wxWindow *win,                                        wxDC& dc,                                        const wxRect& rect,                                        int flags = 0);        virtual void DrawPushButton(wxWindow *win,                                wxDC& dc,                                const wxRect& rect,                                int flags = 0);        virtual void DrawItemSelectionRect(wxWindow *win,                                       wxDC& dc,                                       const wxRect& rect,                                       int flags = 0);private:    void DrawMacThemeButton(wxWindow *win,                            wxDC& dc,                            const wxRect& rect,                            int flags,                            int kind,                            int adornment);            // the tree buttons    wxBitmap m_bmpTreeExpanded;    wxBitmap m_bmpTreeCollapsed;};// ============================================================================// implementation// ============================================================================// staticwxRendererNative& wxRendererNative::GetDefault(){    static wxRendererMac s_rendererMac;    return s_rendererMac;}int wxRendererMac::DrawHeaderButton( wxWindow *win,    wxDC& dc,    const wxRect& rect,    int flags,    wxHeaderSortIconType sortArrow,    wxHeaderButtonParams* params ){#if !wxMAC_USE_CORE_GRAPHICS    const wxCoord x = dc.LogicalToDeviceX(rect.x);    const wxCoord y = dc.LogicalToDeviceY(rect.y);    const wxCoord w = dc.LogicalToDeviceXRel(rect.width);    const wxCoord h = dc.LogicalToDeviceYRel(rect.height);#else    // now the wxGCDC is using native transformations    const wxCoord x = rect.x;    const wxCoord y = rect.y;    const wxCoord w = rect.width;    const wxCoord h = rect.height;#endif    dc.SetBrush( *wxTRANSPARENT_BRUSH );    HIRect headerRect = CGRectMake( x, y, w, h );    if ( !dc.IsKindOf( CLASSINFO( wxPaintDC ) ) )    {        Rect r =        {            (short) headerRect.origin.y, (short) headerRect.origin.x,            (short) (headerRect.origin.y + headerRect.size.height),            (short) (headerRect.origin.x + headerRect.size.width)        };        RgnHandle updateRgn = NewRgn();        RectRgn( updateRgn, &r );        HIViewSetNeedsDisplayInRegion( (HIViewRef) win->GetHandle(), updateRgn, true );        DisposeRgn( updateRgn );    }    else    {        CGContextRef cgContext;#if wxMAC_USE_CORE_GRAPHICS        cgContext = (CGContextRef) dc.GetGraphicsContext()->GetNativeContext();#else        Rect bounds;        GetPortBounds( (CGrafPtr) dc.m_macPort, &bounds );        QDBeginCGContext( (CGrafPtr) dc.m_macPort, &cgContext );        CGContextTranslateCTM( cgContext, 0, bounds.bottom - bounds.top );        CGContextScaleCTM( cgContext, 1, -1 );        HIShapeReplacePathInCGContext( HIShapeCreateWithQDRgn( (RgnHandle) dc.m_macCurrentClipRgn ), cgContext );        CGContextClip( cgContext );        HIViewConvertRect( &headerRect, (HIViewRef) win->GetHandle(), (HIViewRef) win->MacGetTopLevelWindow()->GetHandle() );#endif        {            HIThemeButtonDrawInfo drawInfo;            HIRect labelRect;            memset( &drawInfo, 0, sizeof(drawInfo) );            drawInfo.version = 0;            drawInfo.kind = kThemeListHeaderButton;            drawInfo.state = (flags & wxCONTROL_DISABLED) ? kThemeStateInactive : kThemeStateActive;            drawInfo.value = (flags & wxCONTROL_SELECTED) ? kThemeButtonOn : kThemeButtonOff;            drawInfo.adornment = kThemeAdornmentNone;            // The down arrow is drawn automatically, change it to an up arrow if needed.            if ( sortArrow == wxHDR_SORT_ICON_UP )                drawInfo.adornment = kThemeAdornmentHeaderButtonSortUp;                            HIThemeDrawButton( &headerRect, &drawInfo, cgContext, kHIThemeOrientationNormal, &labelRect );            // If we don't want any arrows we need to draw over the one already there            if ( (flags & wxCONTROL_SELECTED) && (sortArrow == wxHDR_SORT_ICON_NONE) )            {                // clip to the header rectangle                CGContextSaveGState( cgContext );                CGContextClipToRect( cgContext, headerRect );                // but draw bigger than that so the arrow will get clipped off                headerRect.size.width += 25;                HIThemeDrawButton( &headerRect, &drawInfo, cgContext, kHIThemeOrientationNormal, &labelRect );                CGContextRestoreGState( cgContext );            }                        }#if wxMAC_USE_CORE_GRAPHICS#else        QDEndCGContext( (CGrafPtr) dc.m_macPort, &cgContext );#endif    }    // Reserve room for the arrows before writing the label, and turn off the    // flags we've already handled    wxRect newRect(rect);    if ( (flags & wxCONTROL_SELECTED) && (sortArrow != wxHDR_SORT_ICON_NONE) )    {        newRect.width -= 12;        sortArrow = wxHDR_SORT_ICON_NONE;    }    flags &= ~wxCONTROL_SELECTED;    return DrawHeaderButtonContents(win, dc, newRect, flags, sortArrow, params);}int wxRendererMac::GetHeaderButtonHeight(wxWindow* WXUNUSED(win)){    SInt32		standardHeight;    OSStatus		errStatus;    errStatus = GetThemeMetric( kThemeMetricListHeaderHeight, &standardHeight );    if (errStatus == noErr)    {        return standardHeight;    }    return -1;}void wxRendererMac::DrawTreeItemButton( wxWindow *win,    wxDC& dc,    const wxRect& rect,    int flags ){#if !wxMAC_USE_CORE_GRAPHICS    const wxCoord x = dc.LogicalToDeviceX(rect.x);    const wxCoord y = dc.LogicalToDeviceY(rect.y);    const wxCoord w = dc.LogicalToDeviceXRel(rect.width);    const wxCoord h = dc.LogicalToDeviceYRel(rect.height);#else    // now the wxGCDC is using native transformations    const wxCoord x = rect.x;    const wxCoord y = rect.y;    const wxCoord w = rect.width;    const wxCoord h = rect.height;#endif        dc.SetBrush( *wxTRANSPARENT_BRUSH );    HIRect headerRect = CGRectMake( x, y, w, h );    if ( !dc.IsKindOf( CLASSINFO( wxPaintDC ) ) )    {        Rect r =    {            (short) headerRect.origin.y, (short) headerRect.origin.x,

⌨️ 快捷键说明

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