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

📄 graphics.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    m_matrix = CGAffineTransformMake(a,b,c,d,tx,ty);}// gets the component valuess of the matrixvoid wxMacCoreGraphicsMatrixData::Get(wxDouble* a, wxDouble* b,  wxDouble* c,                                      wxDouble* d, wxDouble* tx, wxDouble* ty) const{    if (a)  *a = m_matrix.a;    if (b)  *b = m_matrix.b;    if (c)  *c = m_matrix.c;    if (d)  *d = m_matrix.d;    if (tx) *tx= m_matrix.tx;    if (ty) *ty= m_matrix.ty;}// makes this the inverse matrixvoid wxMacCoreGraphicsMatrixData::Invert(){    m_matrix = CGAffineTransformInvert( m_matrix );}// returns true if the elements of the transformation matrix are equal ?bool wxMacCoreGraphicsMatrixData::IsEqual( const wxGraphicsMatrixData* t) const{    const CGAffineTransform* tm = (CGAffineTransform*) t->GetNativeMatrix();#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4    if ( CGAffineTransformEqualToTransform!=NULL )    {        return CGAffineTransformEqualToTransform(m_matrix, *((CGAffineTransform*) t->GetNativeMatrix()));    }    else#endif    {        return (            m_matrix.a == tm->a &&            m_matrix.b == tm->b &&            m_matrix.c == tm->c &&            m_matrix.d == tm->d &&            m_matrix.tx == tm->tx &&            m_matrix.ty == tm->ty ) ;    }}// return true if this is the identity matrixbool wxMacCoreGraphicsMatrixData::IsIdentity() const{    return ( m_matrix.a == 1 && m_matrix.d == 1 &&        m_matrix.b == 0 && m_matrix.d == 0 && m_matrix.tx == 0 && m_matrix.ty == 0);}//// transformation//// add the translation to this matrixvoid wxMacCoreGraphicsMatrixData::Translate( wxDouble dx , wxDouble dy ){    m_matrix = CGAffineTransformTranslate( m_matrix, dx, dy);}// add the scale to this matrixvoid wxMacCoreGraphicsMatrixData::Scale( wxDouble xScale , wxDouble yScale ){    m_matrix = CGAffineTransformScale( m_matrix, xScale, yScale);}// add the rotation to this matrix (radians)void wxMacCoreGraphicsMatrixData::Rotate( wxDouble angle ){    m_matrix = CGAffineTransformRotate( m_matrix, angle);}//// apply the transforms//// applies that matrix to the pointvoid wxMacCoreGraphicsMatrixData::TransformPoint( wxDouble *x, wxDouble *y ) const{    CGPoint pt = CGPointApplyAffineTransform( CGPointMake(*x,*y), m_matrix);    *x = pt.x;    *y = pt.y;}// applies the matrix except for translationsvoid wxMacCoreGraphicsMatrixData::TransformDistance( wxDouble *dx, wxDouble *dy ) const{    CGSize sz = CGSizeApplyAffineTransform( CGSizeMake(*dx,*dy) , m_matrix );    *dx = sz.width;    *dy = sz.height;}// returns the native representationvoid * wxMacCoreGraphicsMatrixData::GetNativeMatrix() const{    return (void*) &m_matrix;}//// Graphics Path////-----------------------------------------------------------------------------// wxMacCoreGraphicsPath declaration//-----------------------------------------------------------------------------class WXDLLEXPORT wxMacCoreGraphicsPathData : public wxGraphicsPathData{public :    wxMacCoreGraphicsPathData( wxGraphicsRenderer* renderer, CGMutablePathRef path = NULL);    ~wxMacCoreGraphicsPathData();    virtual wxGraphicsObjectRefData *Clone() const;    // begins a new subpath at (x,y)    virtual void MoveToPoint( wxDouble x, wxDouble y );    // adds a straight line from the current point to (x,y)    virtual void AddLineToPoint( wxDouble x, wxDouble y );    // adds a cubic Bezier curve from the current point, using two control points and an end point    virtual void AddCurveToPoint( wxDouble cx1, wxDouble cy1, wxDouble cx2, wxDouble cy2, wxDouble x, wxDouble y );    // closes the current sub-path    virtual void CloseSubpath();    // gets the last point of the current path, (0,0) if not yet set    virtual void GetCurrentPoint( wxDouble* x, wxDouble* y) const;    // adds an arc of a circle centering at (x,y) with radius (r) from startAngle to endAngle    virtual void AddArc( wxDouble x, wxDouble y, wxDouble r, wxDouble startAngle, wxDouble endAngle, bool clockwise );    //    // These are convenience functions which - if not available natively will be assembled    // using the primitives from above    //    // adds a quadratic Bezier curve from the current point, using a control point and an end point    virtual void AddQuadCurveToPoint( wxDouble cx, wxDouble cy, wxDouble x, wxDouble y );    // appends a rectangle as a new closed subpath    virtual void AddRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h );    // appends an ellipsis as a new closed subpath fitting the passed rectangle    virtual void AddCircle( wxDouble x, wxDouble y, wxDouble r );    // draws a an arc to two tangents connecting (current) to (x1,y1) and (x1,y1) to (x2,y2), also a straight line from (current) to (x1,y1)    virtual void AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r );    // adds another path    virtual void AddPath( const wxGraphicsPathData* path );    // returns the native path    virtual void * GetNativePath() const { return m_path; }    // give the native path returned by GetNativePath() back (there might be some deallocations necessary)    virtual void UnGetNativePath(void *p) const {}    // transforms each point of this path by the matrix    virtual void Transform( const wxGraphicsMatrixData* matrix );    // gets the bounding box enclosing all points (possibly including control points)    virtual void GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wxDouble *y) const;    virtual bool Contains( wxDouble x, wxDouble y, int fillStyle = wxODDEVEN_RULE) const;private :    CGMutablePathRef m_path;};//-----------------------------------------------------------------------------// wxMacCoreGraphicsPath implementation//-----------------------------------------------------------------------------wxMacCoreGraphicsPathData::wxMacCoreGraphicsPathData( wxGraphicsRenderer* renderer, CGMutablePathRef path) : wxGraphicsPathData(renderer){    if ( path )        m_path = path;    else        m_path = CGPathCreateMutable();}wxMacCoreGraphicsPathData::~wxMacCoreGraphicsPathData(){    CGPathRelease( m_path );}wxGraphicsObjectRefData* wxMacCoreGraphicsPathData::Clone() const{    wxMacCoreGraphicsPathData* clone = new wxMacCoreGraphicsPathData(GetRenderer(),CGPathCreateMutableCopy(m_path));    return clone ;}// opens (starts) a new subpathvoid wxMacCoreGraphicsPathData::MoveToPoint( wxDouble x1 , wxDouble y1 ){    CGPathMoveToPoint( m_path , NULL , x1 , y1 );}void wxMacCoreGraphicsPathData::AddLineToPoint( wxDouble x1 , wxDouble y1 ){    CGPathAddLineToPoint( m_path , NULL , x1 , y1 );}void wxMacCoreGraphicsPathData::AddCurveToPoint( wxDouble cx1, wxDouble cy1, wxDouble cx2, wxDouble cy2, wxDouble x, wxDouble y ){    CGPathAddCurveToPoint( m_path , NULL , cx1 , cy1 , cx2, cy2, x , y );}void wxMacCoreGraphicsPathData::AddQuadCurveToPoint( wxDouble cx1, wxDouble cy1, wxDouble x, wxDouble y ){    CGPathAddQuadCurveToPoint( m_path , NULL , cx1 , cy1 , x , y );}void wxMacCoreGraphicsPathData::AddRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h ){    CGRect cgRect = { { x , y } , { w , h } };    CGPathAddRect( m_path , NULL , cgRect );}void wxMacCoreGraphicsPathData::AddCircle( wxDouble x, wxDouble y , wxDouble r ){    CGPathAddArc( m_path , NULL , x , y , r , 0.0 , 2 * M_PI , true );}// adds an arc of a circle centering at (x,y) with radius (r) from startAngle to endAnglevoid wxMacCoreGraphicsPathData::AddArc( wxDouble x, wxDouble y, wxDouble r, wxDouble startAngle, wxDouble endAngle, bool clockwise ){    // inverse direction as we the 'normal' state is a y axis pointing down, ie mirrored to the standard core graphics setup    CGPathAddArc( m_path, NULL , x, y, r, startAngle, endAngle, !clockwise);}void wxMacCoreGraphicsPathData::AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r ){    CGPathAddArcToPoint( m_path, NULL , x1, y1, x2, y2, r);}void wxMacCoreGraphicsPathData::AddPath( const wxGraphicsPathData* path ){    CGPathAddPath( m_path , NULL, (CGPathRef) path->GetNativePath() );}// closes the current subpathvoid wxMacCoreGraphicsPathData::CloseSubpath(){    CGPathCloseSubpath( m_path );}// gets the last point of the current path, (0,0) if not yet setvoid wxMacCoreGraphicsPathData::GetCurrentPoint( wxDouble* x, wxDouble* y) const{    CGPoint p = CGPathGetCurrentPoint( m_path );    *x = p.x;    *y = p.y;}// transforms each point of this path by the matrixvoid wxMacCoreGraphicsPathData::Transform( const wxGraphicsMatrixData* matrix ){    CGMutablePathRef p = CGPathCreateMutable() ;    CGPathAddPath( p, (CGAffineTransform*) matrix->GetNativeMatrix() , m_path );    CGPathRelease( m_path );    m_path = p;}// gets the bounding box enclosing all points (possibly including control points)void wxMacCoreGraphicsPathData::GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wxDouble *h) const{    CGRect bounds = CGPathGetBoundingBox( m_path ) ;    *x = bounds.origin.x;    *y = bounds.origin.y;    *w = bounds.size.width;    *h = bounds.size.height;}bool wxMacCoreGraphicsPathData::Contains( wxDouble x, wxDouble y, int fillStyle) const{#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4    if ( CGPathContainsPoint!=NULL )    {        return CGPathContainsPoint( m_path, NULL, CGPointMake(x,y), fillStyle == wxODDEVEN_RULE );    }    else#endif    {        // TODO : implementation for 10.3        CGRect bounds = CGPathGetBoundingBox( m_path ) ;        return CGRectContainsPoint( bounds, CGPointMake(x,y) ) == 1;    }}//// Graphics Context////-----------------------------------------------------------------------------// wxMacCoreGraphicsContext declaration//-----------------------------------------------------------------------------class WXDLLEXPORT wxMacCoreGraphicsContext : public wxGraphicsContext{public:    wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer, CGContextRef cgcontext );    wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer, WindowRef window );    wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer, wxWindow* window );    wxMacCoreGraphicsContext( wxGraphicsRenderer* renderer);    wxMacCoreGraphicsContext();    ~wxMacCoreGraphicsContext();    void Init();    // push the current state of the context, ie the transformation matrix on a stack    virtual void PushState();    // pops a stored state from the stack    virtual void PopState();    // clips drawings to the region    virtual void Clip( const wxRegion &region );    // clips drawings to the rect    virtual void Clip( wxDouble x, wxDouble y, wxDouble w, wxDouble h );    // resets the clipping to original extent    virtual void ResetClip();    virtual void * GetNativeContext();    bool SetLogicalFunction( int function );    //    // transformation    //    // translate    virtual void Translate( wxDouble dx , wxDouble dy );    // scale    virtual void Scale( wxDouble xScale , wxDouble yScale );    // rotate (radians)    virtual void Rotate( wxDouble angle );    // concatenates this transform with the current transform of this context    virtual void ConcatTransform( const wxGraphicsMatrix& matrix );    // sets the transform of this context    virtual void SetTransform( const wxGraphicsMatrix& matrix );    // gets the matrix of this context    virtual wxGraphicsMatrix GetTransform() const;    //    // setting the paint    //    // strokes along a path with the current pen    virtual void StrokePath( const wxGraphicsPath &path );    // fills a path with the current brush    virtual void FillPath( const wxGraphicsPath &path, int fillStyle = wxODDEVEN_RULE );    // draws a path by first filling and then stroking    virtual void DrawPath( const wxGraphicsPath &path, int fillStyle = wxODDEVEN_RULE );    virtual bool ShouldOffset() const    {             int penwidth = 0 ;        if ( !m_pen.IsNull() )        {            penwidth = (int)((wxMacCoreGraphicsPenData*)m_pen.GetRefData())->GetWidth();            if ( penwidth == 0 )                penwidth = 1;        }        return ( penwidth % 2 ) == 1;    }    //    // text    //    virtual void DrawText( const wxString &str, wxDouble x, wxDouble y );    virtual void DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle );    virtual void GetTextExtent( const wxString &text, wxDouble *width, wxDouble *height,        wxDouble *descent, wxDouble *externalLeading ) const;    virtual void GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const;    //    // image support    //    virtual void DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h );    virtual void DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h );    void SetNativeContext( CGContextRef cg );    DECLARE_NO_COPY_CLASS(wxMacCoreGraphicsContext)    DECLARE_DYNAMIC_CLASS(wxMacCoreGraphicsContext)private:    void EnsureIsValid();    CGContextRef m_cgContext;    WindowRef m_windowRef;    bool m_releaseContext;    CGAffineTransform m_windowTransform;

⌨️ 快捷键说明

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