#############################################################################
## Name: XS/GraphicsContext.xs
## Purpose: XS for Wx::GraphicsContext
## Author: Klaas Hartmann
## Modified by:
## Created: 29/06/2007
## RCS-ID: $Id: GraphicsContext.xs 3045 2011-03-24 16:20:59Z mdootson $
## Copyright: (c) 2007, 2009-2010 Klaas Hartmann
## Licence: This program is free software; you can redistribute it and/or
## modify it under the same terms as Perl itself
#############################################################################
#if wxUSE_GRAPHICS_CONTEXT
#include <wx/graphics.h>
#include <wx/window.h>
#include "cpp/streams.h"
#include "cpp/overload.h"
MODULE=Wx PACKAGE=Wx::GraphicsContext
## // not deleteable if created from wxGCDC::GetGraphicsContext
## // override wxGraphicsObject CLONE and DESTROY methods
## // default return for wxPli_object_is_deleteable should be true
static void
wxGraphicsContext::CLONE()
CODE:
wxPli_thread_sv_clone( aTHX_ CLASS, (wxPliCloneSV)wxPli_detach_object );
## // thread OK
void
wxGraphicsContext::DESTROY()
CODE:
wxPli_thread_sv_unregister( aTHX_ wxPli_get_class( aTHX_ ST(0) ), THIS, ST(0) );
if( wxPli_object_is_deleteable( aTHX_ ST(0) ) )
delete THIS;
# DECLARE_OVERLOAD( wmdc, Wx::MemoryDC )
# DECLARE_OVERLOAD( wwdc, Wx::WindowDC )
# DECLARE_OVERLOAD( wpdc, Wx::PrinterDC )
void
Create ( ... )
PPCODE:
BEGIN_OVERLOAD()
MATCH_VOIDM_REDISP_FUNCTION( Wx::GraphicsContext::createMeasuringContext )
MATCH_REDISP_FUNCTION(wxPliOvl_wwin, Wx::GraphicsContext::createFromWindow)
#if defined(__WXMSW__) || WXPERL_W_VERSION_GE( 2, 9, 0 )
MATCH_REDISP_FUNCTION(wxPliOvl_wmdc, Wx::GraphicsContext::createFromMemoryDC)
#endif
#if wxPERL_USE_PRINTING_ARCHITECTURE && WXPERL_W_VERSION_GE( 2, 9, 0 )
MATCH_REDISP_FUNCTION(wxPliOvl_wpdc, Wx::GraphicsContext::createFromPrinterDC)
#endif
MATCH_REDISP_FUNCTION(wxPliOvl_wwdc, Wx::GraphicsContext::createFromWindowDC)
END_OVERLOAD( "Wx::GraphicsContext::Create" )
wxGraphicsContext*
createFromWindow ( window )
wxWindow* window
CODE:
RETVAL = wxGraphicsContext::Create( window );
OUTPUT: RETVAL
wxGraphicsContext*
createFromWindowDC (dc )
wxWindowDC* dc
CODE:
RETVAL = wxGraphicsContext::Create(*dc);
OUTPUT: RETVAL
#if wxPERL_USE_PRINTING_ARCHITECTURE && WXPERL_W_VERSION_GE( 2, 9, 0 )
wxGraphicsContext*
createFromPrinterDC (dc )
wxPrinterDC* dc
CODE:
RETVAL = wxGraphicsContext::Create(*dc);
OUTPUT: RETVAL
#endif
#if defined(__WXMSW__) || WXPERL_W_VERSION_GE( 2, 9, 0 )
wxGraphicsContext*
createFromMemoryDC (dc )
wxMemoryDC* dc
CODE:
RETVAL = wxGraphicsContext::Create(*dc);
OUTPUT: RETVAL
#endif
wxGraphicsContext*
createMeasuringContext ()
CODE:
RETVAL = wxGraphicsContext::Create();
OUTPUT: RETVAL
wxGraphicsPen*
wxGraphicsContext::CreatePen ( pen )
wxPen* pen
CODE:
RETVAL = new wxGraphicsPen( THIS->CreatePen(*pen) );
OUTPUT: RETVAL
wxGraphicsBrush*
wxGraphicsContext::CreateBrush ( brush )
wxBrush* brush
CODE:
RETVAL = new wxGraphicsBrush( THIS->CreateBrush(*brush) );
OUTPUT: RETVAL
wxGraphicsBrush*
wxGraphicsContext::CreateRadialGradientBrush (xo,yo,xc,yc,radius,oColor, cColor)
wxDouble xo
wxDouble yo
wxDouble xc
wxDouble yc
wxDouble radius
wxColour* oColor
wxColour* cColor
CODE:
RETVAL = new wxGraphicsBrush( THIS->CreateRadialGradientBrush(xo,yo,xc,yc,radius,*oColor,*cColor) );
OUTPUT: RETVAL
wxGraphicsBrush*
wxGraphicsContext::CreateLinearGradientBrush (x1,y1,x2,y2,c1,c2)
wxDouble x1
wxDouble y1
wxDouble x2
wxDouble y2
wxColour* c1
wxColour* c2
CODE:
RETVAL = new wxGraphicsBrush( THIS->CreateLinearGradientBrush(x1,y1,x2,y2,*c1,*c2) );
OUTPUT: RETVAL
wxGraphicsFont*
wxGraphicsContext::CreateFont (font, col = (wxColour*)wxBLACK )
wxFont* font
wxColour* col
CODE:
RETVAL = new wxGraphicsFont( THIS->CreateFont(*font, *col) );
OUTPUT: RETVAL
wxGraphicsMatrix*
wxGraphicsContext::CreateMatrix ( a = 1.0, b = 0.0, c = 0.0, d = 1.0, tx = 0.0, ty = 0.0)
wxDouble a
wxDouble b
wxDouble c
wxDouble d
wxDouble tx
wxDouble ty
CODE:
RETVAL = new wxGraphicsMatrix( THIS->CreateMatrix(a,b,c,d,tx,ty) );
OUTPUT: RETVAL
wxGraphicsPath*
wxGraphicsContext::CreatePath ()
CODE:
RETVAL = new wxGraphicsPath( THIS->CreatePath() );
OUTPUT: RETVAL
void
Clip ( ... )
PPCODE:
BEGIN_OVERLOAD()
MATCH_REDISP(wxPliOvl_n_n_n_n, ClipXYWH)
MATCH_REDISP(wxPliOvl_wreg, ClipRegion)
END_OVERLOAD( "Wx::GraphicsContext::Clip" )
void
wxGraphicsContext::ClipXYWH (x, y, w, h)
wxDouble x
wxDouble y
wxDouble w
wxDouble h
CODE:
THIS->Clip (x, y, w, h);
void
wxGraphicsContext::ClipRegion (region)
wxRegion* region
CODE:
THIS->Clip (*region);
void
wxGraphicsContext::ResetClip ()
void
wxGraphicsContext::DrawBitmap (bitmap, x, y, w, h)
wxBitmap* bitmap
wxDouble x
wxDouble y
wxDouble w
wxDouble h
CODE:
THIS->DrawBitmap( *bitmap, x, y, w, h );
void
wxGraphicsContext::DrawEllipse(x, y, w, h)
wxDouble x
wxDouble y
wxDouble w
wxDouble h
void
wxGraphicsContext::DrawIcon(icon, x, y, w, h)
wxIcon* icon
wxDouble x
wxDouble y
wxDouble w
wxDouble h
CODE:
THIS->DrawIcon( *icon, x, y, w, h );
void
wxGraphicsContext::DrawLines ( points, fillStyle = wxODDEVEN_RULE )
SV* points
wxPolygonFillMode fillStyle
CODE:
wxPliArrayGuard<wxPoint2DDouble> newPoints;
int n = wxPli_av_2_point2ddoublearray(aTHX_ points, newPoints.lvalue());
THIS->DrawLines(n,newPoints);
void
wxGraphicsContext::DrawPath (path, fillStyle = wxODDEVEN_RULE)
wxGraphicsPath *path
wxPolygonFillMode fillStyle
CODE:
THIS->DrawPath( *path, fillStyle );
void
wxGraphicsContext::DrawRectangle (x, y, w, h)
wxDouble x
wxDouble y
wxDouble w
wxDouble h
void
wxGraphicsContext::DrawRoundedRectangle (x, y, w, h, radius)
wxDouble x
wxDouble y
wxDouble w
wxDouble h
wxDouble radius
void
wxGraphicsContext::DrawText ( ... )
PPCODE:
BEGIN_OVERLOAD()
MATCH_REDISP(wxPliOvl_s_n_n_n, DrawTextAngle)
MATCH_REDISP(wxPliOvl_s_n_n, DrawTextNoAngle)
END_OVERLOAD( "Wx::GraphicsContext::DrawText" )
void
wxGraphicsContext::DrawTextAngle ( string, x, y, angle )
wxString string
wxDouble x
wxDouble y
wxDouble angle
CODE:
THIS->DrawText(string,x,y,angle);
void
wxGraphicsContext::DrawTextNoAngle ( string, x, y )
wxString string
wxDouble x
wxDouble y
CODE:
THIS->DrawText(string,x,y);
void
wxGraphicsContext::FillPath (path, fillStyle = wxODDEVEN_RULE)
wxGraphicsPath *path
wxPolygonFillMode fillStyle
CODE:
THIS->FillPath ( *path, fillStyle );
void
wxGraphicsContext::StrokePath ( path )
wxGraphicsPath *path;
CODE:
THIS->StrokePath ( *path );
## Adapted from wxDC
void
wxGraphicsContext::GetTextExtent( string )
wxString string
PREINIT:
wxDouble x, y, descent, externalLeading;
PPCODE:
THIS->GetTextExtent( string, &x, &y, &descent, &externalLeading);
EXTEND( SP, 4 );
PUSHs( sv_2mortal( newSVnv( x ) ) );
PUSHs( sv_2mortal( newSVnv( y ) ) );
PUSHs( sv_2mortal( newSVnv( descent ) ) );
PUSHs( sv_2mortal( newSVnv( externalLeading ) ) );
# Adapted from wxDC
void
wxGraphicsContext::GetPartialTextExtents( string )
wxString string
PREINIT:
wxArrayDouble widths;
PPCODE:
THIS->GetPartialTextExtents( string, widths );
PUTBACK;
wxPli_doublearray_push( aTHX_ widths );
SPAGAIN;
void
wxGraphicsContext::Rotate ( angle )
wxDouble angle
void
wxGraphicsContext::Scale ( x, y )
wxDouble x
wxDouble y
void
wxGraphicsContext::Translate ( x, y )
wxDouble x
wxDouble y
wxGraphicsMatrix*
wxGraphicsContext::GetTransform ()
CODE:
RETVAL = new wxGraphicsMatrix( THIS->GetTransform() );
OUTPUT: RETVAL
void
wxGraphicsContext::SetTransform (matrix)
wxGraphicsMatrix* matrix
CODE:
THIS->SetTransform(*matrix);
void
wxGraphicsContext::ConcatTransform (matrix)
wxGraphicsMatrix* matrix
CODE:
THIS->ConcatTransform(*matrix);
# DECLARE_OVERLOAD( wbru, Wx::Brush )
# DECLARE_OVERLOAD( wgbr, Wx::GraphicsBrush )
# DECLARE_OVERLOAD( wfon, Wx::Font )
# DECLARE_OVERLOAD( wgfo, Wx::GraphicsFont )
# DECLARE_OVERLOAD( wpen, Wx::Pen )
# DECLARE_OVERLOAD( wgpe, Wx::GraphicsPen )
# DECLARE_OVERLOAD( wcol, Wx::Colour )
void
SetBrush ( ... )
PPCODE:
BEGIN_OVERLOAD()
MATCH_REDISP(wxPliOvl_wbru, SetBrushBrush)
MATCH_REDISP(wxPliOvl_wgbr, SetBrushGraphics)
END_OVERLOAD( "Wx::GraphicsContext::SetBrush" )
void
wxGraphicsContext::SetBrushBrush (brush)
wxBrush* brush
CODE:
THIS->SetBrush( *brush );
void
wxGraphicsContext::SetBrushGraphics (brush)
wxGraphicsBrush* brush
CODE:
THIS->SetBrush( *brush );
void
SetFont ( ... )
PPCODE:
BEGIN_OVERLOAD()
MATCH_REDISP(wxPliOvl_wfon_wcol, SetFontFont)
MATCH_REDISP(wxPliOvl_wgfo, SetFontGraphics)
END_OVERLOAD( "Wx::GraphicsContext::SetFont" )
void
wxGraphicsContext::SetFontFont (font, colour)
wxFont* font
wxColour* colour
CODE:
THIS->SetFont(*font, *colour);
void
wxGraphicsContext::SetFontGraphics (font)
wxGraphicsFont* font
CODE:
THIS->SetFont(*font);
void
SetPen ( ... )
PPCODE:
BEGIN_OVERLOAD()
MATCH_REDISP(wxPliOvl_wpen, SetPenPen)
MATCH_REDISP(wxPliOvl_wgpe, SetPenGraphics)
END_OVERLOAD( "Wx::GraphicsContext::SetPen" )
void
wxGraphicsContext::SetPenPen (pen)
wxPen* pen
CODE:
THIS->SetPen( *pen );
void
wxGraphicsContext::SetPenGraphics (pen)
wxGraphicsPen* pen
CODE:
THIS->SetPen( *pen );
void
wxGraphicsContext::StrokeLine (x1,y1,x2,y2)
wxDouble x1
wxDouble y1
wxDouble x2
wxDouble y2
##Used wpoi's for overload checking as opposed to arr's
##We want array references (which wpoi matches) but arr
##causes some problems...
void
wxGraphicsContext::StrokeLines ( ... )
PPCODE:
BEGIN_OVERLOAD()
MATCH_REDISP(wxPliOvl_wpoi_wpoi, StrokeLinesTwo)
MATCH_REDISP(wxPliOvl_wpoi, StrokeLinesOne)
END_OVERLOAD( "Wx::GraphicsContext::StrokeLines" )
void
wxGraphicsContext::StrokeLinesOne ( points )
SV* points
CODE:
wxPliArrayGuard<wxPoint2DDouble> points2d;
int n = wxPli_av_2_point2ddoublearray(aTHX_ points, points2d.lvalue());
THIS->StrokeLines(n,points2d);
void
wxGraphicsContext::StrokeLinesTwo ( beginPoints, endPoints )
SV* beginPoints
SV* endPoints
CODE:
wxPliArrayGuard<wxPoint2DDouble> beginPoints2d, endPoints2d;
int n1 = wxPli_av_2_point2ddoublearray(aTHX_ beginPoints, beginPoints2d.lvalue());
int n2 = wxPli_av_2_point2ddoublearray(aTHX_ endPoints, endPoints2d.lvalue());
THIS->StrokeLines(wxMin(n1, n2), beginPoints2d, endPoints2d);
void
wxGraphicsContext::PopState()
void
wxGraphicsContext::PushState()
#endif