From: <hba...@us...> - 2008-08-20 00:29:30
|
Revision: 8683 http://plplot.svn.sourceforge.net/plplot/?rev=8683&view=rev Author: hbabcock Date: 2008-08-20 00:29:40 +0000 (Wed, 20 Aug 2008) Log Message: ----------- Fixed the argument list for plRotationShear to reflect the recent changes due to the changes in plptex3. Modified Paths: -------------- trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_agg.cpp trunk/drivers/wxwidgets_dc.cpp trunk/drivers/wxwidgets_gc.cpp Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2008-08-19 19:58:15 UTC (rev 8682) +++ trunk/drivers/wxwidgets.h 2008-08-20 00:29:40 UTC (rev 8683) @@ -166,6 +166,7 @@ PLINT posX, posY; PLFLT rotation, cos_rot, sin_rot; PLFLT shear, cos_shear, sin_shear; + PLFLT stride; }; Modified: trunk/drivers/wxwidgets_agg.cpp =================================================================== --- trunk/drivers/wxwidgets_agg.cpp 2008-08-19 19:58:15 UTC (rev 8682) +++ trunk/drivers/wxwidgets_agg.cpp 2008-08-20 00:29:40 UTC (rev 8683) @@ -279,7 +279,7 @@ fontSize = pls->chrht * DEVICE_PIXELS_PER_MM * 1.2; /* calculate rotation of text */ - plRotationShear( args->xform, &rotation, &shear ); + plRotationShear( args->xform, &rotation, &shear, &stride); rotation -= pls->diorot * M_PI / 2.0; cos_rot = cos( rotation ); sin_rot = sin( rotation ); Modified: trunk/drivers/wxwidgets_dc.cpp =================================================================== --- trunk/drivers/wxwidgets_dc.cpp 2008-08-19 19:58:15 UTC (rev 8682) +++ trunk/drivers/wxwidgets_dc.cpp 2008-08-20 00:29:40 UTC (rev 8683) @@ -298,7 +298,7 @@ fontSize = pls->chrht * VIRTUAL_PIXELS_PER_MM/scaley * 1.3; /* calculate rotation of text */ - plRotationShear( args->xform, &rotation, &shear ); + plRotationShear( args->xform, &rotation, &shear, &stride); rotation -= pls->diorot * M_PI / 2.0; cos_rot = cos( rotation ); sin_rot = sin( rotation ); Modified: trunk/drivers/wxwidgets_gc.cpp =================================================================== --- trunk/drivers/wxwidgets_gc.cpp 2008-08-19 19:58:15 UTC (rev 8682) +++ trunk/drivers/wxwidgets_gc.cpp 2008-08-20 00:29:40 UTC (rev 8683) @@ -339,7 +339,7 @@ textBlue=pls->cmap0[pls->icol0].b; /* calculate rotation of text */ - plRotationShear( args->xform, &rotation, &shear ); + plRotationShear( args->xform, &rotation, &shear, &stride); rotation -= pls->diorot * M_PI / 2.0; cos_rot = cos( rotation ); sin_rot = sin( rotation ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-08-26 13:40:55
|
Revision: 8714 http://plplot.svn.sourceforge.net/plplot/?rev=8714&view=rev Author: smekal Date: 2008-08-26 13:41:03 +0000 (Tue, 26 Aug 2008) Log Message: ----------- Some methods are only available if freetype library is present to prevent compiler errors. Modified Paths: -------------- trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_agg.cpp trunk/drivers/wxwidgets_dc.cpp trunk/drivers/wxwidgets_gc.cpp Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2008-08-26 09:02:42 UTC (rev 8713) +++ trunk/drivers/wxwidgets.h 2008-08-26 13:41:03 UTC (rev 8714) @@ -103,9 +103,11 @@ virtual void SetColor0( PLStream *pls )=0; virtual void SetColor1( PLStream *pls )=0; virtual void SetExternalBuffer( void* buffer )=0; +#ifdef HAVE_FREETYPE virtual void PutPixel( short x, short y, PLINT color )=0; virtual void PutPixel( short x, short y )=0; virtual PLINT GetPixel( short x, short y )=0; +#endif // HAVE_FREETYPE virtual void ProcessString( PLStream* pls, EscText* args )=0; virtual void PSDrawText( PLUNICODE* ucs4, int ucs4Len, bool drawText ); virtual void PSDrawTextToDC( char* utf8_string, bool drawText )=0; @@ -186,9 +188,11 @@ void SetColor0( PLStream *pls ); void SetColor1( PLStream *pls ); void SetExternalBuffer( void* buffer ); +#ifdef HAVE_FREETYPE void PutPixel( short x, short y, PLINT color ); void PutPixel( short x, short y ); PLINT GetPixel( short x, short y ); +#endif // HAVE_FREETYPE void ProcessString( PLStream* pls, EscText* args ); void PSDrawTextToDC( char* utf8_string, bool drawText ); void PSSetFont( PLUNICODE fci ); @@ -238,9 +242,11 @@ void SetColor0( PLStream *pls ); void SetColor1( PLStream *pls ); void SetExternalBuffer( void* buffer ); +#ifdef HAVE_FREETYPE void PutPixel( short x, short y, PLINT color ); void PutPixel( short x, short y ); PLINT GetPixel( short x, short y ); +#endif // HAVE_FREETYPE void ProcessString( PLStream* pls, EscText* args ); void PSDrawTextToDC( char* utf8_string, bool drawText ); void PSSetFont( PLUNICODE fci ); @@ -283,9 +289,11 @@ void SetColor0( PLStream *pls ); void SetColor1( PLStream *pls ); void SetExternalBuffer( void* buffer ); +#ifdef HAVE_FREETYPE void PutPixel( short x, short y, PLINT color ); void PutPixel( short x, short y ); PLINT GetPixel( short x, short y ); +#endif // HAVE_FREETYPE void ProcessString( PLStream* pls, EscText* args ); void PSDrawTextToDC( char* utf8_string, bool drawText ); void PSSetFont( PLUNICODE fci ); Modified: trunk/drivers/wxwidgets_agg.cpp =================================================================== --- trunk/drivers/wxwidgets_agg.cpp 2008-08-26 09:02:42 UTC (rev 8713) +++ trunk/drivers/wxwidgets_agg.cpp 2008-08-26 13:41:03 UTC (rev 8714) @@ -230,6 +230,9 @@ ownGUI = false; } + +#ifdef HAVE_FREETYPE + void wxPLDevAGG::PutPixel( short x, short y, PLINT color ) { m_buffer->SetRGB( x, y, GetRValue(color), GetGValue(color), GetBValue(color) ); @@ -245,6 +248,9 @@ return RGB( m_buffer->GetRed( x, y ), m_buffer->GetGreen( x, y ), m_buffer->GetBlue( x, y ) ); } +#endif // HAVE_FREETYPE + + void wxPLDevAGG::PSDrawTextToDC( char* utf8_string, bool drawText ) { memset( utf8_string, '\0', max_string_length ); Modified: trunk/drivers/wxwidgets_dc.cpp =================================================================== --- trunk/drivers/wxwidgets_dc.cpp 2008-08-26 09:02:42 UTC (rev 8713) +++ trunk/drivers/wxwidgets_dc.cpp 2008-08-26 13:41:03 UTC (rev 8714) @@ -212,6 +212,8 @@ } +#ifdef HAVE_FREETYPE + void wxPLDevDC::PutPixel( short x, short y, PLINT color ) { const wxPen oldpen=m_dc->GetPen(); @@ -245,7 +247,9 @@ #endif } +#endif // HAVE_FREETYPE + void wxPLDevDC::PSDrawTextToDC( char* utf8_string, bool drawText ) { wxCoord w, h, d, l; Modified: trunk/drivers/wxwidgets_gc.cpp =================================================================== --- trunk/drivers/wxwidgets_gc.cpp 2008-08-26 09:02:42 UTC (rev 8713) +++ trunk/drivers/wxwidgets_gc.cpp 2008-08-26 13:41:03 UTC (rev 8714) @@ -240,6 +240,8 @@ } +#ifdef HAVE_FREETYPE + void wxPLDevGC::PutPixel( short x, short y, PLINT color ) { // Log_Verbose( "%s", __FUNCTION__ ); @@ -277,6 +279,9 @@ #endif } +#endif // HAVE_FREETYPE + + void wxPLDevGC::PSDrawTextToDC( char* utf8_string, bool drawText ) { // Log_Verbose( "%s", __FUNCTION__ ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2008-10-05 01:04:47
|
Revision: 8854 http://plplot.svn.sourceforge.net/plplot/?rev=8854&view=rev Author: airwin Date: 2008-10-05 01:00:26 +0000 (Sun, 05 Oct 2008) Log Message: ----------- Replace PIXELS_X (which is 32768) by PIXELS_X-1 to avoid overflowing PLplot core coordinates. This bug resulted in coordinate overflows for example 6 where the grid goes exactly to the edge of the physical device in the X direction. Change tested for gd, cairo, and svg device drivers, but applied to cgm and wingcc device drivers as well. Modified Paths: -------------- trunk/drivers/cairo.c trunk/drivers/cgm.c trunk/drivers/gd.c trunk/drivers/svg.c trunk/drivers/wingcc.c Modified: trunk/drivers/cairo.c =================================================================== --- trunk/drivers/cairo.c 2008-10-04 22:24:59 UTC (rev 8853) +++ trunk/drivers/cairo.c 2008-10-05 01:00:26 UTC (rev 8854) @@ -674,7 +674,7 @@ /* Calculate ratio of (smaller) external coordinates used for cairo devices to (larger) internal PLplot coordinates. */ if (pls->xlength > pls->ylength) - downscale = (PLFLT)pls->xlength/(PLFLT)PIXELS_X; + downscale = (PLFLT)pls->xlength/(PLFLT)(PIXELS_X-1); else downscale = (PLFLT)pls->ylength/(PLFLT)PIXELS_Y; plP_setphy((PLINT) 0, (PLINT) (pls->xlength / downscale), (PLINT) 0, (PLINT) (pls->ylength / downscale)); Modified: trunk/drivers/cgm.c =================================================================== --- trunk/drivers/cgm.c 2008-10-04 22:24:59 UTC (rev 8853) +++ trunk/drivers/cgm.c 2008-10-05 01:00:26 UTC (rev 8854) @@ -259,7 +259,7 @@ if (dev->cgmx>dev->cgmy) /* Work out the scaling factor for the */ { /* "virtual" (oversized) page */ - dev->scale=PIXELS_X/dev->cgmx; + dev->scale=(PIXELS_X-1)/dev->cgmx; } else { Modified: trunk/drivers/gd.c =================================================================== --- trunk/drivers/gd.c 2008-10-04 22:24:59 UTC (rev 8853) +++ trunk/drivers/gd.c 2008-10-05 01:00:26 UTC (rev 8854) @@ -505,7 +505,7 @@ if (dev->pngx>dev->pngy) /* Work out the scaling factor for the */ { /* "virtual" (oversized) page */ - dev->scale=(PLFLT)PIXELS_X/(PLFLT)dev->pngx; + dev->scale=(PLFLT)(PIXELS_X-1)/(PLFLT)dev->pngx; } else { @@ -661,7 +661,7 @@ if (dev->pngx>dev->pngy) /* Work out the scaling factor for the */ { /* "virtual" (oversized) page */ - dev->scale=(PLFLT)PIXELS_X/(PLFLT)dev->pngx; + dev->scale=(PLFLT)(PIXELS_X-1)/(PLFLT)dev->pngx; } else { Modified: trunk/drivers/svg.c =================================================================== --- trunk/drivers/svg.c 2008-10-04 22:24:59 UTC (rev 8853) +++ trunk/drivers/svg.c 2008-10-05 01:00:26 UTC (rev 8854) @@ -172,7 +172,7 @@ /* Calculate ratio of (larger) internal PLplot coordinates to external coordinates used for svg file. */ if (canvasXSize > canvasYSize) - scale = (PLFLT)PIXELS_X/(PLFLT)canvasXSize; + scale = (PLFLT)(PIXELS_X-1)/(PLFLT)canvasXSize; else scale = (PLFLT)PIXELS_Y/(PLFLT)canvasYSize; /* to return to old behaviour use Modified: trunk/drivers/wingcc.c =================================================================== --- trunk/drivers/wingcc.c 2008-10-04 22:24:59 UTC (rev 8853) +++ trunk/drivers/wingcc.c 2008-10-05 01:00:26 UTC (rev 8854) @@ -616,7 +616,7 @@ if (dev->width>dev->height) /* Work out the scaling factor for the */ { /* "virtual" (oversized) page */ - dev->scale=(PLFLT)PIXELS_X/dev->width; + dev->scale=(PLFLT)(PIXELS_X-1)/dev->width; } else { @@ -1010,7 +1010,7 @@ dev->height=dev->rect.bottom; if (dev->width>dev->height) /* Work out the scaling factor for the */ { /* "virtual" (oversized) page */ - dev->scale=(PLFLT)PIXELS_X/dev->width; + dev->scale=(PLFLT)(PIXELS_X-1)/dev->width; } else { @@ -1300,7 +1300,7 @@ if (dev->width>dev->height) /* Work out the scaling factor for the */ { /* "virtual" (oversized) page */ - dev->scale=(PLFLT)PIXELS_X/dev->width; + dev->scale=(PLFLT)(PIXELS_X-1)/dev->width; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-10-09 14:44:44
|
Revision: 8865 http://plplot.svn.sourceforge.net/plplot/?rev=8865&view=rev Author: smekal Date: 2008-10-09 14:44:32 +0000 (Thu, 09 Oct 2008) Log Message: ----------- Changed all PLDLLEXPORT macros to the correct PLDLLIMPEXP macro to allow compilation of static libraries on Win32. Modified Paths: -------------- trunk/drivers/aqt.c trunk/drivers/cairo.c trunk/drivers/cgm.c trunk/drivers/dg300.c trunk/drivers/gcw.c trunk/drivers/gd.c trunk/drivers/gnome.c trunk/drivers/hpgl.c trunk/drivers/impress.c trunk/drivers/linuxvga.c trunk/drivers/ljii.c trunk/drivers/ljiip.c trunk/drivers/mem.c trunk/drivers/ntk.c trunk/drivers/null.c trunk/drivers/pbm.c trunk/drivers/pdf.c trunk/drivers/plmeta.c trunk/drivers/ps.c trunk/drivers/pstex.c trunk/drivers/psttf.cc trunk/drivers/svg.c trunk/drivers/tek.c trunk/drivers/tk.c trunk/drivers/tkwin.c trunk/drivers/wingcc.c trunk/drivers/wxwidgets.cpp trunk/drivers/xfig.c trunk/drivers/xwin.c trunk/drivers/xwinttf.c Modified: trunk/drivers/aqt.c =================================================================== --- trunk/drivers/aqt.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/aqt.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -51,7 +51,7 @@ static NSAutoreleasePool *arpool; /* Objective-C autorelease pool */ static id adapter; /* Adapter object */ -PLDLLEXPORT const char* plD_DEVICE_INFO_aqt = "aqt:AquaTerm (Mac OS X):1:aqt:50:aqt"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_aqt = "aqt:AquaTerm (Mac OS X):1:aqt:50:aqt"; static int currentPlot = 0; static int maxWindows = 30; @@ -186,7 +186,7 @@ /* PLplot interface functions */ -PLDLLEXPORT void plD_dispatch_init_aqt (PLDispatchTable *pdt); +PLDLLIMPEXP void plD_dispatch_init_aqt (PLDispatchTable *pdt); void plD_init_aqt (PLStream *); void plD_line_aqt (PLStream *, short, short, short, short); void plD_polyline_aqt (PLStream *, short *, short *, PLINT); Modified: trunk/drivers/cairo.c =================================================================== --- trunk/drivers/cairo.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/cairo.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -99,7 +99,7 @@ #endif } PLCairo; -PLDLLEXPORT const char* plD_DEVICE_INFO_cairo = +PLDLLIMPEXP const char* plD_DEVICE_INFO_cairo = #if defined(PLD_xcairo) "xcairo:Cairo X Windows Driver:1:cairo:59:xcairo\n" #endif @@ -838,7 +838,7 @@ static int XScreen; static Window rootWindow; -PLDLLEXPORT void plD_dispatch_init_xcairo (PLDispatchTable *pdt); +PLDLLIMPEXP void plD_dispatch_init_xcairo (PLDispatchTable *pdt); void plD_init_xcairo (PLStream *); void plD_eop_xcairo (PLStream *); void plD_tidy_xcairo (PLStream *); @@ -1169,7 +1169,7 @@ #if defined(PLD_pdfcairo) -PLDLLEXPORT void plD_dispatch_init_pdfcairo (PLDispatchTable *pdt); +PLDLLIMPEXP void plD_dispatch_init_pdfcairo (PLDispatchTable *pdt); void plD_init_pdfcairo (PLStream *); /*--------------------------------------------------------------------- @@ -1241,7 +1241,7 @@ #if defined(PLD_pscairo) -PLDLLEXPORT void plD_dispatch_init_pscairo (PLDispatchTable *pdt); +PLDLLIMPEXP void plD_dispatch_init_pscairo (PLDispatchTable *pdt); void plD_init_pscairo (PLStream *); /*--------------------------------------------------------------------- @@ -1315,7 +1315,7 @@ #if defined(PLD_svgcairo) -PLDLLEXPORT void plD_dispatch_init_svgcairo (PLDispatchTable *pdt); +PLDLLIMPEXP void plD_dispatch_init_svgcairo (PLDispatchTable *pdt); void plD_init_svgcairo (PLStream *); /*--------------------------------------------------------------------- @@ -1405,7 +1405,7 @@ #if defined(PLD_pngcairo) -PLDLLEXPORT void plD_dispatch_init_pngcairo (PLDispatchTable *pdt); +PLDLLIMPEXP void plD_dispatch_init_pngcairo (PLDispatchTable *pdt); void plD_init_pngcairo (PLStream *); void plD_eop_pngcairo (PLStream *); @@ -1510,7 +1510,7 @@ #if defined(PLD_memcairo) -PLDLLEXPORT void plD_dispatch_init_memcairo (PLDispatchTable *pdt); +PLDLLIMPEXP void plD_dispatch_init_memcairo (PLDispatchTable *pdt); void plD_init_memcairo (PLStream *); void plD_eop_memcairo (PLStream *); void plD_bop_memcairo (PLStream *); @@ -1699,7 +1699,7 @@ #if defined(PLD_extcairo) -PLDLLEXPORT void plD_dispatch_init_extcairo (PLDispatchTable *pdt); +PLDLLIMPEXP void plD_dispatch_init_extcairo (PLDispatchTable *pdt); void plD_init_extcairo (PLStream *); void plD_bop_extcairo (PLStream *); void plD_eop_extcairo (PLStream *); Modified: trunk/drivers/cgm.c =================================================================== --- trunk/drivers/cgm.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/cgm.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -81,7 +81,7 @@ #include <cd.h> /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_cgm = "cgm:CGM file:0:cgm:44:cgm"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_cgm = "cgm:CGM file:0:cgm:44:cgm"; /* Prototypes for functions in this file. */ @@ -157,7 +157,7 @@ void plD_esc_cgm (PLStream *, PLINT, void *); -PLDLLEXPORT void plD_dispatch_init_cgm( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_cgm( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "CGM (Computer Graphics metafile) file"; Modified: trunk/drivers/dg300.c =================================================================== --- trunk/drivers/dg300.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/dg300.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -10,9 +10,9 @@ #include "drivers.h" /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_dg300 = "dg300:DG300 Terminal:0:dg300:25:dg300"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_dg300 = "dg300:DG300 Terminal:0:dg300:25:dg300"; -PLDLLEXPORT void plD_dispatch_init_dg ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_dg ( PLDispatchTable *pdt ); void plD_init_dg (PLStream *); void plD_line_dg (PLStream *, short, short, short, short); Modified: trunk/drivers/gcw.c =================================================================== --- trunk/drivers/gcw.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/gcw.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -87,7 +87,7 @@ /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_gcw = "gcw:Gnome Canvas Widget:1:gcw:10:gcw"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_gcw = "gcw:Gnome Canvas Widget:1:gcw:10:gcw"; /* Global driver options */ @@ -139,7 +139,7 @@ void plD_state_gcw(PLStream *, PLINT); void plD_esc_gcw(PLStream *, PLINT, void *); -PLDLLEXPORT void plD_dispatch_init_gcw( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_gcw( PLDispatchTable *pdt ) { #ifdef DEBUG_GCW_1 Modified: trunk/drivers/gd.c =================================================================== --- trunk/drivers/gd.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/gd.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -132,7 +132,7 @@ * and finally one of each. */ -PLDLLEXPORT const char* plD_DEVICE_INFO_gd = +PLDLLIMPEXP const char* plD_DEVICE_INFO_gd = #if defined(PLD_png) "png:PNG file:0:gd:39:png\n" #endif @@ -280,7 +280,7 @@ #ifdef PLD_png -PLDLLEXPORT void plD_dispatch_init_png( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_png( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "PNG file"; @@ -302,7 +302,7 @@ #ifdef PLD_jpeg -PLDLLEXPORT void plD_dispatch_init_jpeg( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_jpeg( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "JPEG File"; @@ -324,7 +324,7 @@ #ifdef PLD_gif -PLDLLEXPORT void plD_dispatch_init_gif( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_gif( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "GIF File"; Modified: trunk/drivers/gnome.c =================================================================== --- trunk/drivers/gnome.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/gnome.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -39,7 +39,7 @@ #include <unistd.h> /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_gnome = "gnome:Gnome Canvas:1:gnome:6:gnome"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_gnome = "gnome:Gnome Canvas:1:gnome:6:gnome"; /*#undef DEBUG*/ #define DEBUG @@ -773,7 +773,7 @@ void plD_state_gnome (PLStream *, PLINT); void plD_esc_gnome (PLStream *, PLINT, void *); -PLDLLEXPORT void plD_dispatch_init_gnome( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_gnome( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "Gnome Canvas"; Modified: trunk/drivers/hpgl.c =================================================================== --- trunk/drivers/hpgl.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/hpgl.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -37,7 +37,7 @@ #include "drivers.h" /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_hpgl = +PLDLLIMPEXP const char* plD_DEVICE_INFO_hpgl = #if defined(PLD_hp7470) "hp7470:HP 7470 Plotter File (HPGL Cartridge, Small Plotter):0:hpgl:34:hp7470\n" #endif @@ -137,7 +137,7 @@ #ifdef PLD_hp7470 void plD_init_hp7470 (PLStream *); -PLDLLEXPORT void plD_dispatch_init_hp7470( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_hp7470( PLDispatchTable *pdt ) { hpgl_dispatch_init_helper( pdt, "HP 7470 Plotter File (HPGL Cartridge, Small Plotter)", @@ -173,7 +173,7 @@ #ifdef PLD_hp7580 void plD_init_hp7580 (PLStream *); -PLDLLEXPORT void plD_dispatch_init_hp7580( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_hp7580( PLDispatchTable *pdt ) { hpgl_dispatch_init_helper( pdt, "HP 7580 Plotter File (Large Plotter)", "hp7580", Modified: trunk/drivers/impress.c =================================================================== --- trunk/drivers/impress.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/impress.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -10,11 +10,11 @@ #include "drivers.h" /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_impress = "imp:Impress File:0:impress:37:imp"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_impress = "imp:Impress File:0:impress:37:imp"; /* Function prototypes */ -PLDLLEXPORT void plD_dispatch_init_imp ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_imp ( PLDispatchTable *pdt ); void plD_init_imp (PLStream *); void plD_line_imp (PLStream *, short, short, short, short); Modified: trunk/drivers/linuxvga.c =================================================================== --- trunk/drivers/linuxvga.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/linuxvga.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -18,7 +18,7 @@ #include <vga.h> /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_linuxvga = "linuxvga:Linux VGA driver:0:linuxvga:8:vga"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_linuxvga = "linuxvga:Linux VGA driver:0:linuxvga:8:vga"; /* Function prototypes */ @@ -59,7 +59,7 @@ static page_state; -PLDLLEXPORT void plD_dispatch_init_vga( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_vga( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "Linux console VGA Screen"; Modified: trunk/drivers/ljii.c =================================================================== --- trunk/drivers/ljii.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/ljii.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -22,12 +22,12 @@ #endif /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_ljii = +PLDLLIMPEXP const char* plD_DEVICE_INFO_ljii = "ljii:LaserJet II Bitmap File (150 dpi):0:ljii:33:ljii"; /* Function prototypes */ -PLDLLEXPORT void plD_dispatch_init_ljii ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_ljii ( PLDispatchTable *pdt ); void plD_init_ljii (PLStream *); void plD_line_ljii (PLStream *, short, short, short, short); Modified: trunk/drivers/ljiip.c =================================================================== --- trunk/drivers/ljiip.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/ljiip.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -27,12 +27,12 @@ #endif /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_ljiip = +PLDLLIMPEXP const char* plD_DEVICE_INFO_ljiip = "ljiip:LaserJet IIp/deskjet compressed graphics:0:ljiip:32:ljiip"; /* Function prototypes */ -PLDLLEXPORT void plD_dispatch_init_ljiip ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_ljiip ( PLDispatchTable *pdt ); void plD_init_ljiip (PLStream *); void plD_line_ljiip (PLStream *, short, short, short, short); Modified: trunk/drivers/mem.c =================================================================== --- trunk/drivers/mem.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/mem.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -21,9 +21,9 @@ #include "drivers.h" /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_mem = "mem:User-supplied memory device:-1:mem:46:mem"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_mem = "mem:User-supplied memory device:-1:mem:46:mem"; -PLDLLEXPORT void plD_dispatch_init_mem ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_mem ( PLDispatchTable *pdt ); void plD_init_mem (PLStream *); void plD_line_mem (PLStream *, short, short, short, short); Modified: trunk/drivers/ntk.c =================================================================== --- trunk/drivers/ntk.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/ntk.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -34,10 +34,10 @@ #include <tk.h> /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_ntk = "ntk:New tk driver:1:ntk:43:ntk"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_ntk = "ntk:New tk driver:1:ntk:43:ntk"; -PLDLLEXPORT void plD_dispatch_init_ntk ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_ntk ( PLDispatchTable *pdt ); void plD_init_ntk (PLStream *); void plD_line_ntk (PLStream *, short, short, short, short); Modified: trunk/drivers/null.c =================================================================== --- trunk/drivers/null.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/null.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -10,9 +10,9 @@ #include "drivers.h" /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_null = "null:Null device:-1:null:42:null"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_null = "null:Null device:-1:null:42:null"; -PLDLLEXPORT void plD_dispatch_init_null ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_null ( PLDispatchTable *pdt ); void plD_init_null (PLStream *); void plD_line_null (PLStream *, short, short, short, short); Modified: trunk/drivers/pbm.c =================================================================== --- trunk/drivers/pbm.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/pbm.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -14,10 +14,10 @@ #include "drivers.h" /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_pbm = "pbm:PDB (PPM) Driver:0:pbm:38:pbm"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_pbm = "pbm:PDB (PPM) Driver:0:pbm:38:pbm"; -PLDLLEXPORT void plD_dispatch_init_pbm ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_pbm ( PLDispatchTable *pdt ); void plD_init_pbm (PLStream *); void plD_line_pbm (PLStream *, short, short, short, short); Modified: trunk/drivers/pdf.c =================================================================== --- trunk/drivers/pdf.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/pdf.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -1,9 +1,9 @@ -/* December 29, 2006 +/* $Id$ - PLplot driver for PDF + PLplot driver for PDF based on the haru library http://www.libharu.org. + + Copyright (C) 2006, 2008 Werner Smekal - Copyright (C) 2006 Werner Smekal - This file is part of PLplot. PLplot is free software; you can redistribute it and/or modify @@ -24,6 +24,7 @@ /* TODO: * - page orientation + * - text clipping */ /*********************************************************************** @@ -87,7 +88,7 @@ } pdfdev; /* local variables */ -PLDLLEXPORT const char* plD_DEVICE_INFO_pdf = "pdf:Portable Document Format PDF:1:pdf:58:pdf"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_pdf = "pdf:Portable Document Format PDF:1:pdf:58:pdf"; static jmp_buf env; /*********************************************************************** @@ -102,7 +103,7 @@ static void process_string( PLStream *, EscText * ); /* PLplot interface functions */ -PLDLLEXPORT void plD_dispatch_init_pdf (PLDispatchTable *pdt); +PLDLLIMPEXP void plD_dispatch_init_pdf (PLDispatchTable *pdt); void plD_init_pdf (PLStream *); void plD_line_pdf (PLStream *, short, short, short, short); void plD_polyline_pdf (PLStream *, short *, short *, PLINT); @@ -263,13 +264,13 @@ dev->pageSize=HPDF_PAGE_SIZE_EOF; if( pageSize==NULL ) dev->pageSize=HPDF_PAGE_SIZE_A4; - else if( !strcmp(pageSize, "letter") ) + else if( !stricmp(pageSize, "letter") ) dev->pageSize=HPDF_PAGE_SIZE_LETTER; - else if( !strcmp(pageSize, "A3") ) + else if( !stricmp(pageSize, "A3") ) dev->pageSize=HPDF_PAGE_SIZE_A3; - else if( !strcmp(pageSize, "A4") ) + else if( !stricmp(pageSize, "A4") ) dev->pageSize=HPDF_PAGE_SIZE_A4; - else if( !strcmp(pageSize, "A5") ) + else if( !stricmp(pageSize, "A5") ) dev->pageSize=HPDF_PAGE_SIZE_A5; if( dev->pageSize==HPDF_PAGE_SIZE_EOF ) @@ -295,7 +296,10 @@ /* add page and set size (default is A4) */ dev->page = HPDF_AddPage( dev->pdf ); - HPDF_Page_SetSize( dev->page, dev->pageSize, HPDF_PAGE_LANDSCAPE ); + if( pls->portrait ) + HPDF_Page_SetSize( dev->page, dev->pageSize, HPDF_PAGE_PORTRAIT ); + else + HPDF_Page_SetSize( dev->page, dev->pageSize, HPDF_PAGE_LANDSCAPE ); /* Determine scaling parameters. */ width=HPDF_Page_GetWidth( dev->page ); /* in pixels/dots */ Modified: trunk/drivers/plmeta.c =================================================================== --- trunk/drivers/plmeta.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/plmeta.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -37,10 +37,10 @@ #include <string.h> /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_plmeta = "plmeta:PLplot Native Meta-File:0:plmeta:26:plm"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_plmeta = "plmeta:PLplot Native Meta-File:0:plmeta:26:plm"; -PLDLLEXPORT void plD_dispatch_init_plm ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_plm ( PLDispatchTable *pdt ); void plD_init_plm (PLStream *); void plD_line_plm (PLStream *, short, short, short, short); Modified: trunk/drivers/ps.c =================================================================== --- trunk/drivers/ps.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/ps.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -49,15 +49,15 @@ /* Device info */ -PLDLLEXPORT const char * plD_DEVICE_INFO_ps = +PLDLLIMPEXP const char * plD_DEVICE_INFO_ps = "ps:PostScript File (monochrome):0:ps:29:psm\n" "psc:PostScript File (color):0:ps:30:psc"; /* Prototypes for functions in this file. */ -PLDLLEXPORT void plD_dispatch_init_psm ( PLDispatchTable *pdt ); -PLDLLEXPORT void plD_dispatch_init_psc ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_psm ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_psc ( PLDispatchTable *pdt ); static char *ps_getdate (void); static void ps_init (PLStream *); Modified: trunk/drivers/pstex.c =================================================================== --- trunk/drivers/pstex.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/pstex.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -12,7 +12,7 @@ #include "ps.h" /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_pstex = +PLDLLIMPEXP const char* plD_DEVICE_INFO_pstex = "pstex:Combined Postscript/LaTeX files:0:pstex:41:pstex"; /*--------------------------------------------------------------------------*\ @@ -32,7 +32,7 @@ "Color Postscript/LaTeX (color=1|0)"}, {NULL, DRV_INT, NULL, NULL}}; -PLDLLEXPORT void plD_dispatch_init_pstex( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_pstex( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr ="Combined Postscript/LaTeX files" ; Modified: trunk/drivers/psttf.cc =================================================================== --- trunk/drivers/psttf.cc 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/psttf.cc 2008-10-09 14:44:32 UTC (rev 8865) @@ -56,15 +56,15 @@ /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_psttf = +PLDLLIMPEXP const char* plD_DEVICE_INFO_psttf = "psttf:PostScript File (monochrome):0:psttf:55:psttfm\n" "psttfc:PostScript File (color):0:psttf:56:psttfc"; /* Prototypes for functions in this file. */ -PLDLLEXPORT void plD_dispatch_init_psttfm ( PLDispatchTable *pdt ); -PLDLLEXPORT void plD_dispatch_init_psttfc ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_psttfm ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_psttfc ( PLDispatchTable *pdt ); static char *ps_getdate (void); static void ps_init (PLStream *); Modified: trunk/drivers/svg.c =================================================================== --- trunk/drivers/svg.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/svg.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -48,7 +48,7 @@ /* local variables */ -PLDLLEXPORT const char* plD_DEVICE_INFO_svg = "svg:Scalable Vector Graphics (SVG 1.1):1:svg:57:svg"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_svg = "svg:Scalable Vector Graphics (SVG 1.1):1:svg:57:svg"; static int canvasXSize = 0; static int canvasYSize = 0; @@ -105,7 +105,7 @@ /* PLplot interface functions */ -PLDLLEXPORT void plD_dispatch_init_svg (PLDispatchTable *pdt); +PLDLLIMPEXP void plD_dispatch_init_svg (PLDispatchTable *pdt); void plD_init_svg (PLStream *); void plD_line_svg (PLStream *, short, short, short, short); void plD_polyline_svg (PLStream *, short *, short *, PLINT); Modified: trunk/drivers/tek.c =================================================================== --- trunk/drivers/tek.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/tek.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -23,7 +23,7 @@ /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_tek = +PLDLLIMPEXP const char* plD_DEVICE_INFO_tek = #if defined(PLD_conex) "conex:Conex vt320/tek emulator:1:tek:24:conex\n" #endif @@ -178,7 +178,7 @@ pdt->pl_esc = (plD_esc_fp) plD_esc_tek; } -PLDLLEXPORT void plD_dispatch_init_xterm ( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_xterm ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Xterm Window", "xterm", @@ -186,7 +186,7 @@ (plD_init_fp) plD_init_xterm ); } -PLDLLEXPORT void plD_dispatch_init_tekt ( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_tekt ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Tektronix Terminal (4010)", "tekt", @@ -194,7 +194,7 @@ (plD_init_fp) plD_init_tekt ); } -PLDLLEXPORT void plD_dispatch_init_tek4107t ( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_tek4107t ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Tektronix Terminal (4105/4107)", "tek4107t", @@ -202,7 +202,7 @@ (plD_init_fp) plD_init_tek4107t ); } -PLDLLEXPORT void plD_dispatch_init_mskermit ( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_mskermit ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "MS-Kermit emulator", "mskermit", @@ -210,7 +210,7 @@ (plD_init_fp) plD_init_mskermit ); } -PLDLLEXPORT void plD_dispatch_init_versaterm( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_versaterm( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Versaterm vt100/tek emulator", "versaterm", @@ -218,7 +218,7 @@ (plD_init_fp) plD_init_versaterm ); } -PLDLLEXPORT void plD_dispatch_init_vlt ( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_vlt ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "VLT vt100/tek emulator", "vlt", @@ -226,7 +226,7 @@ (plD_init_fp) plD_init_vlt ); } -PLDLLEXPORT void plD_dispatch_init_conex ( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_conex ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Conex vt320/tek emulator", "conex", @@ -234,7 +234,7 @@ (plD_init_fp) plD_init_conex ); } -PLDLLEXPORT void plD_dispatch_init_tekf ( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_tekf ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Tektronix File (4010)", "tekf", @@ -242,7 +242,7 @@ (plD_init_fp) plD_init_tekf ); } -PLDLLEXPORT void plD_dispatch_init_tek4107f ( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_tek4107f ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Tektronix File (4105/4107)", "tek4107f", Modified: trunk/drivers/tk.c =================================================================== --- trunk/drivers/tk.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/tk.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -63,7 +63,7 @@ #endif /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_tk = "tk:Tcl/TK Window:1:tk:7:tk"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_tk = "tk:Tcl/TK Window:1:tk:7:tk"; /* Number of instructions to skip between updates */ @@ -89,7 +89,7 @@ /* Driver entry and dispatch setup */ -PLDLLEXPORT void plD_dispatch_init_tk ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_tk ( PLDispatchTable *pdt ); void plD_init_tk (PLStream *); void plD_line_tk (PLStream *, short, short, short, short); Modified: trunk/drivers/tkwin.c =================================================================== --- trunk/drivers/tkwin.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/tkwin.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -80,7 +80,7 @@ #endif /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_tkwin = "tkwin:New tk driver:1:tkwin:45:tkwin"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_tkwin = "tkwin:New tk driver:1:tkwin:45:tkwin"; void * ckcalloc(size_t nmemb, size_t size); @@ -202,7 +202,7 @@ static void StoreCmap1 (PLStream *pls); static void WaitForPage(PLStream *pls); -PLDLLEXPORT void plD_dispatch_init_tkwin ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_tkwin ( PLDispatchTable *pdt ); void plD_init_tkwin (PLStream *); void plD_line_tkwin (PLStream *, short, short, short, short); Modified: trunk/drivers/wingcc.c =================================================================== --- trunk/drivers/wingcc.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/wingcc.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -62,7 +62,7 @@ /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_wingcc = "wingcc:Win32 (GCC):1:wingcc:9:wingcc"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_wingcc = "wingcc:Win32 (GCC):1:wingcc:9:wingcc"; /* Struct to hold device-specific info. */ @@ -112,7 +112,7 @@ } wingcc_Dev; -PLDLLEXPORT void plD_dispatch_init_wingcc ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_wingcc ( PLDispatchTable *pdt ); void plD_init_wingcc (PLStream *); void plD_line_wingcc (PLStream *, short, short, short, short); Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/wxwidgets.cpp 2008-10-09 14:44:32 UTC (rev 8865) @@ -94,14 +94,14 @@ \*----------------------------------------------------------------------*/ /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_wxwidgets = "wxwidgets:wxWidgets DC:1:wxwidgets:51:wxwidgets"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_wxwidgets = "wxwidgets:wxWidgets DC:1:wxwidgets:51:wxwidgets"; /*--------------------------------------------------------------------------*\ * void plD_dispatch_init_wxwidgets( PLDispatchTable *pdt ) * * Make driver functions known to plplot. \*--------------------------------------------------------------------------*/ -PLDLLEXPORT void plD_dispatch_init_wxwidgets( PLDispatchTable *pdt ) +PLDLLIMPEXP void plD_dispatch_init_wxwidgets( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "wxWidgets DC"; Modified: trunk/drivers/xfig.c =================================================================== --- trunk/drivers/xfig.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/xfig.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -10,11 +10,11 @@ #include "drivers.h" /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_xfig = "xfig:Fig file:0:xfig:31:xfig"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_xfig = "xfig:Fig file:0:xfig:31:xfig"; /* Function prototypes */ -PLDLLEXPORT void plD_dispatch_init_xfig ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_xfig ( PLDispatchTable *pdt ); void plD_init_xfig (PLStream *); void plD_line_xfig (PLStream *, short, short, short, short); Modified: trunk/drivers/xwin.c =================================================================== --- trunk/drivers/xwin.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/xwin.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -45,7 +45,7 @@ #endif /* Device info */ -PLDLLEXPORT const char* plD_DEVICE_INFO_xwin = "xwin:X-Window (Xlib):1:xwin:5:xw"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_xwin = "xwin:X-Window (Xlib):1:xwin:5:xw"; static int synchronize = 0; /* change to 1 for X synchronized operation */ /* Use "-drvopt sync" cmd line option to set. */ @@ -126,7 +126,7 @@ /* Driver entry and dispatch setup */ -PLDLLEXPORT void plD_dispatch_init_xw ( PLDispatchTable *pdt ); +PLDLLIMPEXP void plD_dispatch_init_xw ( PLDispatchTable *pdt ); void plD_init_xw (PLStream *); void plD_line_xw (PLStream *, short, short, short, short); Modified: trunk/drivers/xwinttf.c =================================================================== --- trunk/drivers/xwinttf.c 2008-10-08 17:59:43 UTC (rev 8864) +++ trunk/drivers/xwinttf.c 2008-10-09 14:44:32 UTC (rev 8865) @@ -57,7 +57,7 @@ /* local variables */ -PLDLLEXPORT const char* plD_DEVICE_INFO_xwinttf = "xwinttf:TrueType X Windows Driver:1:xwinttf:59:xwinttf"; +PLDLLIMPEXP const char* plD_DEVICE_INFO_xwinttf = "xwinttf:TrueType X Windows Driver:1:xwinttf:59:xwinttf"; static int currentPage = -1; static int XScreen; @@ -126,7 +126,7 @@ /* PLplot interface functions */ -PLDLLEXPORT void plD_dispatch_init_xwinttf (PLDispatchTable *pdt); +PLDLLIMPEXP void plD_dispatch_init_xwinttf (PLDispatchTable *pdt); void plD_init_xwinttf (PLStream *); void plD_line_xwinttf (PLStream *, short, short, short, short); void plD_polyline_xwinttf (PLStream *, short *, short *, PLINT); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2008-10-11 06:15:31
|
Revision: 8882 http://plplot.svn.sourceforge.net/plplot/?rev=8882&view=rev Author: airwin Date: 2008-10-11 06:15:24 +0000 (Sat, 11 Oct 2008) Log Message: ----------- Reduce PLDLLIMPEXP_DRIVER use to the irreducible minimum. Modified Paths: -------------- trunk/drivers/aqt.c trunk/drivers/cairo.c trunk/drivers/cgm.c trunk/drivers/dg300.c trunk/drivers/gcw.c trunk/drivers/gd.c trunk/drivers/gnome.c trunk/drivers/hpgl.c trunk/drivers/impress.c trunk/drivers/linuxvga.c trunk/drivers/ljii.c trunk/drivers/ljiip.c trunk/drivers/mem.c trunk/drivers/ntk.c trunk/drivers/null.c trunk/drivers/pbm.c trunk/drivers/pdf.c trunk/drivers/plmeta.c trunk/drivers/ps.c trunk/drivers/pstex.c trunk/drivers/psttf.cc trunk/drivers/svg.c trunk/drivers/tek.c trunk/drivers/tk.c trunk/drivers/tkwin.c trunk/drivers/wingcc.c trunk/drivers/wxwidgets.cpp trunk/drivers/xfig.c trunk/drivers/xwin.c trunk/drivers/xwinttf.c Modified: trunk/drivers/aqt.c =================================================================== --- trunk/drivers/aqt.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/aqt.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -186,7 +186,7 @@ /* PLplot interface functions */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_aqt (PLDispatchTable *pdt); +void plD_dispatch_init_aqt (PLDispatchTable *pdt); void plD_init_aqt (PLStream *); void plD_line_aqt (PLStream *, short, short, short, short); void plD_polyline_aqt (PLStream *, short *, short *, PLINT); Modified: trunk/drivers/cairo.c =================================================================== --- trunk/drivers/cairo.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/cairo.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -838,7 +838,7 @@ static int XScreen; static Window rootWindow; -PLDLLIMPEXP_DRIVER void plD_dispatch_init_xcairo (PLDispatchTable *pdt); +void plD_dispatch_init_xcairo (PLDispatchTable *pdt); void plD_init_xcairo (PLStream *); void plD_eop_xcairo (PLStream *); void plD_tidy_xcairo (PLStream *); @@ -1169,7 +1169,7 @@ #if defined(PLD_pdfcairo) -PLDLLIMPEXP_DRIVER void plD_dispatch_init_pdfcairo (PLDispatchTable *pdt); +void plD_dispatch_init_pdfcairo (PLDispatchTable *pdt); void plD_init_pdfcairo (PLStream *); /*--------------------------------------------------------------------- @@ -1241,7 +1241,7 @@ #if defined(PLD_pscairo) -PLDLLIMPEXP_DRIVER void plD_dispatch_init_pscairo (PLDispatchTable *pdt); +void plD_dispatch_init_pscairo (PLDispatchTable *pdt); void plD_init_pscairo (PLStream *); /*--------------------------------------------------------------------- @@ -1315,7 +1315,7 @@ #if defined(PLD_svgcairo) -PLDLLIMPEXP_DRIVER void plD_dispatch_init_svgcairo (PLDispatchTable *pdt); +void plD_dispatch_init_svgcairo (PLDispatchTable *pdt); void plD_init_svgcairo (PLStream *); /*--------------------------------------------------------------------- @@ -1405,7 +1405,7 @@ #if defined(PLD_pngcairo) -PLDLLIMPEXP_DRIVER void plD_dispatch_init_pngcairo (PLDispatchTable *pdt); +void plD_dispatch_init_pngcairo (PLDispatchTable *pdt); void plD_init_pngcairo (PLStream *); void plD_eop_pngcairo (PLStream *); @@ -1510,7 +1510,7 @@ #if defined(PLD_memcairo) -PLDLLIMPEXP_DRIVER void plD_dispatch_init_memcairo (PLDispatchTable *pdt); +void plD_dispatch_init_memcairo (PLDispatchTable *pdt); void plD_init_memcairo (PLStream *); void plD_eop_memcairo (PLStream *); void plD_bop_memcairo (PLStream *); @@ -1699,7 +1699,7 @@ #if defined(PLD_extcairo) -PLDLLIMPEXP_DRIVER void plD_dispatch_init_extcairo (PLDispatchTable *pdt); +void plD_dispatch_init_extcairo (PLDispatchTable *pdt); void plD_init_extcairo (PLStream *); void plD_bop_extcairo (PLStream *); void plD_eop_extcairo (PLStream *); Modified: trunk/drivers/cgm.c =================================================================== --- trunk/drivers/cgm.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/cgm.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -157,7 +157,7 @@ void plD_esc_cgm (PLStream *, PLINT, void *); -PLDLLIMPEXP_DRIVER void plD_dispatch_init_cgm( PLDispatchTable *pdt ) +void plD_dispatch_init_cgm( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "CGM (Computer Graphics metafile) file"; Modified: trunk/drivers/dg300.c =================================================================== --- trunk/drivers/dg300.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/dg300.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -12,7 +12,7 @@ /* Device info */ PLDLLIMPEXP_DRIVER const char* plD_DEVICE_INFO_dg300 = "dg300:DG300 Terminal:0:dg300:25:dg300"; -PLDLLIMPEXP_DRIVER void plD_dispatch_init_dg ( PLDispatchTable *pdt ); +void plD_dispatch_init_dg ( PLDispatchTable *pdt ); void plD_init_dg (PLStream *); void plD_line_dg (PLStream *, short, short, short, short); Modified: trunk/drivers/gcw.c =================================================================== --- trunk/drivers/gcw.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/gcw.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -139,7 +139,7 @@ void plD_state_gcw(PLStream *, PLINT); void plD_esc_gcw(PLStream *, PLINT, void *); -PLDLLIMPEXP_DRIVER void plD_dispatch_init_gcw( PLDispatchTable *pdt ) +void plD_dispatch_init_gcw( PLDispatchTable *pdt ) { #ifdef DEBUG_GCW_1 Modified: trunk/drivers/gd.c =================================================================== --- trunk/drivers/gd.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/gd.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -280,7 +280,7 @@ #ifdef PLD_png -PLDLLIMPEXP_DRIVER void plD_dispatch_init_png( PLDispatchTable *pdt ) +void plD_dispatch_init_png( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "PNG file"; @@ -302,7 +302,7 @@ #ifdef PLD_jpeg -PLDLLIMPEXP_DRIVER void plD_dispatch_init_jpeg( PLDispatchTable *pdt ) +void plD_dispatch_init_jpeg( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "JPEG File"; @@ -324,7 +324,7 @@ #ifdef PLD_gif -PLDLLIMPEXP_DRIVER void plD_dispatch_init_gif( PLDispatchTable *pdt ) +void plD_dispatch_init_gif( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "GIF File"; Modified: trunk/drivers/gnome.c =================================================================== --- trunk/drivers/gnome.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/gnome.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -773,7 +773,7 @@ void plD_state_gnome (PLStream *, PLINT); void plD_esc_gnome (PLStream *, PLINT, void *); -PLDLLIMPEXP_DRIVER void plD_dispatch_init_gnome( PLDispatchTable *pdt ) +void plD_dispatch_init_gnome( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "Gnome Canvas"; Modified: trunk/drivers/hpgl.c =================================================================== --- trunk/drivers/hpgl.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/hpgl.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -137,7 +137,7 @@ #ifdef PLD_hp7470 void plD_init_hp7470 (PLStream *); -PLDLLIMPEXP_DRIVER void plD_dispatch_init_hp7470( PLDispatchTable *pdt ) +void plD_dispatch_init_hp7470( PLDispatchTable *pdt ) { hpgl_dispatch_init_helper( pdt, "HP 7470 Plotter File (HPGL Cartridge, Small Plotter)", @@ -173,7 +173,7 @@ #ifdef PLD_hp7580 void plD_init_hp7580 (PLStream *); -PLDLLIMPEXP_DRIVER void plD_dispatch_init_hp7580( PLDispatchTable *pdt ) +void plD_dispatch_init_hp7580( PLDispatchTable *pdt ) { hpgl_dispatch_init_helper( pdt, "HP 7580 Plotter File (Large Plotter)", "hp7580", Modified: trunk/drivers/impress.c =================================================================== --- trunk/drivers/impress.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/impress.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -14,7 +14,7 @@ /* Function prototypes */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_imp ( PLDispatchTable *pdt ); +void plD_dispatch_init_imp ( PLDispatchTable *pdt ); void plD_init_imp (PLStream *); void plD_line_imp (PLStream *, short, short, short, short); Modified: trunk/drivers/linuxvga.c =================================================================== --- trunk/drivers/linuxvga.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/linuxvga.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -59,7 +59,7 @@ static page_state; -PLDLLIMPEXP_DRIVER void plD_dispatch_init_vga( PLDispatchTable *pdt ) +void plD_dispatch_init_vga( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "Linux console VGA Screen"; Modified: trunk/drivers/ljii.c =================================================================== --- trunk/drivers/ljii.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/ljii.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -27,7 +27,7 @@ /* Function prototypes */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_ljii ( PLDispatchTable *pdt ); +void plD_dispatch_init_ljii ( PLDispatchTable *pdt ); void plD_init_ljii (PLStream *); void plD_line_ljii (PLStream *, short, short, short, short); Modified: trunk/drivers/ljiip.c =================================================================== --- trunk/drivers/ljiip.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/ljiip.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -32,7 +32,7 @@ /* Function prototypes */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_ljiip ( PLDispatchTable *pdt ); +void plD_dispatch_init_ljiip ( PLDispatchTable *pdt ); void plD_init_ljiip (PLStream *); void plD_line_ljiip (PLStream *, short, short, short, short); Modified: trunk/drivers/mem.c =================================================================== --- trunk/drivers/mem.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/mem.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -23,7 +23,7 @@ /* Device info */ PLDLLIMPEXP_DRIVER const char* plD_DEVICE_INFO_mem = "mem:User-supplied memory device:-1:mem:46:mem"; -PLDLLIMPEXP_DRIVER void plD_dispatch_init_mem ( PLDispatchTable *pdt ); +void plD_dispatch_init_mem ( PLDispatchTable *pdt ); void plD_init_mem (PLStream *); void plD_line_mem (PLStream *, short, short, short, short); Modified: trunk/drivers/ntk.c =================================================================== --- trunk/drivers/ntk.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/ntk.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -37,7 +37,7 @@ PLDLLIMPEXP_DRIVER const char* plD_DEVICE_INFO_ntk = "ntk:New tk driver:1:ntk:43:ntk"; -PLDLLIMPEXP_DRIVER void plD_dispatch_init_ntk ( PLDispatchTable *pdt ); +void plD_dispatch_init_ntk ( PLDispatchTable *pdt ); void plD_init_ntk (PLStream *); void plD_line_ntk (PLStream *, short, short, short, short); Modified: trunk/drivers/null.c =================================================================== --- trunk/drivers/null.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/null.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -12,7 +12,7 @@ /* Device info */ PLDLLIMPEXP_DRIVER const char* plD_DEVICE_INFO_null = "null:Null device:-1:null:42:null"; -PLDLLIMPEXP_DRIVER void plD_dispatch_init_null ( PLDispatchTable *pdt ); +void plD_dispatch_init_null ( PLDispatchTable *pdt ); void plD_init_null (PLStream *); void plD_line_null (PLStream *, short, short, short, short); Modified: trunk/drivers/pbm.c =================================================================== --- trunk/drivers/pbm.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/pbm.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -17,7 +17,7 @@ PLDLLIMPEXP_DRIVER const char* plD_DEVICE_INFO_pbm = "pbm:PDB (PPM) Driver:0:pbm:38:pbm"; -PLDLLIMPEXP_DRIVER void plD_dispatch_init_pbm ( PLDispatchTable *pdt ); +void plD_dispatch_init_pbm ( PLDispatchTable *pdt ); void plD_init_pbm (PLStream *); void plD_line_pbm (PLStream *, short, short, short, short); Modified: trunk/drivers/pdf.c =================================================================== --- trunk/drivers/pdf.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/pdf.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -103,7 +103,7 @@ static void process_string( PLStream *, EscText * ); /* PLplot interface functions */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_pdf (PLDispatchTable *pdt); +void plD_dispatch_init_pdf (PLDispatchTable *pdt); void plD_init_pdf (PLStream *); void plD_line_pdf (PLStream *, short, short, short, short); void plD_polyline_pdf (PLStream *, short *, short *, PLINT); Modified: trunk/drivers/plmeta.c =================================================================== --- trunk/drivers/plmeta.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/plmeta.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -40,7 +40,7 @@ PLDLLIMPEXP_DRIVER const char* plD_DEVICE_INFO_plmeta = "plmeta:PLplot Native Meta-File:0:plmeta:26:plm"; -PLDLLIMPEXP_DRIVER void plD_dispatch_init_plm ( PLDispatchTable *pdt ); +void plD_dispatch_init_plm ( PLDispatchTable *pdt ); void plD_init_plm (PLStream *); void plD_line_plm (PLStream *, short, short, short, short); Modified: trunk/drivers/ps.c =================================================================== --- trunk/drivers/ps.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/ps.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -49,15 +49,15 @@ /* Device info */ -PLDLLIMPEXP_DRIVER const char * plD_DEVICE_INFO_ps = +PLDLLIMPEXP_DRIVER const char* plD_DEVICE_INFO_ps = "ps:PostScript File (monochrome):0:ps:29:psm\n" "psc:PostScript File (color):0:ps:30:psc"; /* Prototypes for functions in this file. */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_psm ( PLDispatchTable *pdt ); -PLDLLIMPEXP_DRIVER void plD_dispatch_init_psc ( PLDispatchTable *pdt ); +void plD_dispatch_init_psm ( PLDispatchTable *pdt ); +void plD_dispatch_init_psc ( PLDispatchTable *pdt ); static char *ps_getdate (void); static void ps_init (PLStream *); Modified: trunk/drivers/pstex.c =================================================================== --- trunk/drivers/pstex.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/pstex.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -32,7 +32,7 @@ "Color Postscript/LaTeX (color=1|0)"}, {NULL, DRV_INT, NULL, NULL}}; -PLDLLIMPEXP_DRIVER void plD_dispatch_init_pstex( PLDispatchTable *pdt ) +void plD_dispatch_init_pstex( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr ="Combined Postscript/LaTeX files" ; Modified: trunk/drivers/psttf.cc =================================================================== --- trunk/drivers/psttf.cc 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/psttf.cc 2008-10-11 06:15:24 UTC (rev 8882) @@ -63,8 +63,8 @@ /* Prototypes for functions in this file. */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_psttfm ( PLDispatchTable *pdt ); -PLDLLIMPEXP_DRIVER void plD_dispatch_init_psttfc ( PLDispatchTable *pdt ); +void plD_dispatch_init_psttfm ( PLDispatchTable *pdt ); +void plD_dispatch_init_psttfc ( PLDispatchTable *pdt ); static char *ps_getdate (void); static void ps_init (PLStream *); Modified: trunk/drivers/svg.c =================================================================== --- trunk/drivers/svg.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/svg.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -105,7 +105,7 @@ /* PLplot interface functions */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_svg (PLDispatchTable *pdt); +void plD_dispatch_init_svg (PLDispatchTable *pdt); void plD_init_svg (PLStream *); void plD_line_svg (PLStream *, short, short, short, short); void plD_polyline_svg (PLStream *, short *, short *, PLINT); Modified: trunk/drivers/tek.c =================================================================== --- trunk/drivers/tek.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/tek.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -178,7 +178,7 @@ pdt->pl_esc = (plD_esc_fp) plD_esc_tek; } -PLDLLIMPEXP_DRIVER void plD_dispatch_init_xterm ( PLDispatchTable *pdt ) +void plD_dispatch_init_xterm ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Xterm Window", "xterm", @@ -186,7 +186,7 @@ (plD_init_fp) plD_init_xterm ); } -PLDLLIMPEXP_DRIVER void plD_dispatch_init_tekt ( PLDispatchTable *pdt ) +void plD_dispatch_init_tekt ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Tektronix Terminal (4010)", "tekt", @@ -194,7 +194,7 @@ (plD_init_fp) plD_init_tekt ); } -PLDLLIMPEXP_DRIVER void plD_dispatch_init_tek4107t ( PLDispatchTable *pdt ) +void plD_dispatch_init_tek4107t ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Tektronix Terminal (4105/4107)", "tek4107t", @@ -202,7 +202,7 @@ (plD_init_fp) plD_init_tek4107t ); } -PLDLLIMPEXP_DRIVER void plD_dispatch_init_mskermit ( PLDispatchTable *pdt ) +void plD_dispatch_init_mskermit ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "MS-Kermit emulator", "mskermit", @@ -210,7 +210,7 @@ (plD_init_fp) plD_init_mskermit ); } -PLDLLIMPEXP_DRIVER void plD_dispatch_init_versaterm( PLDispatchTable *pdt ) +void plD_dispatch_init_versaterm( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Versaterm vt100/tek emulator", "versaterm", @@ -218,7 +218,7 @@ (plD_init_fp) plD_init_versaterm ); } -PLDLLIMPEXP_DRIVER void plD_dispatch_init_vlt ( PLDispatchTable *pdt ) +void plD_dispatch_init_vlt ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "VLT vt100/tek emulator", "vlt", @@ -226,7 +226,7 @@ (plD_init_fp) plD_init_vlt ); } -PLDLLIMPEXP_DRIVER void plD_dispatch_init_conex ( PLDispatchTable *pdt ) +void plD_dispatch_init_conex ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Conex vt320/tek emulator", "conex", @@ -234,7 +234,7 @@ (plD_init_fp) plD_init_conex ); } -PLDLLIMPEXP_DRIVER void plD_dispatch_init_tekf ( PLDispatchTable *pdt ) +void plD_dispatch_init_tekf ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Tektronix File (4010)", "tekf", @@ -242,7 +242,7 @@ (plD_init_fp) plD_init_tekf ); } -PLDLLIMPEXP_DRIVER void plD_dispatch_init_tek4107f ( PLDispatchTable *pdt ) +void plD_dispatch_init_tek4107f ( PLDispatchTable *pdt ) { tek_dispatch_init_helper( pdt, "Tektronix File (4105/4107)", "tek4107f", Modified: trunk/drivers/tk.c =================================================================== --- trunk/drivers/tk.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/tk.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -89,7 +89,7 @@ /* Driver entry and dispatch setup */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_tk ( PLDispatchTable *pdt ); +void plD_dispatch_init_tk ( PLDispatchTable *pdt ); void plD_init_tk (PLStream *); void plD_line_tk (PLStream *, short, short, short, short); Modified: trunk/drivers/tkwin.c =================================================================== --- trunk/drivers/tkwin.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/tkwin.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -202,7 +202,7 @@ static void StoreCmap1 (PLStream *pls); static void WaitForPage(PLStream *pls); -PLDLLIMPEXP_DRIVER void plD_dispatch_init_tkwin ( PLDispatchTable *pdt ); +void plD_dispatch_init_tkwin ( PLDispatchTable *pdt ); void plD_init_tkwin (PLStream *); void plD_line_tkwin (PLStream *, short, short, short, short); Modified: trunk/drivers/wingcc.c =================================================================== --- trunk/drivers/wingcc.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/wingcc.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -112,7 +112,7 @@ } wingcc_Dev; -PLDLLIMPEXP_DRIVER void plD_dispatch_init_wingcc ( PLDispatchTable *pdt ); +void plD_dispatch_init_wingcc ( PLDispatchTable *pdt ); void plD_init_wingcc (PLStream *); void plD_line_wingcc (PLStream *, short, short, short, short); Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/wxwidgets.cpp 2008-10-11 06:15:24 UTC (rev 8882) @@ -101,7 +101,7 @@ * * Make driver functions known to plplot. \*--------------------------------------------------------------------------*/ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_wxwidgets( PLDispatchTable *pdt ) +void plD_dispatch_init_wxwidgets( PLDispatchTable *pdt ) { #ifndef ENABLE_DYNDRIVERS pdt->pl_MenuStr = "wxWidgets DC"; Modified: trunk/drivers/xfig.c =================================================================== --- trunk/drivers/xfig.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/xfig.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -14,7 +14,7 @@ /* Function prototypes */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_xfig ( PLDispatchTable *pdt ); +void plD_dispatch_init_xfig ( PLDispatchTable *pdt ); void plD_init_xfig (PLStream *); void plD_line_xfig (PLStream *, short, short, short, short); Modified: trunk/drivers/xwin.c =================================================================== --- trunk/drivers/xwin.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/xwin.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -126,7 +126,7 @@ /* Driver entry and dispatch setup */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_xw ( PLDispatchTable *pdt ); +void plD_dispatch_init_xw ( PLDispatchTable *pdt ); void plD_init_xw (PLStream *); void plD_line_xw (PLStream *, short, short, short, short); Modified: trunk/drivers/xwinttf.c =================================================================== --- trunk/drivers/xwinttf.c 2008-10-11 06:10:19 UTC (rev 8881) +++ trunk/drivers/xwinttf.c 2008-10-11 06:15:24 UTC (rev 8882) @@ -126,7 +126,7 @@ /* PLplot interface functions */ -PLDLLIMPEXP_DRIVER void plD_dispatch_init_xwinttf (PLDispatchTable *pdt); +void plD_dispatch_init_xwinttf (PLDispatchTable *pdt); void plD_init_xwinttf (PLStream *); void plD_line_xwinttf (PLStream *, short, short, short, short); void plD_polyline_xwinttf (PLStream *, short *, short *, PLINT); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-10-22 15:01:10
|
Revision: 8954 http://plplot.svn.sourceforge.net/plplot/?rev=8954&view=rev Author: smekal Date: 2008-10-22 15:01:00 +0000 (Wed, 22 Oct 2008) Log Message: ----------- Simplifying the use of the AGG library based on agg2d.cpp/agg2d.h found at http://www.koders.com. Basically the driver works as before, but the AGG library is more "professionally" used and code is easier to read. Also added support of the internal freetype based font routines in the AGG library to process text. Text is printed to the screen, but positioning doesn't work well (or at all). Turn off the buggy font processing by setting the driver option text=0. Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_agg.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-10-22 04:25:30 UTC (rev 8953) +++ trunk/drivers/wxwidgets.cpp 2008-10-22 15:01:00 UTC (rev 8954) @@ -325,7 +325,6 @@ #ifdef HAVE_AGG case 1: dev = new wxPLDevAGG; - text = 0; // agg backend is not able to draw text in the moment break; #endif default: Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2008-10-22 04:25:30 UTC (rev 8953) +++ trunk/drivers/wxwidgets.h 2008-10-22 15:01:00 UTC (rev 8954) @@ -213,14 +213,23 @@ #include "agg2/agg_conv_contour.h" #include "agg2/agg_font_freetype.h" -typedef agg::pixfmt_rgb24 pixfmt; -typedef agg::renderer_base<pixfmt> ren_base; -typedef agg::renderer_scanline_aa_solid<ren_base> renderer; -typedef agg::font_engine_freetype_int32 font_engine_type; -typedef agg::font_cache_manager<font_engine_type> font_manager_type; - class wxPLDevAGG : public wxPLDevBase { + /* type definitions and enums */ + typedef agg::pixfmt_rgb24 pixFormat; + typedef agg::renderer_base<pixFormat> rendererBase; + typedef agg::renderer_scanline_aa_solid<rendererBase> rendererSolid; + typedef agg::font_engine_freetype_int32 fontEngineType; + typedef agg::font_cache_manager<fontEngineType> fontManagerType; + typedef agg::font_cache_manager<fontEngineType>::gray8_adaptor_type fontRasterizer; + typedef agg::font_cache_manager<fontEngineType>::gray8_scanline_type fontScanline; + typedef agg::conv_curve<agg::path_storage> convCurve; + typedef agg::conv_stroke<convCurve> convStroke; + typedef agg::conv_transform<convCurve> pathTransform; + typedef agg::conv_transform<convStroke> strokeTransform; + + enum drawPathFlag { Fill, Stroke, FillAndStroke }; + public: /* methods */ wxPLDevAGG( void ); ~wxPLDevAGG( void ); @@ -243,24 +252,41 @@ void ProcessString( PLStream* pls, EscText* args ); void PSDrawTextToDC( char* utf8_string, bool drawText ); void PSSetFont( PLUNICODE fci ); + void drawPath( drawPathFlag flag ); private: /* variables */ - wxDC* m_dc; - wxImage* m_buffer; - agg::rendering_buffer *m_rendering_buffer; -// font_engine_type m_font_engine; -// font_manager_type m_font_manager; -// agg::conv_curve<font_manager_type::path_adaptor_type> m_curves; -// agg::conv_contour<agg::conv_curve<font_manager_type::path_adaptor_type> > m_contour; + wxDC* mDC; + wxImage* mBuffer; + agg::rendering_buffer mRenderingBuffer; + fontEngineType mFontEngine; + fontManagerType mFontManager; + agg::conv_curve<fontManagerType::path_adaptor_type> mCurves; + agg::conv_contour<agg::conv_curve<fontManagerType::path_adaptor_type> > mContour; - double m_strokewidth; - wxUint8 m_StrokeOpacity; - unsigned char m_colredstroke; - unsigned char m_colgreenstroke; - unsigned char m_colbluestroke; - unsigned char m_colredfill; - unsigned char m_colgreenfill; - unsigned char m_colbluefill; + pixFormat mPixFormat; + rendererBase mRendererBase; + rendererSolid mRendererSolid; + + agg::scanline_u8 mScanLine; + agg::rasterizer_scanline_aa<> mRasterizer; + agg::path_storage mPath; + agg::trans_affine mTransform; + + convCurve mConvCurve; + convStroke mConvStroke; + pathTransform mPathTransform; + strokeTransform mStrokeTransform; + + double mStrokeWidth; + wxUint8 mStrokeOpacity; + unsigned char mColorRedStroke; + unsigned char mColorGreenStroke; + unsigned char mColorBlueStroke; + unsigned char mColorRedFill; + unsigned char mColorGreenFill; + unsigned char mColorBlueFill; + + double textWidth, textHeight; }; #endif Modified: trunk/drivers/wxwidgets_agg.cpp =================================================================== --- trunk/drivers/wxwidgets_agg.cpp 2008-10-22 04:25:30 UTC (rev 8953) +++ trunk/drivers/wxwidgets_agg.cpp 2008-10-22 15:01:00 UTC (rev 8954) @@ -25,187 +25,203 @@ /* plplot headers */ #include "plplotP.h" +#include "plfci-truetype.h" /* wxwidgets headers */ #include "wx/wx.h" +#include <wx/strconv.h> /* std and driver headers */ #include "wxwidgets.h" +#include <wchar.h> + +/* Constructor initializes all variables and objects */ wxPLDevAGG::wxPLDevAGG() : - wxPLDevBase() //, -// m_font_engine(), m_font_manager( m_font_engine ), -// m_curves( m_font_manager.path_adaptor() ), m_contour( m_curves ) + wxPLDevBase(), + mRenderingBuffer(), + mPixFormat( mRenderingBuffer ), + mRendererBase( mPixFormat ), + mRendererSolid( mRendererBase ), + + mPath(), + mTransform(), + mConvCurve( mPath ), + mConvStroke( mConvCurve ), + mPathTransform( mConvCurve, mTransform ), + mStrokeTransform( mConvStroke, mTransform ), + + mFontEngine(), + mFontManager( mFontEngine ), + mCurves( mFontManager.path_adaptor() ), + mContour( mCurves ), + + mBuffer( NULL ), + mStrokeWidth( 1.0 ), + mStrokeOpacity( 255 ), + mColorRedStroke( 255 ), + mColorGreenStroke( 255 ), + mColorBlueStroke( 255 ), + mColorRedFill( 0 ), + mColorGreenFill( 0 ), + mColorBlueFill( 0 ) { - m_buffer=NULL; - m_rendering_buffer=NULL; - m_strokewidth=1.0; - m_StrokeOpacity=255; - m_colredstroke=255; - m_colgreenstroke=255; - m_colbluestroke=255; - m_colredfill=0; - m_colgreenfill=0; - m_colbluefill=0; + mCurves.approximation_scale( 2.0 ); + mContour.auto_detect_orientation( false ); + mConvStroke.line_join( agg::round_join ); + mConvStroke.line_cap( agg::round_cap ); } + +/* Deconstructor frees allocated buffer */ wxPLDevAGG::~wxPLDevAGG() { - if( ownGUI ) { - if( m_buffer ) - delete m_buffer; - if( m_rendering_buffer ) - delete m_rendering_buffer; + if( ownGUI ) + if( mBuffer ) + delete mBuffer; +} + + +void wxPLDevAGG::drawPath( drawPathFlag flag ) +{ + mRasterizer.reset(); + + switch( flag ) { + case Stroke: + if( mStrokeOpacity && mStrokeWidth>0.0 ) { + mConvStroke.width( mStrokeWidth ); + mRasterizer.add_path( mStrokeTransform ); + mRendererSolid.color( agg::rgba8(mColorRedStroke, mColorGreenStroke, mColorBlueStroke, mStrokeOpacity) ); + agg::render_scanlines( mRasterizer, mScanLine, mRendererSolid ); + } + break; + case FillAndStroke: + if( mStrokeOpacity ) { + mRasterizer.add_path( mPathTransform ); + mRendererSolid.color( agg::rgba8(mColorRedStroke, mColorGreenStroke, mColorBlueStroke, mStrokeOpacity) ); + agg::render_scanlines( mRasterizer, mScanLine, mRendererSolid ); + } + + if( mStrokeOpacity && mStrokeWidth>0.0 ) { + mConvStroke.width( mStrokeWidth ); + mRasterizer.add_path( mStrokeTransform ); + mRendererSolid.color( agg::rgba8(mColorRedStroke, mColorGreenStroke, mColorBlueStroke, mStrokeOpacity) ); + agg::render_scanlines( mRasterizer, mScanLine, mRendererSolid ); + } + break; } } + void wxPLDevAGG::DrawLine( short x1a, short y1a, short x2a, short y2a ) { x1a=(short)(x1a/scalex); y1a=(short)(height-y1a/scaley); x2a=(short)(x2a/scalex); y2a=(short)(height-y2a/scaley); - agg::rasterizer_scanline_aa<> ras; - agg::scanline_u8 sl; - pixfmt pixf( *m_rendering_buffer ); - ren_base renb( pixf ); - renderer ren( renb ); + mPath.remove_all(); + mPath.move_to( x1a, y1a ); + mPath.line_to( x2a, y2a ); - agg::path_storage path; - path.move_to( x1a, y1a ); - path.line_to( x2a, y2a ); - - agg::conv_stroke<agg::path_storage> stroke(path); - stroke.line_join( agg::round_join ); - stroke.line_cap( agg::round_cap ); - stroke.width( m_strokewidth ); - ras.add_path( stroke ); - - ren.color( agg::rgba8(m_colredstroke, m_colgreenstroke, m_colbluestroke, m_StrokeOpacity) ); - - agg::render_scanlines( ras, sl, ren ); + drawPath( Stroke ); } + void wxPLDevAGG::DrawPolyline( short *xa, short *ya, PLINT npts ) { short x1a, y1a, x2a, y2a; - agg::rasterizer_scanline_aa<> ras; - agg::scanline_u8 sl; - pixfmt pixf( *m_rendering_buffer ); - ren_base renb( pixf ); - renderer ren( renb ); - - agg::path_storage path; x2a=(short)(xa[0]/scalex); y2a=(short)(height-ya[0]/scaley); - path.move_to( x2a, y2a ); + mPath.remove_all(); + mPath.move_to( x2a, y2a ); for ( PLINT i=1; i<npts; i++ ) { x1a=x2a; y1a=y2a; x2a=(short)(xa[i]/scalex); y2a=(short)(height-ya[i]/scaley); - path.line_to( x2a, y2a ); + mPath.line_to( x2a, y2a ); if( !resizing && ownGUI ) AddtoClipRegion( (int)x1a, (int)y1a, (int)x2a, (int)y2a ); } - agg::conv_stroke<agg::path_storage> stroke( path ); - stroke.line_join( agg::round_join ); - stroke.line_cap( agg::round_cap ); - stroke.width( m_strokewidth ); - ras.add_path( stroke ); - - ren.color( agg::rgba8(m_colredstroke, m_colgreenstroke, m_colbluestroke, m_StrokeOpacity) ); - - agg::render_scanlines( ras, sl, ren ); + drawPath( Stroke ); } + void wxPLDevAGG::ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, PLINT x1, PLINT y1, PLINT x2, PLINT y2 ) { - pixfmt pixf( *m_rendering_buffer ); - ren_base renb( pixf ); - renb.clear( agg::rgba8(bgr, bgg, bgb) ); + mRendererBase.clear( agg::rgba8(bgr, bgg, bgb) ); } + void wxPLDevAGG::FillPolygon( PLStream *pls ) { short x1a, y1a, x2a, y2a; - agg::rasterizer_scanline_aa<> ras; - agg::scanline_u8 sl; - pixfmt pixf( *m_rendering_buffer ); - ren_base renb( pixf ); - renderer ren( renb ); - agg::path_storage path; + mPath.remove_all(); x2a=(short)(pls->dev_x[0]/scalex); y2a=(short)(height-pls->dev_y[0]/scaley); - path.move_to( x2a, y2a ); + mPath.move_to( x2a, y2a ); for ( PLINT i=1; i<pls->dev_npts; i++ ) { x1a=x2a; y1a=y2a; x2a=(short)(pls->dev_x[i]/scalex); y2a=(short)(height-pls->dev_y[i]/scaley); - path.line_to( x2a, y2a ); + mPath.line_to( x2a, y2a ); if( !resizing && ownGUI ) AddtoClipRegion( (int)x1a, (int)y1a, (int)x2a, (int)y2a ); } - path.line_to( pls->dev_x[0]/scalex, height-pls->dev_y[0]/scaley ); - path.close_polygon(); + mPath.line_to( pls->dev_x[0]/scalex, height-pls->dev_y[0]/scaley ); + mPath.close_polygon(); - ren.color( agg::rgba8(m_colredstroke, m_colgreenstroke, m_colbluestroke, m_StrokeOpacity) ); - ras.add_path( path ); - agg::render_scanlines( ras, sl, ren ); - - agg::conv_stroke<agg::path_storage> stroke( path ); - stroke.line_join( agg::round_join ); - stroke.line_cap( agg::round_cap ); - stroke.width( m_strokewidth ); - ras.add_path( stroke ); - ren.color( agg::rgba8(m_colredstroke, m_colgreenstroke, m_colbluestroke, m_StrokeOpacity) ); - agg::render_scanlines( ras, sl, ren ); + drawPath( FillAndStroke ); } + void wxPLDevAGG::BlitRectangle( wxPaintDC* dc, int vX, int vY, int vW, int vH ) { - if( m_buffer ) { + if( mBuffer ) { wxMemoryDC MemoryDC; - wxBitmap bitmap( m_buffer->GetSubImage(wxRect(vX, vY, vW, vH)), -1 ); + wxBitmap bitmap( mBuffer->GetSubImage(wxRect(vX, vY, vW, vH)), -1 ); MemoryDC.SelectObject( bitmap ); dc->Blit( vX, vY, vW, vH, &MemoryDC, 0, 0 ); MemoryDC.SelectObject( wxNullBitmap ); } } + void wxPLDevAGG::CreateCanvas() { - if( m_rendering_buffer ) - delete m_rendering_buffer; - m_rendering_buffer = new agg::rendering_buffer; - if( ownGUI ) { /* get a new wxImage (image buffer) */ - if( m_buffer ) - delete m_buffer; - m_buffer = new wxImage( bm_width, bm_height ); - m_rendering_buffer->attach( m_buffer->GetData(), bm_width, bm_height, bm_width*3 ); + if( mBuffer ) + delete mBuffer; + mBuffer = new wxImage( bm_width, bm_height ); + mRenderingBuffer.attach( mBuffer->GetData(), bm_width, bm_height, bm_width*3 ); } else - m_rendering_buffer->attach( m_buffer->GetData(), width, height, width*3 ); + mRenderingBuffer.attach( mBuffer->GetData(), width, height, width*3 ); + + mRendererBase.reset_clipping( true ); + } + void wxPLDevAGG::SetWidth( PLStream *pls ) { - m_strokewidth = pls->width>0 ? pls->width : 1; // TODO: why and when ist width 0??? + mStrokeWidth = pls->width>0 ? pls->width : 1; // TODO: why and when ist width 0??? } + void wxPLDevAGG::SetColor0( PLStream *pls ) { - m_colredstroke = pls->cmap0[pls->icol0].r; - m_colgreenstroke = pls->cmap0[pls->icol0].g; - m_colbluestroke = pls->cmap0[pls->icol0].b; - m_StrokeOpacity = (wxUint8)(pls->cmap0[pls->icol0].a*255); + mColorRedStroke = pls->cmap0[pls->icol0].r; + mColorGreenStroke = pls->cmap0[pls->icol0].g; + mColorBlueStroke = pls->cmap0[pls->icol0].b; + mStrokeOpacity = (wxUint8)(pls->cmap0[pls->icol0].a*255); } + void wxPLDevAGG::SetColor1( PLStream *pls ) { - m_colredstroke = pls->curcolor.r; - m_colgreenstroke = pls->curcolor.g; - m_colbluestroke = pls->curcolor.b; - m_StrokeOpacity = (wxUint8)(pls->curcolor.a*255); + mColorRedStroke = pls->curcolor.r; + mColorGreenStroke = pls->curcolor.g; + mColorBlueStroke = pls->curcolor.b; + mStrokeOpacity = (wxUint8)(pls->curcolor.a*255); } @@ -217,14 +233,13 @@ \*--------------------------------------------------------------------------*/ void wxPLDevAGG::SetExternalBuffer( void* dc ) { - m_dc=(wxDC*)dc; /* Add the dc to the device */ - if( m_buffer ) - delete m_buffer; - m_buffer = new wxImage( width, height ); - if( m_rendering_buffer ) - delete m_rendering_buffer; - m_rendering_buffer = new agg::rendering_buffer; - m_rendering_buffer->attach( m_buffer->GetData(), width, height, width*3 ); + mDC=(wxDC*)dc; /* Add the dc to the device */ + if( mBuffer ) + delete mBuffer; + mBuffer = new wxImage( width, height ); + mRenderingBuffer.attach( mBuffer->GetData(), width, height, width*3 ); + + mRendererBase.reset_clipping( true ); ready = true; ownGUI = false; @@ -235,17 +250,17 @@ void wxPLDevAGG::PutPixel( short x, short y, PLINT color ) { - m_buffer->SetRGB( x, y, GetRValue(color), GetGValue(color), GetBValue(color) ); + mBuffer->SetRGB( x, y, GetRValue(color), GetGValue(color), GetBValue(color) ); } void wxPLDevAGG::PutPixel( short x, short y ) { - m_buffer->SetRGB( x, y, m_colredstroke, m_colgreenstroke, m_colbluestroke ); + mBuffer->SetRGB( x, y, mColorRedStroke, mColorGreenStroke, mColorBlueStroke ); } PLINT wxPLDevAGG::GetPixel( short x, short y ) { - return RGB( m_buffer->GetRed( x, y ), m_buffer->GetGreen( x, y ), m_buffer->GetBlue( x, y ) ); + return RGB( mBuffer->GetRed( x, y ), mBuffer->GetGreen( x, y ), mBuffer->GetBlue( x, y ) ); } #endif // HAVE_FREETYPE @@ -253,17 +268,53 @@ void wxPLDevAGG::PSDrawTextToDC( char* utf8_string, bool drawText ) { + // Log_Verbose( "%s", __FUNCTION__ ); + printf( "utf8_string=%s\n", utf8_string ); + + double start_x = 0.0; + double start_y = 0.0; + + //wchar_t str[512]; + //size_t len=wxConvUTF8.ToWChar( str, 512, utf8_string ); + size_t len = strlen( utf8_string ); + char* str=utf8_string; + printf("len=%d\n", len ); + + const agg::glyph_cache* glyph; + for( size_t i=0; i<len && str[i]; i++ ) { + glyph = mFontManager.glyph( str[i] ); + if( glyph ) { + if( i ) + mFontManager.add_kerning( &start_x, &start_y ); + printf( "start_x=%f, start_y=%f\n", start_x, start_y ); + mFontManager.init_embedded_adaptors( glyph, start_x, start_y ); + + if( drawText ) { + mRendererSolid.color( agg::rgba8(mColorRedStroke, mColorGreenStroke, mColorBlueStroke, mStrokeOpacity) ); + agg::render_scanlines( mFontManager.gray8_adaptor(), mFontManager.gray8_scanline(), mRendererSolid ); + } + + textHeight = textHeight>(glyph->bounds.y2-glyph->bounds.y1+yOffset/scaley) ? + textHeight : (glyph->bounds.y2-glyph->bounds.y1+yOffset/scaley); + start_x += glyph->advance_x/64; + } + } + + textWidth += start_x; memset( utf8_string, '\0', max_string_length ); } void wxPLDevAGG::PSSetFont( PLUNICODE fci ) { - unsigned char fontFamily, fontStyle, fontWeight; + /* convert the fci to Base14/Type1 font information */ + char* fontname = plP_FCI2FontName( fci, TrueTypeLookup, N_TrueTypeLookup ); + printf("fontname=%s\n", fontname ); - plP_fci2hex( fci, &fontFamily, PL_FCI_FAMILY ); - plP_fci2hex( fci, &fontStyle, PL_FCI_STYLE ); - plP_fci2hex( fci, &fontWeight, PL_FCI_WEIGHT ); + mFontEngine.load_font( "c:\\windows\\fonts\\arial.ttf", 0, agg::glyph_ren_agg_gray8 ); + mFontEngine.height( fontSize*fontScale ); + mFontEngine.width( fontSize*fontScale ); + mFontEngine.flip_y( true ); } @@ -271,7 +322,7 @@ { /* Check that we got unicode, warning message and return if not */ if( args->unicode_array_len == 0 ) { - printf( "Non unicode string passed to a cairo driver, ignoring\n" ); + printf( "Non unicode string passed to a wxWidgets driver, ignoring\n" ); return; } @@ -285,19 +336,26 @@ fontSize = pls->chrht * DEVICE_PIXELS_PER_MM * 1.2; /* calculate rotation of text */ - plRotationShear( args->xform, &rotation, &shear, &stride); + plRotationShear( args->xform, &rotation, &shear, &stride ); rotation -= pls->diorot * M_PI / 2.0; cos_rot = cos( rotation ); sin_rot = sin( rotation ); cos_shear = cos(shear); sin_shear = sin(shear); - posX = args->x; - posY = args->y; PSDrawText( args->unicode_array, args->unicode_array_len, false ); - posX = args->x-(args->just*textWidth)*scalex*cos_rot-(0.5*textHeight)*scalex*sin_rot; - posY = args->y-(args->just*textWidth)*scaley*sin_rot+(0.5*textHeight)*scaley*cos_rot; + agg::trans_affine mtx; + mtx *= agg::trans_affine_translation( args->x/scalex, height-args->y/scaley ); + //mtx *= agg::trans_affine_rotation( rotation ); + //mtx *= agg::trans_affine_skewing( cos_shear, sin_shear ); + printf("textWidth=%f, textHeight=%f\n", textWidth, textHeight ); + + mtx *= agg::trans_affine_translation( -args->just*textWidth, -0.5*textHeight ); + mFontEngine.transform(mtx); + + agg::conv_transform<fontManagerType::path_adaptor_type> tr( mFontManager.path_adaptor(), mtx ); + PSDrawText( args->unicode_array, args->unicode_array_len, true ); AddtoClipRegion( 0, 0, width, height ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-10-23 12:57:33
|
Revision: 8956 http://plplot.svn.sourceforge.net/plplot/?rev=8956&view=rev Author: smekal Date: 2008-10-23 12:38:21 +0000 (Thu, 23 Oct 2008) Log Message: ----------- Adding code to determine font directory (based on code found in plfreetype.c). Not working yet. Modified Paths: -------------- trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_agg.cpp Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2008-10-23 12:37:02 UTC (rev 8955) +++ trunk/drivers/wxwidgets.h 2008-10-23 12:38:21 UTC (rev 8956) @@ -287,6 +287,7 @@ unsigned char mColorBlueFill; double textWidth, textHeight; + wxString fontdir; }; #endif Modified: trunk/drivers/wxwidgets_agg.cpp =================================================================== --- trunk/drivers/wxwidgets_agg.cpp 2008-10-23 12:37:02 UTC (rev 8955) +++ trunk/drivers/wxwidgets_agg.cpp 2008-10-23 12:38:21 UTC (rev 8956) @@ -35,7 +35,26 @@ #include "wxwidgets.h" #include <wchar.h> +/* helper functions */ +#if !defined(WIN32) || defined(__GNUC__) + #include <unistd.h> +#else + #define F_OK 1 + #include <stdio.h> + int access( char *filename, int flag ) + { + FILE *infile ; + infile = fopen( filename, "r" ) ; + if( infile != NULL ) { + fclose( infile ) ; + return 0 ; + } else + return 1 ; + } +#endif +#define makeunixslash( b ) do { char *I; for( I=b;*I!=0;*I++ ) if( *I=='\\' ) *I='/';} while(0) + /* Constructor initializes all variables and objects */ wxPLDevAGG::wxPLDevAGG() : wxPLDevBase(), @@ -70,6 +89,67 @@ mContour.auto_detect_orientation( false ); mConvStroke.line_join( agg::round_join ); mConvStroke.line_cap( agg::round_cap ); + + /* determine font directory */ +#if defined(WIN32) + static char *default_font_names[]={"arial.ttf","times.ttf","timesi.ttf","arial.ttf", + "symbol.ttf"}; + char WINDIR_PATH[255]; + char *b; + b=getenv("WINDIR"); + strcpy(WINDIR_PATH,b); + +/* + * Work out if we have Win95+ or Win3.?... sort of. + * Actually, this just tries to find the place where the fonts live by looking + * for arial, which should be on all windows machines. + * At present, it only looks in two places, on one drive. I might change this + * soon. + */ + if (WINDIR_PATH==NULL) + { + if (access("c:\\windows\\fonts\\arial.ttf", F_OK)==0) { + strcpy(font_dir,"c:/windows/fonts/"); + } + else if ( access("c:\\windows\\system\\arial.ttf", F_OK)==0) { + strcpy(font_dir,"c:/windows/system/"); + } + else + plwarn("Could not find font path; I sure hope you have defined fonts manually !"); + } + else + { + strcat(WINDIR_PATH,"\\fonts\\arial.ttf"); + if (access(WINDIR_PATH, F_OK)==0) + { + b=strrchr(WINDIR_PATH,'\\'); + b++; + *b=0; + makeunixslash(WINDIR_PATH); + strcpy(font_dir,WINDIR_PATH); + } + else + plwarn("Could not find font path; I sure hope you have defined fonts manually !"); + } + + if (pls->debug) fprintf( stderr, "%s\n", font_dir ) ; +#else + /* For Unix systems, we will set the font path up a little differently in + * that the configured PL_FREETYPE_FONT_DIR has been set as the default path, + * but the user can override this by setting the environmental variable + * "PLPLOT_FREETYPE_FONT_DIR" to something else. + * NOTE WELL - the trailing slash must be added for now ! + */ + const char *str; + + fontdir.Clear(); + if( (str=getenv("PLPLOT_FREETYPE_FONT_DIR"))!=NULL ) + fontdir.Append( wxString(str, wxConvFile) ); + else + fontdir.Append( wxT(PL_FREETYPE_FONT_DIR) ); + + printf("fontdir=%ws, len=%d\n", fontdir.c_str(), fontdir.Length() ); +#endif } @@ -308,10 +388,10 @@ void wxPLDevAGG::PSSetFont( PLUNICODE fci ) { /* convert the fci to Base14/Type1 font information */ - char* fontname = plP_FCI2FontName( fci, TrueTypeLookup, N_TrueTypeLookup ); - printf("fontname=%s\n", fontname ); + wxString fontname=fontdir + wxString( plP_FCI2FontName(fci, TrueTypeLookup, N_TrueTypeLookup), *wxConvCurrent ); + printf("fontname=%s\n", fontdir.c_str() ); - mFontEngine.load_font( "c:\\windows\\fonts\\arial.ttf", 0, agg::glyph_ren_agg_gray8 ); + mFontEngine.load_font( plP_FCI2FontName(fci, TrueTypeLookup, N_TrueTypeLookup), 0, agg::glyph_ren_agg_gray8 ); mFontEngine.height( fontSize*fontScale ); mFontEngine.width( fontSize*fontScale ); mFontEngine.flip_y( true ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-10-24 13:06:04
|
Revision: 8957 http://plplot.svn.sourceforge.net/plplot/?rev=8957&view=rev Author: smekal Date: 2008-10-24 13:05:53 +0000 (Fri, 24 Oct 2008) Log Message: ----------- Scaling of the plplot coordinates to the bitmap is now done with affine transformations. Font processing improved, but still problems with positioning and kerning. Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_agg.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-10-23 12:38:21 UTC (rev 8956) +++ trunk/drivers/wxwidgets.cpp 2008-10-24 13:05:53 UTC (rev 8957) @@ -735,9 +735,15 @@ wxPLDevBase* dev = (wxPLDevBase*)pls->dev; - /* set new size */ + /* set new size and scale parameters */ dev->width = width; dev->height = height; + dev->scalex=(PLFLT)(dev->xmax-dev->xmin)/dev->width; + dev->scaley=(PLFLT)(dev->ymax-dev->ymin)/dev->height; + + /* recalculate the dpi used in calculation of fontsize */ + pls->xdpi = VIRTUAL_PIXELS_PER_IN/dev->scalex; + pls->ydpi = VIRTUAL_PIXELS_PER_IN/dev->scaley; /* clear background if we have a dc, since it's invalid (TODO: why, since in bop it must be cleared anyway?) */ @@ -749,13 +755,7 @@ dev->ClearBackground( bgr, bgg, bgb ); } - dev->scalex=(PLFLT)(dev->xmax-dev->xmin)/dev->width; - dev->scaley=(PLFLT)(dev->ymax-dev->ymin)/dev->height; - /* recalculate the dpi used in calculation of fontsize */ - pls->xdpi = VIRTUAL_PIXELS_PER_IN/dev->scalex; - pls->ydpi = VIRTUAL_PIXELS_PER_IN/dev->scaley; - /* freetype parameters must also be changed */ #ifdef HAVE_FREETYPE if( dev->freetype ) { Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2008-10-23 12:38:21 UTC (rev 8956) +++ trunk/drivers/wxwidgets.h 2008-10-24 13:05:53 UTC (rev 8957) @@ -253,7 +253,8 @@ void PSDrawTextToDC( char* utf8_string, bool drawText ); void PSSetFont( PLUNICODE fci ); void drawPath( drawPathFlag flag ); - + void AGGAddtoClipRegion( short x1, short y1, short x2, short y2 ); + private: /* variables */ wxDC* mDC; wxImage* mBuffer; Modified: trunk/drivers/wxwidgets_agg.cpp =================================================================== --- trunk/drivers/wxwidgets_agg.cpp 2008-10-23 12:38:21 UTC (rev 8956) +++ trunk/drivers/wxwidgets_agg.cpp 2008-10-24 13:05:53 UTC (rev 8957) @@ -92,12 +92,12 @@ /* determine font directory */ #if defined(WIN32) - static char *default_font_names[]={"arial.ttf","times.ttf","timesi.ttf","arial.ttf", + /*static char *default_font_names[]={"arial.ttf","times.ttf","timesi.ttf","arial.ttf", "symbol.ttf"}; char WINDIR_PATH[255]; char *b; b=getenv("WINDIR"); - strcpy(WINDIR_PATH,b); + strcpy(WINDIR_PATH,b);*/ /* * Work out if we have Win95+ or Win3.?... sort of. @@ -106,7 +106,7 @@ * At present, it only looks in two places, on one drive. I might change this * soon. */ - if (WINDIR_PATH==NULL) + /*if (WINDIR_PATH==NULL) { if (access("c:\\windows\\fonts\\arial.ttf", F_OK)==0) { strcpy(font_dir,"c:/windows/fonts/"); @@ -132,7 +132,7 @@ plwarn("Could not find font path; I sure hope you have defined fonts manually !"); } - if (pls->debug) fprintf( stderr, "%s\n", font_dir ) ; + if (pls->debug) fprintf( stderr, "%s\n", font_dir ) ;*/ #else /* For Unix systems, we will set the font path up a little differently in * that the configured PL_FREETYPE_FONT_DIR has been set as the default path, @@ -195,30 +195,25 @@ void wxPLDevAGG::DrawLine( short x1a, short y1a, short x2a, short y2a ) { - x1a=(short)(x1a/scalex); y1a=(short)(height-y1a/scaley); - x2a=(short)(x2a/scalex); y2a=(short)(height-y2a/scaley); - mPath.remove_all(); mPath.move_to( x1a, y1a ); mPath.line_to( x2a, y2a ); + if( !resizing && ownGUI ) + AGGAddtoClipRegion( x1a, y1a, x2a, y2a ); + drawPath( Stroke ); } void wxPLDevAGG::DrawPolyline( short *xa, short *ya, PLINT npts ) { - short x1a, y1a, x2a, y2a; - - x2a=(short)(xa[0]/scalex); y2a=(short)(height-ya[0]/scaley); mPath.remove_all(); - mPath.move_to( x2a, y2a ); + mPath.move_to( xa[0], ya[0] ); for ( PLINT i=1; i<npts; i++ ) { - x1a=x2a; y1a=y2a; - x2a=(short)(xa[i]/scalex); y2a=(short)(height-ya[i]/scaley); - mPath.line_to( x2a, y2a ); + mPath.line_to( xa[i], ya[i] ); if( !resizing && ownGUI ) - AddtoClipRegion( (int)x1a, (int)y1a, (int)x2a, (int)y2a ); + AGGAddtoClipRegion( xa[i-1], ya[i-1], xa[i], ya[i] ); } drawPath( Stroke ); @@ -231,21 +226,29 @@ } +void wxPLDevAGG::AGGAddtoClipRegion( short x1, short y1, short x2, short y2 ) +{ + double x1d=x1, x2d=x2, y1d=y1, y2d=y2; + + mTransform.transform( &x1d, &y1d ); + mTransform.transform( &x2d, &y2d ); + AddtoClipRegion( (int)floor(x1d), (int)floor(y1d), (int)ceil(x2d), (int)ceil(y2d) ); +} + + void wxPLDevAGG::FillPolygon( PLStream *pls ) { - short x1a, y1a, x2a, y2a; + short *xa = pls->dev_x; + short *ya = pls->dev_y; mPath.remove_all(); - x2a=(short)(pls->dev_x[0]/scalex); y2a=(short)(height-pls->dev_y[0]/scaley); - mPath.move_to( x2a, y2a ); + mPath.move_to( xa[0], ya[0] ); for ( PLINT i=1; i<pls->dev_npts; i++ ) { - x1a=x2a; y1a=y2a; - x2a=(short)(pls->dev_x[i]/scalex); y2a=(short)(height-pls->dev_y[i]/scaley); - mPath.line_to( x2a, y2a ); - if( !resizing && ownGUI ) - AddtoClipRegion( (int)x1a, (int)y1a, (int)x2a, (int)y2a ); + mPath.line_to( xa[i], ya[i] ); + if( !resizing && ownGUI ) + AGGAddtoClipRegion( xa[i-1], ya[i-1], xa[i], ya[i] ); } - mPath.line_to( pls->dev_x[0]/scalex, height-pls->dev_y[0]/scaley ); + mPath.line_to( xa[0], ya[0] ); mPath.close_polygon(); drawPath( FillAndStroke ); @@ -277,13 +280,16 @@ mRenderingBuffer.attach( mBuffer->GetData(), width, height, width*3 ); mRendererBase.reset_clipping( true ); - + mTransform.reset(); + mTransform.premultiply( agg::trans_affine_translation(0.0, height) ); + mTransform.premultiply( agg::trans_affine_scaling(1.0/scalex, -1.0/scaley) ); + mStrokeWidth = (scalex+scaley)/2.0; } void wxPLDevAGG::SetWidth( PLStream *pls ) { - mStrokeWidth = pls->width>0 ? pls->width : 1; // TODO: why and when ist width 0??? + mStrokeWidth = (scalex+scaley)/2.0*(pls->width>0 ? pls->width : 1); // TODO: why and when ist width 0??? } @@ -320,6 +326,10 @@ mRenderingBuffer.attach( mBuffer->GetData(), width, height, width*3 ); mRendererBase.reset_clipping( true ); + mTransform.reset(); + mTransform.premultiply( agg::trans_affine_translation(0.0, height) ); + mTransform.premultiply( agg::trans_affine_scaling(1.0/scalex, -1.0/scaley) ); + mStrokeWidth = (scalex+scaley)/2.0; ready = true; ownGUI = false; @@ -364,9 +374,10 @@ for( size_t i=0; i<len && str[i]; i++ ) { glyph = mFontManager.glyph( str[i] ); if( glyph ) { - if( i ) + printf( "before: start_x=%f, start_y=%f\n", start_x, start_y ); + //if( i ) mFontManager.add_kerning( &start_x, &start_y ); - printf( "start_x=%f, start_y=%f\n", start_x, start_y ); + printf( "after: start_x=%f, start_y=%f\n", start_x, start_y ); mFontManager.init_embedded_adaptors( glyph, start_x, start_y ); if( drawText ) { @@ -374,9 +385,10 @@ agg::render_scanlines( mFontManager.gray8_adaptor(), mFontManager.gray8_scanline(), mRendererSolid ); } - textHeight = textHeight>(glyph->bounds.y2-glyph->bounds.y1+yOffset/scaley) ? - textHeight : (glyph->bounds.y2-glyph->bounds.y1+yOffset/scaley); - start_x += glyph->advance_x/64; + textHeight = textHeight>(glyph->bounds.y2-glyph->bounds.y1+yOffset) ? + textHeight : (glyph->bounds.y2-glyph->bounds.y1+yOffset); + start_x += glyph->advance_x/scalex; + //start_y += glyph->advance_y; } } @@ -389,12 +401,12 @@ { /* convert the fci to Base14/Type1 font information */ wxString fontname=fontdir + wxString( plP_FCI2FontName(fci, TrueTypeLookup, N_TrueTypeLookup), *wxConvCurrent ); - printf("fontname=%s\n", fontdir.c_str() ); - mFontEngine.load_font( plP_FCI2FontName(fci, TrueTypeLookup, N_TrueTypeLookup), 0, agg::glyph_ren_agg_gray8 ); + mFontEngine.load_font( "c:\\windows\\fonts\\arial.ttf", 0, agg::glyph_ren_agg_gray8 ); mFontEngine.height( fontSize*fontScale ); mFontEngine.width( fontSize*fontScale ); - mFontEngine.flip_y( true ); + mFontEngine.flip_y( false ); + mContour.width( fontSize*fontScale*0.2); } @@ -413,29 +425,26 @@ } /* Calculate the font size (in pixels) */ - fontSize = pls->chrht * DEVICE_PIXELS_PER_MM * 1.2; + fontSize = pls->chrht * DEVICE_PIXELS_PER_MM * 1.2 * scaley; /* calculate rotation of text */ plRotationShear( args->xform, &rotation, &shear, &stride ); rotation -= pls->diorot * M_PI / 2.0; - cos_rot = cos( rotation ); - sin_rot = sin( rotation ); cos_shear = cos(shear); sin_shear = sin(shear); + agg::trans_affine mtx; + mtx *= agg::trans_affine_rotation( rotation ); + mtx *= agg::trans_affine_skewing( shear, shear ); + mtx *= agg::trans_affine_translation( args->x, args->y ); + mtx *= mTransform; + mFontEngine.transform(mtx); + PSDrawText( args->unicode_array, args->unicode_array_len, false ); - - agg::trans_affine mtx; - mtx *= agg::trans_affine_translation( args->x/scalex, height-args->y/scaley ); - //mtx *= agg::trans_affine_rotation( rotation ); - //mtx *= agg::trans_affine_skewing( cos_shear, sin_shear ); printf("textWidth=%f, textHeight=%f\n", textWidth, textHeight ); - mtx *= agg::trans_affine_translation( -args->just*textWidth, -0.5*textHeight ); - mFontEngine.transform(mtx); - - agg::conv_transform<fontManagerType::path_adaptor_type> tr( mFontManager.path_adaptor(), mtx ); - + mtx *= agg::trans_affine_translation( -args->just*textWidth/scalex, -0.5*textHeight/scaley ); + //mFontEngine.transform(mtx); PSDrawText( args->unicode_array, args->unicode_array_len, true ); AddtoClipRegion( 0, 0, width, height ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-11-18 21:43:36
|
Revision: 8989 http://plplot.svn.sourceforge.net/plplot/?rev=8989&view=rev Author: smekal Date: 2008-11-18 21:43:33 +0000 (Tue, 18 Nov 2008) Log Message: ----------- Fixed a bug in the AGG backend regarding clearing the background (or parts of it). Fixed a bug in the AGG backend leading to incomplete output of text if freetype code is used. Custom text processing in AGG backend still not working. Modified Paths: -------------- trunk/drivers/wxwidgets_agg.cpp trunk/drivers/wxwidgets_dc.cpp Modified: trunk/drivers/wxwidgets_agg.cpp =================================================================== --- trunk/drivers/wxwidgets_agg.cpp 2008-11-18 21:34:06 UTC (rev 8988) +++ trunk/drivers/wxwidgets_agg.cpp 2008-11-18 21:43:33 UTC (rev 8989) @@ -19,6 +19,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +/* TODO: + * - let the AGG library process the text. In the moment most of the relevant code + * is commented out, since there are problems with the affine transformation + */ + #include "plDevs.h" #ifdef PLD_wxwidgets @@ -140,7 +145,7 @@ * "PLPLOT_FREETYPE_FONT_DIR" to something else. * NOTE WELL - the trailing slash must be added for now ! */ - const char *str; + /* const char *str; fontdir.Clear(); if( (str=getenv("PLPLOT_FREETYPE_FONT_DIR"))!=NULL ) @@ -148,7 +153,7 @@ else fontdir.Append( wxT(PL_FREETYPE_FONT_DIR) ); - printf("fontdir=%ws, len=%d\n", fontdir.c_str(), fontdir.Length() ); + //printf("fontdir=%s, len=%d\n", fontdir.c_str(), fontdir.Length() ); */ #endif } @@ -222,7 +227,31 @@ void wxPLDevAGG::ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, PLINT x1, PLINT y1, PLINT x2, PLINT y2 ) { - mRendererBase.clear( agg::rgba8(bgr, bgg, bgb) ); + if( x1<0 && y1<0 && x2<0 && y2<0 ) { + mRendererBase.clear( agg::rgba8(bgr, bgg, bgb) ); + if( !resizing && ownGUI ) + AddtoClipRegion( 0, 0, width, height ); + } else { + mPath.remove_all(); + mPath.move_to( x1, y1 ); + mPath.line_to( x2, y1 ); + mPath.line_to( x2, y2 ); + mPath.line_to( x1, y2 ); + mPath.close_polygon(); + + mRasterizer.reset(); + mRasterizer.add_path( mPathTransform ); + mRendererSolid.color( agg::rgba8(bgr, bgg, bgb, 255) ); + agg::render_scanlines( mRasterizer, mScanLine, mRendererSolid ); + + mConvStroke.width( 1.0 ); + mRasterizer.add_path( mStrokeTransform ); + mRendererSolid.color( agg::rgba8(bgr, bgg, bgb, 255) ); + agg::render_scanlines( mRasterizer, mScanLine, mRendererSolid ); + + if( !resizing && ownGUI ) + AGGAddtoClipRegion( x1, y1, x2, y2 ); + } } @@ -341,11 +370,13 @@ void wxPLDevAGG::PutPixel( short x, short y, PLINT color ) { mBuffer->SetRGB( x, y, GetRValue(color), GetGValue(color), GetBValue(color) ); + AddtoClipRegion( x, y, x, y ); } void wxPLDevAGG::PutPixel( short x, short y ) { mBuffer->SetRGB( x, y, mColorRedStroke, mColorGreenStroke, mColorBlueStroke ); + AddtoClipRegion( x, y, x, y ); } PLINT wxPLDevAGG::GetPixel( short x, short y ) @@ -371,28 +402,46 @@ printf("len=%d\n", len ); const agg::glyph_cache* glyph; - for( size_t i=0; i<len && str[i]; i++ ) { - glyph = mFontManager.glyph( str[i] ); - if( glyph ) { - printf( "before: start_x=%f, start_y=%f\n", start_x, start_y ); - //if( i ) - mFontManager.add_kerning( &start_x, &start_y ); - printf( "after: start_x=%f, start_y=%f\n", start_x, start_y ); - mFontManager.init_embedded_adaptors( glyph, start_x, start_y ); + if( !drawText ) { + double x = 0; + double y = 0; + bool first = true; + char* saveStr = str; + while( *str && len ) + { + glyph = mFontManager.glyph( *str ); + if( glyph ) { + if( !first ) + mFontManager.add_kerning( &x, &y ); + x += glyph->advance_x; + y += glyph->advance_y; + first = false; + } + textHeight = textHeight>(glyph->bounds.y2-glyph->bounds.y1+yOffset) ? + textHeight : (glyph->bounds.y2-glyph->bounds.y1+yOffset); + ++str; --len; + } + textWidth = x; + printf( "str: %s, textWidth=%lf\n", saveStr, textWidth ); + } else { + for( size_t i=0; i<len && str[i]; i++ ) { + glyph = mFontManager.glyph( str[i] ); + if( glyph ) { + printf( "before: start_x=%f, start_y=%f\n", start_x, start_y ); + if( i ) + mFontManager.add_kerning( &start_x, &start_y ); + printf( "after: start_x=%f, start_y=%f\n", start_x, start_y ); + mFontManager.init_embedded_adaptors( glyph, start_x, start_y ); - if( drawText ) { mRendererSolid.color( agg::rgba8(mColorRedStroke, mColorGreenStroke, mColorBlueStroke, mStrokeOpacity) ); agg::render_scanlines( mFontManager.gray8_adaptor(), mFontManager.gray8_scanline(), mRendererSolid ); + + start_x += glyph->advance_x/scalex; + //start_y += glyph->advance_y/scaley; } - - textHeight = textHeight>(glyph->bounds.y2-glyph->bounds.y1+yOffset) ? - textHeight : (glyph->bounds.y2-glyph->bounds.y1+yOffset); - start_x += glyph->advance_x/scalex; - //start_y += glyph->advance_y; } } - textWidth += start_x; memset( utf8_string, '\0', max_string_length ); } @@ -402,9 +451,12 @@ /* convert the fci to Base14/Type1 font information */ wxString fontname=fontdir + wxString( plP_FCI2FontName(fci, TrueTypeLookup, N_TrueTypeLookup), *wxConvCurrent ); - mFontEngine.load_font( "c:\\windows\\fonts\\arial.ttf", 0, agg::glyph_ren_agg_gray8 ); + if( !mFontEngine.load_font("/usr/share/fonts/truetype/freefont/FreeSans.ttf", 0, agg::glyph_ren_agg_gray8) ) + plabort( "Font could not be loaded" ); + //mFontEngine.load_font( "c:\\windows\\fonts\\arial.ttf", 0, agg::glyph_ren_agg_gray8 ); mFontEngine.height( fontSize*fontScale ); mFontEngine.width( fontSize*fontScale ); + mFontEngine.hinting( true ); mFontEngine.flip_y( false ); mContour.width( fontSize*fontScale*0.2); } @@ -412,6 +464,8 @@ void wxPLDevAGG::ProcessString( PLStream* pls, EscText* args ) { + plabort( "The AGG backend can't process the text yet own its own!" ); + /* Check that we got unicode, warning message and return if not */ if( args->unicode_array_len == 0 ) { printf( "Non unicode string passed to a wxWidgets driver, ignoring\n" ); @@ -433,18 +487,19 @@ cos_shear = cos(shear); sin_shear = sin(shear); + PSDrawText( args->unicode_array, args->unicode_array_len, false ); + printf("textWidth=%f, textHeight=%f\n", textWidth, textHeight ); + agg::trans_affine mtx; - mtx *= agg::trans_affine_rotation( rotation ); - mtx *= agg::trans_affine_skewing( shear, shear ); + mtx.reset(); mtx *= agg::trans_affine_translation( args->x, args->y ); + //mtx *= agg::trans_affine_rotation( rotation ); + //mtx *= agg::trans_affine_skewing( shear, shear ); mtx *= mTransform; + mtx *= agg::trans_affine_translation( -args->just*textWidth/scalex, -0.5*textHeight ); + mtx *= agg::trans_affine_translation( -args->just*textWidth/scalex, -0.5*textHeight ); mFontEngine.transform(mtx); - PSDrawText( args->unicode_array, args->unicode_array_len, false ); - printf("textWidth=%f, textHeight=%f\n", textWidth, textHeight ); - - mtx *= agg::trans_affine_translation( -args->just*textWidth/scalex, -0.5*textHeight/scaley ); - //mFontEngine.transform(mtx); PSDrawText( args->unicode_array, args->unicode_array_len, true ); AddtoClipRegion( 0, 0, width, height ); Modified: trunk/drivers/wxwidgets_dc.cpp =================================================================== --- trunk/drivers/wxwidgets_dc.cpp 2008-11-18 21:34:06 UTC (rev 8988) +++ trunk/drivers/wxwidgets_dc.cpp 2008-11-18 21:43:33 UTC (rev 8989) @@ -24,6 +24,7 @@ /* TODO: * - text clipping * - implement AddToClipRegion for text correctly + * - Example 16 problem at last page */ #include "plDevs.h" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-11-18 22:40:37
|
Revision: 8991 http://plplot.svn.sourceforge.net/plplot/?rev=8991&view=rev Author: smekal Date: 2008-11-18 22:40:34 +0000 (Tue, 18 Nov 2008) Log Message: ----------- Fixed bug in wxGraphicsContext backend, where in some examples lines were missing. Modified Paths: -------------- trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_dc.cpp trunk/drivers/wxwidgets_gc.cpp Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2008-11-18 21:45:34 UTC (rev 8990) +++ trunk/drivers/wxwidgets.h 2008-11-18 22:40:34 UTC (rev 8991) @@ -326,6 +326,14 @@ /* text colors */ unsigned char textRed, textGreen, textBlue; + + unsigned char mStrokeOpacity; + unsigned char mColorRedStroke; + unsigned char mColorGreenStroke; + unsigned char mColorBlueStroke; + unsigned char mColorRedFill; + unsigned char mColorGreenFill; + unsigned char mColorBlueFill; }; #endif @@ -467,7 +475,7 @@ \*----------------------------------------------------------------------*/ /* define if you want debug output */ -// #define _DEBUG //*/ +/* #define _DEBUG //*/ /* #define _DEBUG_VERBOSE //*/ void Log_Verbose( const char *fmt, ... ); void Log_Debug( const char *fmt, ... ); Modified: trunk/drivers/wxwidgets_dc.cpp =================================================================== --- trunk/drivers/wxwidgets_dc.cpp 2008-11-18 21:45:34 UTC (rev 8990) +++ trunk/drivers/wxwidgets_dc.cpp 2008-11-18 22:40:34 UTC (rev 8991) @@ -24,7 +24,6 @@ /* TODO: * - text clipping * - implement AddToClipRegion for text correctly - * - Example 16 problem at last page */ #include "plDevs.h" Modified: trunk/drivers/wxwidgets_gc.cpp =================================================================== --- trunk/drivers/wxwidgets_gc.cpp 2008-11-18 21:45:34 UTC (rev 8990) +++ trunk/drivers/wxwidgets_gc.cpp 2008-11-18 22:40:34 UTC (rev 8991) @@ -94,24 +94,14 @@ { // Log_Verbose( "%s", __FUNCTION__ ); - wxDouble x1a, y1a, x2a, y2a; - - x1a=xa[0]/scalex; - y1a=height-ya[0]/scaley; - wxGraphicsPath path=m_context->CreatePath(); - path.MoveToPoint( x1a, y1a ); - for( PLINT i=1; i<npts; i++ ) { - x2a=xa[i]/scalex; - y2a=height-ya[i]/scaley; - path.AddLineToPoint( x2a, y2a ); - x1a=x2a; y1a=y2a; - } + path.MoveToPoint( xa[0]/scalex, height-ya[0]/scaley ); + for( PLINT i=1; i<npts; i++ ) + path.AddLineToPoint( xa[i]/scalex, height-ya[i]/scaley ); m_context->StrokePath( path ); wxDouble x, y, w, h; path.GetBox( &x, &y, &w, &h ); - AddtoClipRegion( (int)x, (int)y, (int)(x+w), (int)(y+h) ); } @@ -127,15 +117,14 @@ if( x2<0 ) x2a=width; else x2a=x2/scalex; if( y2<0 ) y2a=height; else y2a=height-y2/scaley; - const wxPen oldPen=m_dc->GetPen(); - const wxBrush oldBrush=m_dc->GetBrush(); - m_context->SetPen( *(wxThePenList->FindOrCreatePen(wxColour(bgr, bgg, bgb), 1, wxSOLID)) ); m_context->SetBrush( wxBrush(wxColour(bgr, bgg, bgb)) ); m_context->DrawRectangle( x1a, y1a, x2a-x1a, y2a-y1a ); - m_context->SetPen( oldPen ); - m_context->SetBrush( oldBrush ); + m_context->SetPen( *(wxThePenList->FindOrCreatePen(wxColour(mColorRedStroke, mColorGreenStroke, + mColorBlueStroke, mStrokeOpacity), + 1, wxSOLID)) ); + m_context->SetBrush( wxBrush(wxColour(mColorRedFill, mColorGreenFill, mColorBlueFill, mStrokeOpacity)) ); AddtoClipRegion( (int)x1a, (int)y1a, (int)x2a, (int)y2a ); } @@ -143,7 +132,7 @@ void wxPLDevGC::FillPolygon( PLStream *pls ) { - Log_Verbose( "%s", __FUNCTION__ ); + // Log_Verbose( "%s", __FUNCTION__ ); wxGraphicsPath path=m_context->CreatePath(); path.MoveToPoint( pls->dev_x[0]/scalex, height-pls->dev_y[0]/scaley ); @@ -193,8 +182,8 @@ { // Log_Verbose( "%s", __FUNCTION__ ); - m_context->SetPen( *(wxThePenList->FindOrCreatePen(wxColour(pls->cmap0[pls->icol0].r, pls->cmap0[pls->icol0].g, - pls->cmap0[pls->icol0].b, (unsigned char)(pls->cmap0[pls->icol0].a*255)), + m_context->SetPen( *(wxThePenList->FindOrCreatePen(wxColour(mColorRedStroke, mColorGreenStroke, + mColorBlueStroke, mStrokeOpacity), pls->width>0 ? pls->width : 1, wxSOLID)) ); } @@ -203,11 +192,18 @@ { // Log_Verbose( "%s", __FUNCTION__ ); - m_context->SetPen( *(wxThePenList->FindOrCreatePen(wxColour(pls->cmap0[pls->icol0].r, pls->cmap0[pls->icol0].g, - pls->cmap0[pls->icol0].b, (unsigned char)(pls->cmap0[pls->icol0].a*255)), + mColorRedStroke = pls->cmap0[pls->icol0].r; + mColorGreenStroke = pls->cmap0[pls->icol0].g; + mColorBlueStroke = pls->cmap0[pls->icol0].b; + mColorRedFill = pls->cmap0[pls->icol0].r; + mColorGreenFill = pls->cmap0[pls->icol0].g; + mColorBlueFill = pls->cmap0[pls->icol0].b; + mStrokeOpacity = (unsigned char)(pls->cmap0[pls->icol0].a*255); + + m_context->SetPen( *(wxThePenList->FindOrCreatePen(wxColour(mColorRedStroke, mColorGreenStroke, + mColorBlueStroke, mStrokeOpacity), pls->width>0 ? pls->width : 1, wxSOLID)) ); - m_context->SetBrush( wxBrush(wxColour(pls->cmap0[pls->icol0].r, pls->cmap0[pls->icol0].g, pls->cmap0[pls->icol0].b, - (unsigned char)(pls->cmap0[pls->icol0].a*255))) ); + m_context->SetBrush( wxBrush(wxColour(mColorRedFill, mColorGreenFill, mColorBlueFill, mStrokeOpacity)) ); } @@ -215,11 +211,18 @@ { // Log_Verbose( "%s", __FUNCTION__ ); - m_context->SetPen( *(wxThePenList->FindOrCreatePen(wxColour(pls->curcolor.r, pls->curcolor.g, - pls->curcolor.b, (unsigned char)(pls->curcolor.a*255)), + mColorRedStroke = pls->curcolor.r; + mColorGreenStroke = pls->curcolor.g; + mColorBlueStroke = pls->curcolor.b; + mColorRedFill = pls->curcolor.r; + mColorGreenFill = pls->curcolor.g; + mColorBlueFill = pls->curcolor.b; + mStrokeOpacity = (unsigned char)(pls->curcolor.a*255); + + m_context->SetPen( *(wxThePenList->FindOrCreatePen(wxColour(mColorRedStroke, mColorGreenStroke, + mColorBlueStroke, mStrokeOpacity), pls->width>0 ? pls->width : 1, wxSOLID)) ); - m_context->SetBrush( wxBrush(wxColour(pls->curcolor.r, pls->curcolor.g, pls->curcolor.b, - (unsigned char)(pls->curcolor.a*255))) ); + m_context->SetBrush( wxBrush(wxColour(mColorRedFill, mColorGreenFill, mColorBlueFill, mStrokeOpacity)) ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-11-20 09:24:51
|
Revision: 9004 http://plplot.svn.sourceforge.net/plplot/?rev=9004&view=rev Author: smekal Date: 2008-11-20 09:24:38 +0000 (Thu, 20 Nov 2008) Log Message: ----------- Completely comment out debug messages to remove unnecessary functions calls (which are empty anyways). Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets_app.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-11-20 09:22:31 UTC (rev 9003) +++ trunk/drivers/wxwidgets.cpp 2008-11-20 09:24:38 UTC (rev 9004) @@ -24,6 +24,7 @@ /* TODO: * - implement the GraphicsIn stuff (only part of it so far) + * - example 29 crashes on Win32, wxWidgets driver */ #include "plDevs.h" @@ -122,7 +123,7 @@ wxPLDevBase::wxPLDevBase( void ) { - Log_Verbose( "wxPLDevBase::wxPLDevBase()" ); + // Log_Verbose( "wxPLDevBase::wxPLDevBase()" ); ready = false; ownGUI = false; @@ -290,7 +291,7 @@ void plD_init_wxwidgets( PLStream *pls ) { - Log_Verbose( "plD_init_wxwidgets()" ); + // Log_Verbose( "plD_init_wxwidgets()" ); wxPLDevBase* dev; @@ -397,7 +398,7 @@ pls->freeaspect = 1; } - Log_Verbose( "settings" ); + // Log_Verbose( "settings" ); /* Set the number of pixels per mm */ plP_setpxl( (PLFLT)VIRTUAL_PIXELS_PER_MM, (PLFLT)VIRTUAL_PIXELS_PER_MM ); @@ -438,7 +439,7 @@ \*--------------------------------------------------------------------------*/ void plD_line_wxwidgets( PLStream *pls, short x1a, short y1a, short x2a, short y2a ) { - Log_Verbose( "plD_line_wxwidgets(x1a=%d, y1a=%d, x2a=%d, y2a=%d)", x1a, y1a, x2a, y2a ); + // Log_Verbose( "plD_line_wxwidgets(x1a=%d, y1a=%d, x2a=%d, y2a=%d)", x1a, y1a, x2a, y2a ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; @@ -465,7 +466,7 @@ \*--------------------------------------------------------------------------*/ void plD_polyline_wxwidgets( PLStream *pls, short *xa, short *ya, PLINT npts ) { - Log_Verbose( "plD_polyline_wxwidgets()" ); + // Log_Verbose( "plD_polyline_wxwidgets()" ); /* should be changed to use the wxDC::DrawLines function? */ wxPLDevBase* dev = (wxPLDevBase*)pls->dev; @@ -495,7 +496,7 @@ \*--------------------------------------------------------------------------*/ void plD_eop_wxwidgets( PLStream *pls ) { - Log_Verbose( "plD_eop_wxwidgets()" ); + // Log_Verbose( "plD_eop_wxwidgets()" ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; @@ -518,7 +519,7 @@ \*--------------------------------------------------------------------------*/ void plD_bop_wxwidgets( PLStream *pls ) { - Log_Verbose( "plD_bop_wxwidgets()" ); + // Log_Verbose( "plD_bop_wxwidgets()" ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; @@ -556,7 +557,7 @@ \*--------------------------------------------------------------------------*/ void plD_tidy_wxwidgets( PLStream *pls ) { - Log_Verbose( "plD_tidy_wxwidgets()" ); + // Log_Verbose( "plD_tidy_wxwidgets()" ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; @@ -587,7 +588,7 @@ \*--------------------------------------------------------------------------*/ void plD_state_wxwidgets( PLStream *pls, PLINT op ) { - Log_Verbose( "plD_state_wxwidgets(op=%d)", op ); + // Log_Verbose( "plD_state_wxwidgets(op=%d)", op ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; @@ -630,7 +631,7 @@ \*--------------------------------------------------------------------------*/ void plD_esc_wxwidgets( PLStream *pls, PLINT op, void *ptr ) { - Log_Verbose( "plD_esc_wxwidgets(op=%d, ptr=%x)", op, ptr ); + // Log_Verbose( "plD_esc_wxwidgets(op=%d, ptr=%x)", op, ptr ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; @@ -704,7 +705,7 @@ \*--------------------------------------------------------------------------*/ static void fill_polygon( PLStream *pls ) { - Log_Verbose( "fill_polygon(), npts=%d, x[0]=%d, y[0]=%d", pls->dev_npts, pls->dev_y[0], pls->dev_y[0] ); + // Log_Verbose( "fill_polygon(), npts=%d, x[0]=%d, y[0]=%d", pls->dev_npts, pls->dev_y[0], pls->dev_y[0] ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; @@ -732,7 +733,7 @@ void wx_set_size( PLStream* pls, int width, int height ) { /* TODO: buffer must be resized here or in wxplotstream */ - Log_Verbose( "wx_set_size()" ); + // Log_Verbose( "wx_set_size()" ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; @@ -816,7 +817,7 @@ \*----------------------------------------------------------------------*/ static void plD_pixel_wxwidgets( PLStream *pls, short x, short y ) { - Log_Verbose( "plD_pixel_wxwidgets" ); + // Log_Verbose( "plD_pixel_wxwidgets" ); wxPLDevBase *dev=(wxPLDevBase*)pls->dev; @@ -843,7 +844,7 @@ \*----------------------------------------------------------------------*/ static void plD_set_pixel_wxwidgets( PLStream *pls, short x, short y, PLINT colour) { - Log_Verbose( "plD_set_pixel_wxwidgets" ); + // Log_Verbose( "plD_set_pixel_wxwidgets" ); wxPLDevBase *dev=(wxPLDevBase*)pls->dev; @@ -870,7 +871,7 @@ \*--------------------------------------------------------------------------*/ static PLINT plD_read_pixel_wxwidgets ( PLStream *pls, short x, short y ) { - Log_Verbose( "plD_read_pixel_wxwidgets" ); + // Log_Verbose( "plD_read_pixel_wxwidgets" ); wxPLDevBase *dev=(wxPLDevBase*)pls->dev; @@ -891,7 +892,7 @@ \*----------------------------------------------------------------------*/ static void init_freetype_lv1( PLStream *pls ) { - Log_Verbose( "init_freetype_lv1" ); + // Log_Verbose( "init_freetype_lv1" ); wxPLDevBase *dev=(wxPLDevBase*)pls->dev; @@ -939,7 +940,7 @@ static void init_freetype_lv2( PLStream *pls ) { - Log_Verbose( "init_freetype_lv2" ); + // Log_Verbose( "init_freetype_lv2" ); wxPLDevBase *dev=(wxPLDevBase *)pls->dev; FT_Data *FT=(FT_Data *)pls->FT; @@ -991,7 +992,7 @@ \*--------------------------------------------------------------------------*/ static void GetCursorCmd( PLStream* pls, PLGraphicsIn* ptr) { - Log_Verbose( "GetCursorCmd" ); + // Log_Verbose( "GetCursorCmd" ); wxPLDevBase *dev=(wxPLDevBase *)pls->dev; PLGraphicsIn *gin = &(dev->gin); @@ -1029,7 +1030,7 @@ \*----------------------------------------------------------------------*/ static void install_buffer( PLStream *pls ) { - Log_Verbose( "install_buffer" ); + // Log_Verbose( "install_buffer" ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; static bool initApp=false; @@ -1082,7 +1083,7 @@ \*----------------------------------------------------------------------*/ static void wxRunApp( PLStream *pls, bool runonce ) { - Log_Verbose( "wxRunApp" ); + // Log_Verbose( "wxRunApp" ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; Modified: trunk/drivers/wxwidgets_app.cpp =================================================================== --- trunk/drivers/wxwidgets_app.cpp 2008-11-20 09:22:31 UTC (rev 9003) +++ trunk/drivers/wxwidgets_app.cpp 2008-11-20 09:24:38 UTC (rev 9004) @@ -111,7 +111,7 @@ \*----------------------------------------------------------------------*/ bool wxPLplotApp::OnInit() { - Log_Verbose( "wxPLplotApp::OnInit" ); + // Log_Verbose( "wxPLplotApp::OnInit" ); exit=false; advance=false; @@ -127,7 +127,7 @@ \*----------------------------------------------------------------------*/ void wxPLplotApp::SetRefreshFlag( bool flag ) { - Log_Verbose( "wxPLplotApp::SetRefreshFlag" ); + // Log_Verbose( "wxPLplotApp::SetRefreshFlag" ); for( size_t i=0; i<FrameArray.GetCount(); i++) FrameArray[i]->SetRefreshFlag( flag ); @@ -141,7 +141,7 @@ \*----------------------------------------------------------------------*/ void wxPLplotApp::OnIdle( wxIdleEvent& WXUNUSED(event) ) { - Log_Verbose( "wxPLplotApp::OnIdle" ); + // Log_Verbose( "wxPLplotApp::OnIdle" ); bool refresh=false; @@ -167,7 +167,8 @@ wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER | wxCLIP_CHILDREN ) { - Log_Verbose( "wxPLplotFrame::wxPLplotFrame" ); + // Log_Verbose( "wxPLplotFrame::wxPLplotFrame" ); + m_dev=(wxPLDevBase*)pls->dev; m_panel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxCLIP_CHILDREN ); @@ -208,7 +209,7 @@ \*----------------------------------------------------------------------*/ void wxPLplotFrame::OnMenu( wxCommandEvent& event ) { - Log_Verbose( "wxPLplotFrame::OnMenu" ); + // Log_Verbose( "wxPLplotFrame::OnMenu" ); switch( event.GetId() ) { @@ -242,7 +243,7 @@ \*----------------------------------------------------------------------*/ void wxPLplotFrame::OnClose( wxCloseEvent& event ) { - Log_Verbose( "wxPLplotFrame::OnClose" ); + // Log_Verbose( "wxPLplotFrame::OnClose" ); m_dev->exit=true; wxGetApp().ExitMainLoop(); @@ -305,7 +306,7 @@ : wxWindow( parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxWANTS_CHARS|wxCLIP_CHILDREN ) { - Log_Verbose( "wxPLplotWindow::wxPLplotWindow" ); + // Log_Verbose( "wxPLplotWindow::wxPLplotWindow" ); m_pls=pls; m_dev=(wxPLDevBase*)pls->dev; @@ -328,7 +329,7 @@ \*----------------------------------------------------------------------*/ void wxPLplotWindow::OnPaint( wxPaintEvent& WXUNUSED(event) ) { - Log_Verbose( "wxPLplotWindow::OnPaint" ); + // Log_Verbose( "wxPLplotWindow::OnPaint" ); /* copy bitmap into client area */ wxPaintDC dc( this ); @@ -368,7 +369,7 @@ void wxPLplotWindow::OnChar( wxKeyEvent& event ) { - Log_Verbose( "wxPLplotWindow::OnChar" ); + // Log_Verbose( "wxPLplotWindow::OnChar" ); int keycode = event.GetKeyCode(); switch( keycode ) { @@ -396,7 +397,7 @@ void wxPLplotWindow::OnIdle( wxIdleEvent& WXUNUSED(event) ) { - Log_Verbose( "wxPLplotWindow::OnIdle" ); + // Log_Verbose( "wxPLplotWindow::OnIdle" ); if( refresh ) { if(!m_dev->newclipregion) { @@ -424,13 +425,13 @@ void wxPLplotWindow::OnErase( wxEraseEvent &WXUNUSED(event) ) { - Log_Verbose( "wxPLplotWindow::OnErase" ); + // Log_Verbose( "wxPLplotWindow::OnErase" ); } void wxPLplotWindow::OnSize( wxSizeEvent & WXUNUSED(event) ) { - Log_Verbose( "wxPLplotWindow::OnSize" ); + // Log_Verbose( "wxPLplotWindow::OnSize" ); int width, height; GetClientSize( &width, &height ); @@ -455,7 +456,7 @@ void wxPLplotWindow::OnMaximize( wxMaximizeEvent & WXUNUSED(event) ) { - Log_Verbose( "wxPLplotWindow::OnMax" ); + // Log_Verbose( "wxPLplotWindow::OnMax" ); wxSizeEvent event( GetClientSize() ); AddPendingEvent( event ); @@ -463,7 +464,7 @@ void wxPLplotWindow::OnMouse( wxMouseEvent &event ) { - Log_Verbose( "wxPLplotWindow::OnMouse" ); + // Log_Verbose( "wxPLplotWindow::OnMouse" ); PLGraphicsIn *gin = &(m_dev->gin); wxPoint pos( event.GetPosition() ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-11-24 16:13:22
|
Revision: 9015 http://plplot.svn.sourceforge.net/plplot/?rev=9015&view=rev Author: smekal Date: 2008-11-24 16:13:13 +0000 (Mon, 24 Nov 2008) Log Message: ----------- Added some documentation. The Locate mode is now nearly fully implemented in the wxWidgets driver. By pressing the "L" key in a plot (driver locate mode) or calling plGetCursor() from a program (API locate mode, e.g. run x01c -locate) the driver goes into a locate mode. Clicking a mouse button or keyboardkey while the mouse cursor is in a plot, x,y values are printed to the console as well as information about the key or button. Clicking outside a plot or pressing the ESC key ends the locate mode. In Addition, a right mouse click will advance to the next plot (as the ENTER, SPACE and CURSOR RIGHT keys). Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_app.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-11-21 21:56:30 UTC (rev 9014) +++ trunk/drivers/wxwidgets.cpp 2008-11-24 16:13:13 UTC (rev 9015) @@ -21,10 +21,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ - /* TODO: - * - implement the GraphicsIn stuff (only part of it so far) - * - example 29 crashes on Win32, wxWidgets driver + * - NA */ #include "plDevs.h" @@ -992,11 +990,11 @@ #endif -/*--------------------------------------------------------------------------*\ +/*-------------------------------------------------------------------------- * GetCursorCmd() * * Waits for a graphics input event and returns coordinates. -\*--------------------------------------------------------------------------*/ + *--------------------------------------------------------------------------*/ static void GetCursorCmd( PLStream* pls, PLGraphicsIn* ptr) { // Log_Verbose( "GetCursorCmd" ); @@ -1022,19 +1020,19 @@ -/*----------------------------------------------------------------------*\ +/*---------------------------------------------------------------------- * This part includes wxWidgets specific functions, which allow to * open a window from the command line, if needed. -\*----------------------------------------------------------------------*/ + *----------------------------------------------------------------------*/ -/*----------------------------------------------------------------------*\ +/*---------------------------------------------------------------------- * void install_buffer( PLStream *pls ) * * If this driver is called from a command line executable (and not * from within a wxWidgets program), this function prepares a DC and a * bitmap to plot into. -\*----------------------------------------------------------------------*/ + *----------------------------------------------------------------------*/ static void install_buffer( PLStream *pls ) { // Log_Verbose( "install_buffer" ); @@ -1082,12 +1080,12 @@ } -/*----------------------------------------------------------------------*\ +/*---------------------------------------------------------------------- * void wxRunApp( PLStream *pls, bool runonce ) * * This is a hacked wxEntry-function, so that wxUninitialize is not * called twice. Here we actually start the wxApplication. -\*----------------------------------------------------------------------*/ + *----------------------------------------------------------------------*/ static void wxRunApp( PLStream *pls, bool runonce ) { // Log_Verbose( "wxRunApp" ); Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2008-11-21 21:56:30 UTC (rev 9014) +++ trunk/drivers/wxwidgets.h 2008-11-24 16:13:13 UTC (rev 9015) @@ -392,6 +392,7 @@ void OnSize( wxSizeEvent & WXUNUSED(event) ); void OnMaximize( wxMaximizeEvent & WXUNUSED(event) ); void OnMouse( wxMouseEvent& event ); + void Locate( void ); void DrawCrosshair(); PLStream *m_pls; Modified: trunk/drivers/wxwidgets_app.cpp =================================================================== --- trunk/drivers/wxwidgets_app.cpp 2008-11-21 21:56:30 UTC (rev 9014) +++ trunk/drivers/wxwidgets_app.cpp 2008-11-24 16:13:13 UTC (rev 9015) @@ -19,6 +19,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +/* TODO: + * - Locate mode is implemented, but user functions are not called + */ + + #include "plDevs.h" #ifdef PLD_wxwidgets @@ -26,12 +31,10 @@ /* plplot headers */ #include "plplotP.h" #include "drivers.h" +#include "plevent.h" /* wxwidgets headers */ #include "wx/wx.h" -//#include "wx/image.h" -//#include "wx/filedlg.h" -//#include "wx/display.h" /* std and driver headers */ #include "wxwidgets.h" @@ -338,11 +341,13 @@ int vX, vY, vW, vH; wxRegionIterator upd( GetUpdateRegion() ); + // remove the xhair before updating if( m_dev->draw_xhair && upd && xhair_drawn ) { dc.SetLogicalFunction( wxINVERT ); - dc.CrossHair( mouse_x, mouse_y ); + dc.CrossHair( old_mouse_x, old_mouse_y ); dc.SetLogicalFunction( wxCOPY ); xhair_drawn = false; + old_mouse_x=old_mouse_y=-1; } while( upd ) { @@ -360,36 +365,81 @@ if( m_dev->draw_xhair && !xhair_drawn ) { dc.SetLogicalFunction( wxINVERT ); - dc.CrossHair( mouse_x, mouse_y ); + dc.CrossHair( mouse_x, mouse_y ); dc.SetLogicalFunction( wxCOPY ); + old_mouse_x=mouse_x; + old_mouse_y=mouse_y; xhair_drawn=true; } } +/*---------------------------------------------------------------------- + * void wxPLplotWindow::OnChar( wxKeyEvent& event ) + * + * Handle key events. + *----------------------------------------------------------------------*/ void wxPLplotWindow::OnChar( wxKeyEvent& event ) { // Log_Verbose( "wxPLplotWindow::OnChar" ); + PLGraphicsIn *gin = &(m_dev->gin); + + int width, height; + GetClientSize( &width, &height ); + + gin->pX = mouse_x; + gin->pY = mouse_y; + gin->dX = (PLFLT) mouse_x / (width - 1); + gin->dY = 1.0 - (PLFLT) mouse_y / (height - 1); + + // gin->state = keyEvent->state; + int keycode = event.GetKeyCode(); - switch( keycode ) { - case 'L': - m_dev->locate_mode = LOCATE_INVOKED_VIA_DRIVER; - m_dev->draw_xhair=true; + gin->string[0] = (char)keycode; + gin->string[1] = '\0'; + + // ESCAPE, RETURN, etc. are already in ASCII equivalent + gin->keysym = keycode; + + if( m_dev->locate_mode ) { + /* End locate mode on <Escape> */ + if( gin->keysym == PLK_Escape ) { + if( m_dev->locate_mode == LOCATE_INVOKED_VIA_API ) + wxGetApp().SetAdvanceFlag(); + m_dev->locate_mode = 0; + m_dev->draw_xhair = false; DrawCrosshair(); - break; - case 'Q': - case WXK_ESCAPE: - m_dev->exit=true; - wxGetApp().SetExitFlag(); - break; - case WXK_RETURN: - case WXK_SPACE: - case WXK_RIGHT: - wxGetApp().SetAdvanceFlag(); - break; - default: - break; + plGinInit(gin); + } + + Locate(); + } else { + /* Call user keypress event handler. Since this is called first, the user + * can disable all internal event handling by setting key.keysym to 0. */ + //if (pls->KeyEH != NULL) + // (*pls->KeyEH) (gin, pls->KeyEH_data, &dev->exit_eventloop); + // TODO: This must be tested and implemented + + switch( gin->keysym ) { + case 'L': + m_dev->locate_mode = LOCATE_INVOKED_VIA_DRIVER; + m_dev->draw_xhair=true; + DrawCrosshair(); + break; + case 'Q': + case PLK_Escape: + m_dev->exit=true; + wxGetApp().SetExitFlag(); + break; + case PLK_Return: + case WXK_SPACE: + case WXK_RIGHT: + wxGetApp().SetAdvanceFlag(); + break; + default: + break; + } } event.Skip(); @@ -462,46 +512,111 @@ AddPendingEvent( event ); } + +/*---------------------------------------------------------------------- + * void wxPLplotWindow::OnMouse( wxMouseEvent &event ) + * + * Handle mouse events. + *----------------------------------------------------------------------*/ void wxPLplotWindow::OnMouse( wxMouseEvent &event ) { // Log_Verbose( "wxPLplotWindow::OnMouse" ); - PLGraphicsIn *gin = &(m_dev->gin); wxPoint pos( event.GetPosition() ); - mouse_x = pos.x; mouse_y = pos.y; - if( event.LeftDown() ) { + if( event.ButtonDown() ) { + PLGraphicsIn *gin = &(m_dev->gin); + int width, height; GetClientSize( &width, &height ); - gin->pX = pos.x; - gin->pY = pos.y; - gin->dX = (PLFLT) pos.x / (width - 1); - gin->dY = 1.0 - (PLFLT) pos.y / (height - 1); + gin->pX = mouse_x; + gin->pY = mouse_y; + gin->dX = (PLFLT) mouse_x / (width - 1); + gin->dY = 1.0 - (PLFLT) mouse_y / (height - 1); + + if( event.LeftDown() ) { + gin->button = 1; // X11/X.h: #define Button1 1 + gin->state = 1<<8; // X11/X.h: #define Button1Mask (1<<8) + } else if ( event.MiddleDown() ) { + gin->button = 2; // X11/X.h: #define Button2 2 + gin->state = 1<<9; // X11/X.h: #define Button2Mask (1<<9) + } else if ( event.RightDown() ) { + gin->button = 3; // X11/X.h: #define Button3 3 + gin->state = 1<<10; // X11/X.h: #define Button3Mask (1<<10) + } + gin->keysym = 0x20; // keysym for button event from xwin.c - gin->button = 1; // X11/X.h: #define Button1 1 - gin->state = 1<<8; // X11/X.h: #define Button1Mask (1<<8) - gin->keysym = 0x20; // TODO: ????? from xwin.c + if( m_dev->locate_mode ) + Locate(); + else { + /* Call user event handler. Since this is called first, the user can + * disable all PLplot internal event handling by setting gin->button to 0. */ + //if( pls->ButtonEH != NULL) + // (*pls->ButtonEH)( gin, pls->ButtonEH_data, &dev->exit_eventloop ); + // TODO: This must be tested and implemented! + + /* Handle internal events */ + switch( gin->button ) { + case 3: // on right mouse button advance + wxGetApp().SetAdvanceFlag(); + break; + default: + break; + } + } } - if( event.LeftDown() ) { - if( plTranslateCursor(gin) ) { + DrawCrosshair(); +} + + +/*---------------------------------------------------------------------- + * void wxPLplotWindow::Locate( void ) + * + * Take care of Locate mode, called by OnChar() and OnMouse(). + *----------------------------------------------------------------------*/ +void wxPLplotWindow::Locate( void ) +{ + // Log_Verbose( "wxPLplotWindow::Locate" ); + + PLGraphicsIn *gin = &(m_dev->gin); + + // Some event (key, button) occured, and if the locate mode + // was initiated by the API we need to return back to the + // user program + if( m_dev->locate_mode == LOCATE_INVOKED_VIA_API ) + wxGetApp().SetAdvanceFlag(); + + /* Call user locate mode handler if provided */ + //if( pls->LocateEH != NULL ) + // (*pls->LocateEH)( gin, pls->LocateEH_data, &dev->locate_mode ); + // TODO: This must be tested and implemented! + // else { + if( plTranslateCursor(gin) ) { /* If invoked by the API, we're done */ /* Otherwise send report to stdout */ - if( m_dev->locate_mode == LOCATE_INVOKED_VIA_DRIVER ) - printf( "%f %f\n", gin->wX, gin->wY ); + if( m_dev->locate_mode == LOCATE_INVOKED_VIA_DRIVER ) + if( gin->keysym < 0xFF && isprint(gin->keysym) ) + printf("%f %f %c\n", gin->wX, gin->wY, gin->keysym); + else + printf("%f %f 0x%02x\n", gin->wX, gin->wY, gin->keysym); } else { /* Selected point is out of bounds, so end locate mode */ - m_dev->locate_mode = 0; - m_dev->draw_xhair=false; + m_dev->locate_mode = 0; + m_dev->draw_xhair=false; } - } - - DrawCrosshair(); + //} } + +/*---------------------------------------------------------------------- + * void wxPLplotWindow::DrawCrosshair() + * + * Draw a cross hair (inverted lines). + *----------------------------------------------------------------------*/ void wxPLplotWindow::DrawCrosshair() { /* draw cross hair */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-11-26 21:13:32
|
Revision: 9021 http://plplot.svn.sourceforge.net/plplot/?rev=9021&view=rev Author: smekal Date: 2008-11-26 21:13:20 +0000 (Wed, 26 Nov 2008) Log Message: ----------- Abort and exit error messages are now shown in a message dialog. Improved documentation of functions. Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets_agg.cpp trunk/drivers/wxwidgets_dc.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-11-26 18:47:40 UTC (rev 9020) +++ trunk/drivers/wxwidgets.cpp 2008-11-26 21:13:20 UTC (rev 9021) @@ -422,10 +422,6 @@ /* set dpi */ plspage(VIRTUAL_PIXELS_PER_IN/dev->scalex, VIRTUAL_PIXELS_PER_IN/dev->scaley, 0, 0, 0, 0); - /* Set wx error handler for various errors in plplot*/ - /* plsexit(plD_errorexithandler_wxwidgets); */ - /* plsabort(plD_erroraborthandler_wxwidgets); */ - #ifdef HAVE_FREETYPE if( dev->freetype ) init_freetype_lv2( pls ); @@ -776,38 +772,31 @@ } -/*----------------------------------------------------------------------*\ - * int plD_errorexithandler_wxwidgets( char *errormessage ) +/*---------------------------------------------------------------------- + * int plD_errorexithandler_wxwidgets( const char *errormessage ) * * If an PLplot error occurs, this function shows a dialog regarding * this error and than exits. -\*----------------------------------------------------------------------*/ -int plD_errorexithandler_wxwidgets( char *errormessage ) + *----------------------------------------------------------------------*/ +int plD_errorexithandler_wxwidgets( const char *errormessage ) { - /* wxPLDevBase* dev = (wxPLDevBase*)pls->dev; */ + wxMessageDialog dialog( 0, wxString(errormessage, *wxConvCurrent),wxString("wxWidgets PLplot App error",*wxConvCurrent),wxOK ); + dialog.ShowModal(); - /* if( dev->ownGUI ) { */ - wxMessageDialog dialog( 0, wxString(errormessage, *wxConvCurrent),wxString("wxPlot error",*wxConvCurrent),wxOK ); - dialog.ShowModal(); - plend(); - return 0; - /*} */ + return 0; } -/*----------------------------------------------------------------------*\ - * void plD_erroraborthandler_wxwidgets( char *errormessage ) + +/*---------------------------------------------------------------------- + * void plD_erroraborthandler_wxwidgets( const char *errormessage ) * - * If an PLplot error occurs, this function shows a dialog regarding + * If PLplot aborts, this function shows a dialog regarding * this error. -\*----------------------------------------------------------------------*/ -void plD_erroraborthandler_wxwidgets( char *errormessage ) + *----------------------------------------------------------------------*/ +void plD_erroraborthandler_wxwidgets( const char *errormessage ) { - /* wxPLDevBase* dev = (wxPLDevBase*)pls->dev; */ - - /* if( dev->ownGUI ) { */ - wxMessageDialog dialog( 0,(wxString(errormessage, *wxConvCurrent)+ wxString(" aborting operation...", *wxConvCurrent)), wxString("wxPlot error",*wxConvCurrent), wxOK ); - dialog.ShowModal(); - /* } */ + wxMessageDialog dialog( 0,(wxString(errormessage, *wxConvCurrent)+wxString(" aborting operation...", *wxConvCurrent)), wxString("wxWidgets PLplot App abort",*wxConvCurrent), wxOK ); + dialog.ShowModal(); } @@ -1076,6 +1065,10 @@ dev->ready = true; + /* Set wx error handler for various errors in plplot*/ + plsexit( plD_errorexithandler_wxwidgets ); + plsabort( plD_erroraborthandler_wxwidgets ); + /* replay command we may have missed */ plD_bop_wxwidgets( pls ); } @@ -1112,7 +1105,7 @@ but not for Windows, but it doesn't harm */ wxIdleEvent event; wxGetApp().AddPendingEvent( event ); - wxGetApp().OnRun(); /* start wxWidgets application */ + wxGetApp().OnRun(); /* start wxWidgets application */ callOnExit.exit=false; } wxCATCH_ALL( wxGetApp().OnUnhandledException(); fprintf(stderr, "Problem running wxWidgets!\n"); exit(0); ) Modified: trunk/drivers/wxwidgets_agg.cpp =================================================================== --- trunk/drivers/wxwidgets_agg.cpp 2008-11-26 18:47:40 UTC (rev 9020) +++ trunk/drivers/wxwidgets_agg.cpp 2008-11-26 21:13:20 UTC (rev 9021) @@ -60,7 +60,12 @@ #define makeunixslash( b ) do { char *I; for( I=b;*I!=0;*I++ ) if( *I=='\\' ) *I='/';} while(0) -/* Constructor initializes all variables and objects */ +/*-------------------------------------------------------------------------- + * wxPLDevAGG::wxPLDevAGG() + * + * Constructor of the AGG wxWidgets device based on the wxPLDevBase + * class. Initialisations of variables and objects are done. + *--------------------------------------------------------------------------*/ wxPLDevAGG::wxPLDevAGG() : wxPLDevBase(), mRenderingBuffer(), @@ -158,7 +163,11 @@ } -/* Deconstructor frees allocated buffer */ +/*-------------------------------------------------------------------------- + * wxPLDevAGG::~wxPLDevAGG() + * + * Deconstructor frees allocated buffer. + *--------------------------------------------------------------------------*/ wxPLDevAGG::~wxPLDevAGG() { if( ownGUI ) @@ -167,6 +176,12 @@ } +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::drawPath( drawPathFlag flag ) + * + * Common function which either draws a stroke along a path or a filled + * polygon surrounded by a stroke depending on flag. + *--------------------------------------------------------------------------*/ void wxPLDevAGG::drawPath( drawPathFlag flag ) { mRasterizer.reset(); @@ -198,6 +213,11 @@ } +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::DrawLine( short x1a, short y1a, short x2a, short y2a ) + * + * Draw a line from (x1a, y1a) to (x2a, y2a). + *--------------------------------------------------------------------------*/ void wxPLDevAGG::DrawLine( short x1a, short y1a, short x2a, short y2a ) { mPath.remove_all(); @@ -211,6 +231,11 @@ } +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::DrawPolyline( short *xa, short *ya, PLINT npts ) + * + * Draw a poly line - coordinates are in the xa and ya arrays. + *--------------------------------------------------------------------------*/ void wxPLDevAGG::DrawPolyline( short *xa, short *ya, PLINT npts ) { mPath.remove_all(); @@ -225,6 +250,12 @@ } +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, + * PLINT x1, PLINT y1, PLINT x2, PLINT y2 ) + * + * Clear parts ((x1,y1) to (x2,y2)) of the background in color (bgr,bgg,bgb). + *--------------------------------------------------------------------------*/ void wxPLDevAGG::ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, PLINT x1, PLINT y1, PLINT x2, PLINT y2 ) { if( x1<0 && y1<0 && x2<0 && y2<0 ) { @@ -255,6 +286,13 @@ } +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::AGGAddtoClipRegion( short x1, short y1, + * short x2, short y2 ) + * + * Adds the region (x1,y1)-(x2,y2) to the regions which needs to be + * updated/redrawn. + *--------------------------------------------------------------------------*/ void wxPLDevAGG::AGGAddtoClipRegion( short x1, short y1, short x2, short y2 ) { double x1d=x1, x2d=x2, y1d=y1, y2d=y2; @@ -265,6 +303,11 @@ } +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::FillPolygon( PLStream *pls ) + * + * Draw a filled polygon. + *--------------------------------------------------------------------------*/ void wxPLDevAGG::FillPolygon( PLStream *pls ) { short *xa = pls->dev_x; @@ -284,6 +327,12 @@ } +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::BlitRectangle( wxPaintDC* dc, int vX, int vY, + * int vW, int vH ) + * + * Copy/Blit a rectangle ((vX,vY) to (vX+vW,vY+vH)) into given dc. + *--------------------------------------------------------------------------*/ void wxPLDevAGG::BlitRectangle( wxPaintDC* dc, int vX, int vY, int vW, int vH ) { if( mBuffer ) { @@ -296,6 +345,11 @@ } +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::CreateCanvas( void ) + * + * Create canvas (bitmap and dc) if the driver provides the GUI. + *--------------------------------------------------------------------------*/ void wxPLDevAGG::CreateCanvas() { if( ownGUI ) { @@ -316,12 +370,22 @@ } +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::SetWidth( PLStream *pls ) + * + * Set the width of the drawing pen. + *--------------------------------------------------------------------------*/ void wxPLDevAGG::SetWidth( PLStream *pls ) { mStrokeWidth = (scalex+scaley)/2.0*(pls->width>0 ? pls->width : 1); // TODO: why and when ist width 0??? } +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::SetColor0( PLStream *pls ) + * + * Set color from colormap 0. + *--------------------------------------------------------------------------*/ void wxPLDevAGG::SetColor0( PLStream *pls ) { mColorRedStroke = pls->cmap0[pls->icol0].r; @@ -331,6 +395,11 @@ } +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::SetColor1( PLStream *pls ) + * + * Set color from colormap 1. + *--------------------------------------------------------------------------*/ void wxPLDevAGG::SetColor1( PLStream *pls ) { mColorRedStroke = pls->curcolor.r; @@ -340,12 +409,12 @@ } -/*--------------------------------------------------------------------------*\ - * void wx_set_buffer( PLStream* pls, wxImage* dc ) +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::SetExternalBuffer( void* dc ) * - * Adds a dc to the stream. The associated device is attached to the canvas - * as the property "dev". -\*--------------------------------------------------------------------------*/ + * Adds a dc to the device. In that case, the drivers doesn't provide + * a GUI. A new buffer (image) will be created and set up. + *--------------------------------------------------------------------------*/ void wxPLDevAGG::SetExternalBuffer( void* dc ) { mDC=(wxDC*)dc; /* Add the dc to the device */ @@ -367,18 +436,35 @@ #ifdef HAVE_FREETYPE +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::PutPixel( short x, short y, PLINT color ) + * + * Draw a pixel in color color @ (x,y). + *--------------------------------------------------------------------------*/ void wxPLDevAGG::PutPixel( short x, short y, PLINT color ) { mBuffer->SetRGB( x, y, GetRValue(color), GetGValue(color), GetBValue(color) ); AddtoClipRegion( x, y, x, y ); } + +/*-------------------------------------------------------------------------- + * void wxPLDevAGG::PutPixel( short x, short y ) + * + * Draw a pixel in current color @ (x,y). + *--------------------------------------------------------------------------*/ void wxPLDevAGG::PutPixel( short x, short y ) { mBuffer->SetRGB( x, y, mColorRedStroke, mColorGreenStroke, mColorBlueStroke ); AddtoClipRegion( x, y, x, y ); } + +/*-------------------------------------------------------------------------- + * PLINT wxPLDevAGG::GetPixel( short x, short y ) + * + * Get color information from pixel @ (x,y). + *--------------------------------------------------------------------------*/ PLINT wxPLDevAGG::GetPixel( short x, short y ) { return RGB( mBuffer->GetRed( x, y ), mBuffer->GetGreen( x, y ), mBuffer->GetBlue( x, y ) ); Modified: trunk/drivers/wxwidgets_dc.cpp =================================================================== --- trunk/drivers/wxwidgets_dc.cpp 2008-11-26 18:47:40 UTC (rev 9020) +++ trunk/drivers/wxwidgets_dc.cpp 2008-11-26 21:13:20 UTC (rev 9021) @@ -243,7 +243,7 @@ * void wxPLDevDC::SetExternalBuffer( void* dc ) * * Adds a dc to the device. In that case, the drivers doesn't provide - * a GUI + * a GUI. *--------------------------------------------------------------------------*/ void wxPLDevDC::SetExternalBuffer( void* dc ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-11-28 19:38:03
|
Revision: 9026 http://plplot.svn.sourceforge.net/plplot/?rev=9026&view=rev Author: smekal Date: 2008-11-28 19:38:00 +0000 (Fri, 28 Nov 2008) Log Message: ----------- Error and abort message only appear if error string is no empty. "Save plot..." submenu only appears if there is any file driver (svg,...) available. Added plot menu with Locate entry (doesn't work at the moment) and "Set Orientation" entry. The latter is only available if the backends to handle the text on their own due to some problems (pls->diorot is set to zero during replot?). Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_app.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-11-28 19:22:15 UTC (rev 9025) +++ trunk/drivers/wxwidgets.cpp 2008-11-28 19:38:00 UTC (rev 9026) @@ -780,8 +780,10 @@ *----------------------------------------------------------------------*/ int plD_errorexithandler_wxwidgets( const char *errormessage ) { - wxMessageDialog dialog( 0, wxString(errormessage, *wxConvCurrent),wxString("wxWidgets PLplot App error",*wxConvCurrent),wxOK ); - dialog.ShowModal(); + if( errormessage[0] ) { + wxMessageDialog dialog( 0, wxString(errormessage, *wxConvCurrent),wxString("wxWidgets PLplot App error",*wxConvCurrent),wxOK ); + dialog.ShowModal(); + } return 0; } @@ -795,8 +797,10 @@ *----------------------------------------------------------------------*/ void plD_erroraborthandler_wxwidgets( const char *errormessage ) { - wxMessageDialog dialog( 0,(wxString(errormessage, *wxConvCurrent)+wxString(" aborting operation...", *wxConvCurrent)), wxString("wxWidgets PLplot App abort",*wxConvCurrent), wxOK ); - dialog.ShowModal(); + if( errormessage[0] ) { + wxMessageDialog dialog( 0,(wxString(errormessage, *wxConvCurrent)+wxString(" aborting operation...", *wxConvCurrent)), wxString("wxWidgets PLplot App abort",*wxConvCurrent), wxOK ); + dialog.ShowModal(); + } } Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2008-11-28 19:22:15 UTC (rev 9025) +++ trunk/drivers/wxwidgets.h 2008-11-28 19:38:00 UTC (rev 9026) @@ -383,6 +383,7 @@ void SetRefreshFlag( bool flag=true ) { refresh=flag; }; bool GetRefreshFlag( void ) { return refresh; }; + void SetOrientation( int rot ); private: void OnPaint( wxPaintEvent& event ); @@ -395,7 +396,7 @@ void Locate( void ); void DrawCrosshair(); - PLStream *m_pls; + PLStream* m_pls; wxPLDevBase* m_dev; /* windows needs to know this structure */ bool refresh; bool xhair_drawn; @@ -424,7 +425,9 @@ DECLARE_EVENT_TABLE() }; -enum { wxPL_Save=10000, wxPL_Next=10100 }; +/* menu ids */ +enum { wxPL_Save=10000, wxPL_Next=10100, wxPL_Locate, wxPL_Orientation_0, wxPL_Orientation_90, + wxPL_Orientation_180, wxPL_Orientation_270 }; /* Use this macro if you want to define your own main() or WinMain() function and call wxEntry() from there. */ Modified: trunk/drivers/wxwidgets_app.cpp =================================================================== --- trunk/drivers/wxwidgets_app.cpp 2008-11-28 19:22:15 UTC (rev 9025) +++ trunk/drivers/wxwidgets_app.cpp 2008-11-28 19:38:00 UTC (rev 9026) @@ -189,15 +189,35 @@ } wxMenu* fileMenu = new wxMenu; + if( m_dev->ndev ) { #if (wxMAJOR_VERSION<=2) & (wxMINOR_VERSION<=6) - fileMenu->Append( -1, wxT("Save plot as..."), saveMenu, wxT("Save this plot as ...!") ); + fileMenu->Append( -1, wxT("Save plot as..."), saveMenu, wxT("Save this plot as ...!") ); #else - fileMenu->AppendSubMenu( saveMenu, wxT("Save plot as..."), wxT("Save this plot as ...!") ); + fileMenu->AppendSubMenu( saveMenu, wxT("Save plot as..."), wxT("Save this plot as ...!") ); #endif + } fileMenu->Append( wxID_EXIT, wxT("E&xit\tAlt-X"), wxT("Exit wxWidgets PLplot App") ); + wxMenu* orientationMenu = new wxMenu; + orientationMenu->Append( wxPL_Orientation_0, wxT("0 deg."), wxT("Orientation 0 deg.") ); + orientationMenu->Append( wxPL_Orientation_90, wxT("90 deg."), wxT("Orientation 90 deg.") ); + orientationMenu->Append( wxPL_Orientation_180, wxT("180 deg."), wxT("Orientation 180 deg.") ); + orientationMenu->Append( wxPL_Orientation_270, wxT("270 deg."), wxT("Orientation 270 deg.") ); + + wxMenu* plotMenu = new wxMenu; + plotMenu->Append( wxPL_Locate, wxT("Locate\tL"), wxT("Enter locate mode") ); + // only add the orientation menu for hershey text processing + if( !pls->dev_text ) { +#if (wxMAJOR_VERSION<=2) & (wxMINOR_VERSION<=6) + plotMenu->Append( -1, wxT("Set Orientation to..."), orientationMenu, wxT("Set the Orientation of the plot!") ); +#else + plotMenu->AppendSubMenu( orientationMenu, wxT("Set Orientation to..."), wxT("Set the Orientation of the plot!") ); +#endif + } + wxMenuBar* menuBar = new wxMenuBar(); menuBar->Append( fileMenu, wxT("&File") ); + menuBar->Append( plotMenu, wxT("&Plot") ); SetMenuBar( menuBar ); SetTitle( wxT("wxWidgets PLplot App") ); @@ -220,6 +240,12 @@ m_dev->exit=true; wxGetApp().ExitMainLoop(); break; + case wxPL_Orientation_0: + case wxPL_Orientation_90: + case wxPL_Orientation_180: + case wxPL_Orientation_270: + m_window->SetOrientation( event.GetId()-wxPL_Orientation_0 ); + break; } size_t index=event.GetId()-wxPL_Save; @@ -653,4 +679,24 @@ } } + +/*---------------------------------------------------------------------- + * void wxPLplotWindow::SetOrientation( int rot ) + * + * Set the orientation of the plot. + *----------------------------------------------------------------------*/ +void wxPLplotWindow::SetOrientation( int rot ) +{ + PLINT bgr, bgg, bgb; /* red, green, blue */ + + //plsstrm( m_pls ); + plsdiori( rot ); + m_dev->resizing = true; + plgcolbg( &bgr, &bgg, &bgb); /* get background color information */ + m_dev->ClearBackground( bgr, bgg, bgb ); + plRemakePlot( m_pls ); + m_dev->resizing = false; + Refresh(); +} + #endif /* PLD_wxwidgets */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-12-02 08:47:16
|
Revision: 9028 http://plplot.svn.sourceforge.net/plplot/?rev=9028&view=rev Author: smekal Date: 2008-12-02 08:47:08 +0000 (Tue, 02 Dec 2008) Log Message: ----------- If a static plplot library with the wxWidgets driver was built, wxPLplotDemo didn't compile due to multiple definitions of wxGetAPP(). This function is defined in wxwidgets_app.cpp and was now renamed to wxPLGetApp(). Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_app.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-12-01 10:49:49 UTC (rev 9027) +++ trunk/drivers/wxwidgets.cpp 2008-12-02 08:47:08 UTC (rev 9028) @@ -47,7 +47,7 @@ extern "C" { void CPSEnableForegroundOperation(ProcessSerialNumber* psn); } #endif -DECLARE_APP( wxPLplotApp ) +DECLARE_PLAPP( wxPLplotApp ) /*--------------------------------------------------------------------------*\ * void Log_Verbose( const char *fmt, ... ) @@ -571,8 +571,8 @@ #endif if( dev->ownGUI ) { - wxGetApp().RemoveFrame( dev->m_frame ); - if( !wxGetApp().FrameCount() ) + wxPLGetApp().RemoveFrame( dev->m_frame ); + if( !wxPLGetApp().FrameCount() ) wxUninitialize(); } @@ -1049,14 +1049,14 @@ wxInitialize(); wxLog::GetActiveTarget(); wxTRY { - wxGetApp().CallOnInit(); + wxPLGetApp().CallOnInit(); } - wxCATCH_ALL( wxGetApp().OnUnhandledException(); fprintf(stderr, "Can't init wxWidgets!\n"); exit(0); ) + wxCATCH_ALL( wxPLGetApp().OnUnhandledException(); fprintf(stderr, "Can't init wxWidgets!\n"); exit(0); ) initApp=true; } dev->m_frame = new wxPLplotFrame( wxT("wxWidgets PLplot App"), pls ); - wxGetApp().AddFrame( dev->m_frame ); + wxPLGetApp().AddFrame( dev->m_frame ); dev->m_frame->SetClientSize( dev->width, dev->height ); dev->m_frame->Show( true ); dev->m_frame->Raise(); @@ -1097,25 +1097,25 @@ { public: /* only call OnExit if exit is true (i.e. due an exception) */ - ~CallOnExit() { if(exit) wxGetApp().OnExit(); } + ~CallOnExit() { if(exit) wxPLGetApp().OnExit(); } bool exit; } callOnExit; callOnExit.exit=true; - wxGetApp().SetAdvanceFlag( runonce ); - wxGetApp().SetRefreshFlag(); + wxPLGetApp().SetAdvanceFlag( runonce ); + wxPLGetApp().SetRefreshFlag(); /* add an idle event is necessary for Linux (wxGTK2) but not for Windows, but it doesn't harm */ wxIdleEvent event; - wxGetApp().AddPendingEvent( event ); - wxGetApp().OnRun(); /* start wxWidgets application */ + wxPLGetApp().AddPendingEvent( event ); + wxPLGetApp().OnRun(); /* start wxWidgets application */ callOnExit.exit=false; } - wxCATCH_ALL( wxGetApp().OnUnhandledException(); fprintf(stderr, "Problem running wxWidgets!\n"); exit(0); ) + wxCATCH_ALL( wxPLGetApp().OnUnhandledException(); fprintf(stderr, "Problem running wxWidgets!\n"); exit(0); ) if( dev->exit ) { - wxGetApp().OnExit(); + wxPLGetApp().OnExit(); plexit(""); } Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2008-12-01 10:49:49 UTC (rev 9027) +++ trunk/drivers/wxwidgets.h 2008-12-02 08:47:08 UTC (rev 9028) @@ -440,10 +440,10 @@ } \ wxAppInitializer \ wxAppInitializer((wxAppInitializerFunction) wxPLCreateApp); \ - DECLARE_APP(appname) \ - appname& wxGetApp() { return *wx_static_cast(appname*, wxApp::GetInstance()); } + DECLARE_PLAPP(appname) \ + appname& wxPLGetApp() { return *wx_static_cast(appname*, wxApp::GetInstance()); } -#define DECLARE_APP(appname) extern appname& wxGetApp(); +#define DECLARE_PLAPP(appname) extern appname& wxPLGetApp(); /* workaround against warnings for unused variables */ static inline void Use(void *) { } Modified: trunk/drivers/wxwidgets_app.cpp =================================================================== --- trunk/drivers/wxwidgets_app.cpp 2008-12-01 10:49:49 UTC (rev 9027) +++ trunk/drivers/wxwidgets_app.cpp 2008-12-02 08:47:08 UTC (rev 9028) @@ -20,7 +20,7 @@ */ /* TODO: - * - Locate mode is implemented, but user functions are not called + * - NA */ @@ -238,7 +238,7 @@ { case wxID_EXIT: m_dev->exit=true; - wxGetApp().ExitMainLoop(); + wxPLGetApp().ExitMainLoop(); break; case wxPL_Orientation_0: case wxPL_Orientation_90: @@ -275,7 +275,7 @@ // Log_Verbose( "wxPLplotFrame::OnClose" ); m_dev->exit=true; - wxGetApp().ExitMainLoop(); + wxPLGetApp().ExitMainLoop(); } @@ -432,7 +432,7 @@ /* End locate mode on <Escape> */ if( gin->keysym == PLK_Escape ) { if( m_dev->locate_mode == LOCATE_INVOKED_VIA_API ) - wxGetApp().SetAdvanceFlag(); + wxPLGetApp().SetAdvanceFlag(); m_dev->locate_mode = 0; m_dev->draw_xhair = false; DrawCrosshair(); @@ -447,7 +447,7 @@ int advance=0; (*m_pls->KeyEH)( gin, m_pls->KeyEH_data, &advance ); if( advance ) - wxGetApp().SetAdvanceFlag(); + wxPLGetApp().SetAdvanceFlag(); } switch( gin->keysym ) { @@ -459,12 +459,12 @@ case 'Q': case PLK_Escape: m_dev->exit=true; - wxGetApp().SetExitFlag(); + wxPLGetApp().SetExitFlag(); break; case PLK_Return: case WXK_SPACE: case WXK_RIGHT: - wxGetApp().SetAdvanceFlag(); + wxPLGetApp().SetAdvanceFlag(); break; default: break; @@ -587,13 +587,13 @@ int advance=0; (*m_pls->ButtonEH)( gin, m_pls->ButtonEH_data, &advance ); if( advance ) - wxGetApp().SetAdvanceFlag(); + wxPLGetApp().SetAdvanceFlag(); } /* Handle internal events */ switch( gin->button ) { case 3: // on right mouse button advance - wxGetApp().SetAdvanceFlag(); + wxPLGetApp().SetAdvanceFlag(); break; default: break; @@ -620,7 +620,7 @@ // was initiated by the API we need to return back to the // user program if( m_dev->locate_mode == LOCATE_INVOKED_VIA_API ) - wxGetApp().SetAdvanceFlag(); + wxPLGetApp().SetAdvanceFlag(); /* Call user locate mode handler if provided */ if( m_pls->LocateEH != NULL ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-12-02 20:50:02
|
Revision: 9031 http://plplot.svn.sourceforge.net/plplot/?rev=9031&view=rev Author: smekal Date: 2008-12-02 20:49:58 +0000 (Tue, 02 Dec 2008) Log Message: ----------- Since the wxWidgets library is able to save images in png, tiff, bmp and others the wxWidgets driver application now uses the wxwidgets driver itself to plot into a bitmap, which is then saved to either png, tiff, bmp, pnm, pcx or jpg. All these file types are available if support was compiled into the wxWidgets library (which is normally the case). The wxWidgets driver application doesn't need the gd driver anymore to save to png or jpeg files. Since the wxWidgets driver produces nicer plots than the gd driver, this makes actually sense. Apart from that via the wxWidgets driver GUI you can save now to the additional filetypes bmp, pnm, tiff and pcx. Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets_app.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-12-02 14:55:33 UTC (rev 9030) +++ trunk/drivers/wxwidgets.cpp 2008-12-02 20:49:58 UTC (rev 9031) @@ -781,7 +781,7 @@ int plD_errorexithandler_wxwidgets( const char *errormessage ) { if( errormessage[0] ) { - wxMessageDialog dialog( 0, wxString(errormessage, *wxConvCurrent),wxString("wxWidgets PLplot App error",*wxConvCurrent),wxOK ); + wxMessageDialog dialog( 0, wxString(errormessage, *wxConvCurrent),wxString("wxWidgets PLplot App error",*wxConvCurrent),wxOK|wxICON_ERROR ); dialog.ShowModal(); } @@ -798,7 +798,7 @@ void plD_erroraborthandler_wxwidgets( const char *errormessage ) { if( errormessage[0] ) { - wxMessageDialog dialog( 0,(wxString(errormessage, *wxConvCurrent)+wxString(" aborting operation...", *wxConvCurrent)), wxString("wxWidgets PLplot App abort",*wxConvCurrent), wxOK ); + wxMessageDialog dialog( 0,(wxString(errormessage, *wxConvCurrent)+wxString(" aborting operation...", *wxConvCurrent)), wxString("wxWidgets PLplot App abort",*wxConvCurrent), wxOK|wxICON_ERROR ); dialog.ShowModal(); } } Modified: trunk/drivers/wxwidgets_app.cpp =================================================================== --- trunk/drivers/wxwidgets_app.cpp 2008-12-02 14:55:33 UTC (rev 9030) +++ trunk/drivers/wxwidgets_app.cpp 2008-12-02 20:49:58 UTC (rev 9031) @@ -20,7 +20,7 @@ */ /* TODO: - * - NA + * - Add dialog to get width and height from user for plot size to save. */ @@ -68,11 +68,14 @@ }; struct dev_entry dev_entries[] = { - { wxT("gif"), wxT("gif..."), wxT("Save this plot as gif!"), wxT("gif files (*.gif)|*.gif") }, - { wxT("jpeg"), wxT("jpeg..."), wxT("Save this plot as jpeg!"), wxT("jpg files (*.jpg;*.jpeg)|*.jpg;*.jpeg") }, - { wxT("png"), wxT("png..."), wxT("Save this plot as png"), wxT("png files (*.png)|*.png") }, + { wxT("wxbmp"), wxT("bmp (wx)..."), wxT("Save this plot as bmp!"), wxT("bmp files (*.bmp)|*.bmp") }, + { wxT("wxpng"), wxT("png (wx)..."), wxT("Save this plot as png"), wxT("png files (*.png)|*.png") }, + { wxT("wxpcx"), wxT("pcx (wx)..."), wxT("Save this plot as pcx!"), wxT("pcx files (*.pcx)|*.pcx") }, + { wxT("wxjpeg"), wxT("jpeg (wx)..."), wxT("Save this plot as jpeg!"), wxT("jpg files (*.jpg;*.jpeg)|*.jpg;*.jpeg") }, + { wxT("wxtiff"), wxT("tiff (wx)..."), wxT("Save this plot as tiff!"), wxT("tiff files (*.tif;*.tiff)|*.tif;*.tiff") }, + { wxT("wxpnm"), wxT("pnm (wx)..."), wxT("Save this plot as pnm!"), wxT("pnm files (*.pnm)|*.pnm") }, { wxT("pngcairo"), wxT("png (cairo)..."), wxT("Save this plot as png using cairo!"), wxT("png files (*.png)|*.png") }, - { wxT("pdfcairo"), wxT("pdf..."), wxT("Save this plot as pdf using cairo!"), wxT("pdf files (*.pdf)|*.pdf") }, + { wxT("pdfcairo"), wxT("pdf (cairo)..."), wxT("Save this plot as pdf using cairo!"), wxT("pdf files (*.pdf)|*.pdf") }, { wxT("ps"), wxT("postscript..."), wxT("Save this plot as postscript!"), wxT("ps files (*.ps)|*.ps") }, { wxT("psc"), wxT("color postscript..."), wxT("Save this plot as color postscript!"), wxT("ps files (*.ps;*.psc)|*.ps;*.psc") }, { wxT("pscairo"), wxT("color postscript (cairo)..."), wxT("Save this plot as color postscript using cairo!"), wxT("ps files (*.ps;*.psc)|*.ps;*.psc") }, @@ -119,6 +122,22 @@ exit=false; advance=false; +#if wxUSE_LIBPNG + wxImage::AddHandler(new wxPNGHandler); +#endif +#if wxUSE_LIBJPEG + wxImage::AddHandler(new wxJPEGHandler); +#endif +#if wxUSE_PCX + wxImage::AddHandler(new wxPCXHandler); +#endif +#if wxUSE_LIBTIFF + wxImage::AddHandler(new wxTIFFHandler); +#endif +#if wxUSE_PNM + wxImage::AddHandler(new wxPNMHandler); +#endif + return true; } @@ -182,20 +201,34 @@ m_window->SetFocus(); wxMenu* saveMenu = new wxMenu; - for( size_t j=0; j<sizeof(dev_entries)/sizeof(dev_entry); j++ ) + saveMenu->Append( wxPL_Save, dev_entries[0].dev_menu_short, dev_entries[0].dev_menu_long ); +#if wxUSE_LIBPNG + saveMenu->Append( wxPL_Save+1, dev_entries[1].dev_menu_short, dev_entries[1].dev_menu_long ); +#endif +#if wxUSE_PCX + saveMenu->Append( wxPL_Save+2, dev_entries[2].dev_menu_short, dev_entries[2].dev_menu_long ); +#endif +#if wxUSE_LIBJPEG + saveMenu->Append( wxPL_Save+3, dev_entries[3].dev_menu_short, dev_entries[3].dev_menu_long ); +#endif +#if wxUSE_LIBTIFF + saveMenu->Append( wxPL_Save+4, dev_entries[4].dev_menu_short, dev_entries[4].dev_menu_long ); +#endif +#if wxUSE_PNM + saveMenu->Append( wxPL_Save+5, dev_entries[5].dev_menu_short, dev_entries[5].dev_menu_long ); +#endif + for( size_t j=6; j<sizeof(dev_entries)/sizeof(dev_entry); j++ ) for( int i=0; i<m_dev->ndev; i++ ) { if( !strcmp(m_dev->devName[i], dev_entries[j].dev_name.mb_str()) ) saveMenu->Append( wxPL_Save+j, dev_entries[j].dev_menu_short, dev_entries[j].dev_menu_long ); } wxMenu* fileMenu = new wxMenu; - if( m_dev->ndev ) { #if (wxMAJOR_VERSION<=2) & (wxMINOR_VERSION<=6) - fileMenu->Append( -1, wxT("Save plot as..."), saveMenu, wxT("Save this plot as ...!") ); + fileMenu->Append( -1, wxT("Save plot as..."), saveMenu, wxT("Save this plot as ...!") ); #else - fileMenu->AppendSubMenu( saveMenu, wxT("Save plot as..."), wxT("Save this plot as ...!") ); + fileMenu->AppendSubMenu( saveMenu, wxT("Save plot as..."), wxT("Save this plot as ...!") ); #endif - } fileMenu->Append( wxID_EXIT, wxT("E&xit\tAlt-X"), wxT("Exit wxWidgets PLplot App") ); wxMenu* orientationMenu = new wxMenu; @@ -290,38 +323,76 @@ bool wxPLplotFrame::SavePlot( const char* filename, const char* devname, int width, int height ) { int pls, pls_save; - FILE *sfile; - if( (sfile = fopen(filename, "wb+")) == NULL) { - if( m_dev->ownGUI ) { - wxMessageDialog dialog( 0, wxT("Couldn't open file for saving!"), wxT("plPlot error"), - wxOK|wxICON_ERROR ); - dialog.ShowModal(); - } - return false; - } + if( !strcmp(devname, "wxbmp") || !strcmp(devname, "wxpng") || !strcmp(devname, "wxpcx") || + !strcmp(devname, "wxjpeg") || !strcmp(devname, "wxtiff") || !strcmp(devname, "wxpnm") ) { + wxMemoryDC memDC; - plgstrm( &pls ); - plmkstrm( &pls_save ); - if( pls_save<0 ) { - if( m_dev->ownGUI ) { - wxMessageDialog dialog( 0, wxT("Couldn't open file for saving!"), wxT("plPlot error"), - wxOK|wxICON_ERROR ); - dialog.ShowModal(); - } - return false; - } - plsdev( devname ); - //plsfile( sfile ); - plsfnam(filename); /* file name */ - - //plspage( 0., 0., width, height, 0, 0 ); - plcpstrm( pls, 0); - pladv( 0 ); - plreplot(); - plend1(); - plsstrm( pls ); + wxBitmap bitmap( width, height, -1 ); + memDC.SelectObject( bitmap ); + plgstrm( &pls ); + plmkstrm( &pls_save ); + plsdev( "wxwidgets" ); + plspage( 0.0, 0.0, width, height, 0, 0 ); + + plsetopt( "-drvopt", "backend=0" ); + plinit(); + pl_cmd( PLESC_DEVINIT, (void*)&memDC ); + + plcpstrm( pls, 0 ); + pladv( 0 ); + plreplot(); + plend1(); + plsstrm( pls ); + + wxBitmapType type; + if( !strcmp( devname, "wxbmp" ) ) + type=wxBITMAP_TYPE_BMP; +#if wxUSE_LIBPNG + else if( !strcmp( devname, "wxpng" ) ) + type=wxBITMAP_TYPE_PNG; +#endif +#if wxUSE_PCX + else if( !strcmp( devname, "wxpcx" ) ) + type=wxBITMAP_TYPE_PCX; +#endif +#if wxUSE_LIBJPEG + else if( !strcmp( devname, "wxjpeg" ) ) + type=wxBITMAP_TYPE_JPEG; +#endif +#if wxUSE_LIBTIFF + else if( !strcmp( devname, "wxtiff" ) ) + type=wxBITMAP_TYPE_TIF; +#endif +#if wxUSE_PNM + else if( !strcmp( devname, "wxpnm" ) ) + type=wxBITMAP_TYPE_PNM; +#endif + bool status=bitmap.SaveFile( wxString(filename, *wxConvCurrent), type ); + + if( !status ) { + char buf[512]; + snprintf( buf, 512, "File %s couldn't be saved", filename ); + plabort( buf ); + return false; + } + } else { + + plgstrm( &pls ); + plmkstrm( &pls_save ); + + plsdev( devname ); + //plspage( 0., 0., width, height, 0, 0 ); + plsfnam( filename ); + + plcpstrm( pls, 0 ); + pladv( 0 ); + plreplot(); + plend1(); + plsstrm( pls ); + } + return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-12-09 08:57:33
|
Revision: 9060 http://plplot.svn.sourceforge.net/plplot/?rev=9060&view=rev Author: smekal Date: 2008-12-09 08:57:24 +0000 (Tue, 09 Dec 2008) Log Message: ----------- The size of the image is now asked in a dialog when selecting image file types from the "Save Plot..." menu (tested on Linux wx 2.6 and 2.8). Modified Paths: -------------- trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_app.cpp Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2008-12-08 20:58:53 UTC (rev 9059) +++ trunk/drivers/wxwidgets.h 2008-12-09 08:57:24 UTC (rev 9060) @@ -22,6 +22,9 @@ #ifndef __WXWIDGETS_H__ #define __WXWIDGETS_H__ +/* some special wxWidgets headers */ +#include <wx/spinctrl.h> + /* freetype headers and macros */ #ifdef HAVE_FREETYPE #include "plfreetype.h" @@ -343,6 +346,7 @@ wxString dev_menu_short; wxString dev_menu_long; wxString dev_file_app; + bool pixelDevice; }; @@ -405,8 +409,8 @@ DECLARE_EVENT_TABLE() }; -/* definition of the actual window/frame shown */ +/* declaration of the actual window/frame shown */ class wxPLplotFrame : public wxFrame { public: @@ -429,6 +433,30 @@ enum { wxPL_Save=10000, wxPL_Next=10100, wxPL_Locate, wxPL_Orientation_0, wxPL_Orientation_90, wxPL_Orientation_180, wxPL_Orientation_270 }; + +/* Pixel size dialog */ +class wxGetSizeDialog: public wxDialog +{ +public: + // constructors and destructors + wxGetSizeDialog( wxWindow *parent, wxWindowID id, const wxString &title, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDEFAULT_DIALOG_STYLE, + int width=800, int height=600 ); + + int getWidth() { return spinControlWidth->GetValue(); } + int getHeight() { return spinControlHeight->GetValue(); } + +private: + wxSpinCtrl* spinControlWidth; + wxSpinCtrl* spinControlHeight; + +private: + DECLARE_EVENT_TABLE() +}; + + /* Use this macro if you want to define your own main() or WinMain() function and call wxEntry() from there. */ #define IMPLEMENT_PLAPP_NO_MAIN(appname) \ Modified: trunk/drivers/wxwidgets_app.cpp =================================================================== --- trunk/drivers/wxwidgets_app.cpp 2008-12-08 20:58:53 UTC (rev 9059) +++ trunk/drivers/wxwidgets_app.cpp 2008-12-09 08:57:24 UTC (rev 9060) @@ -68,20 +68,20 @@ }; struct dev_entry dev_entries[] = { - { wxT("wxbmp"), wxT("bmp (wx)..."), wxT("Save this plot as bmp!"), wxT("bmp files (*.bmp)|*.bmp") }, - { wxT("wxpng"), wxT("png (wx)..."), wxT("Save this plot as png"), wxT("png files (*.png)|*.png") }, - { wxT("wxpcx"), wxT("pcx (wx)..."), wxT("Save this plot as pcx!"), wxT("pcx files (*.pcx)|*.pcx") }, - { wxT("wxjpeg"), wxT("jpeg (wx)..."), wxT("Save this plot as jpeg!"), wxT("jpg files (*.jpg;*.jpeg)|*.jpg;*.jpeg") }, - { wxT("wxtiff"), wxT("tiff (wx)..."), wxT("Save this plot as tiff!"), wxT("tiff files (*.tif;*.tiff)|*.tif;*.tiff") }, - { wxT("wxpnm"), wxT("pnm (wx)..."), wxT("Save this plot as pnm!"), wxT("pnm files (*.pnm)|*.pnm") }, - { wxT("pngcairo"), wxT("png (cairo)..."), wxT("Save this plot as png using cairo!"), wxT("png files (*.png)|*.png") }, - { wxT("pdfcairo"), wxT("pdf (cairo)..."), wxT("Save this plot as pdf using cairo!"), wxT("pdf files (*.pdf)|*.pdf") }, - { wxT("ps"), wxT("postscript..."), wxT("Save this plot as postscript!"), wxT("ps files (*.ps)|*.ps") }, - { wxT("psc"), wxT("color postscript..."), wxT("Save this plot as color postscript!"), wxT("ps files (*.ps;*.psc)|*.ps;*.psc") }, - { wxT("pscairo"), wxT("color postscript (cairo)..."), wxT("Save this plot as color postscript using cairo!"), wxT("ps files (*.ps;*.psc)|*.ps;*.psc") }, - { wxT("svg"), wxT("svg..."), wxT("Save this plot as svg!"), wxT("svg files (*.svg)|*.svg") }, - { wxT("svgcairo"), wxT("svg (cairo)..."), wxT("Save this plot as svg using cairo!"), wxT("svg files (*.svg)|*.svg") }, - { wxT("xfig"), wxT("xfig..."), wxT("Save this plot as xfig!"), wxT("fig files (*.fig)|*.fig") } + { wxT("wxbmp"), wxT("bmp (wx)..."), wxT("Save this plot as bmp!"), wxT("bmp files (*.bmp)|*.bmp"), true }, + { wxT("wxpng"), wxT("png (wx)..."), wxT("Save this plot as png"), wxT("png files (*.png)|*.png"), true }, + { wxT("wxpcx"), wxT("pcx (wx)..."), wxT("Save this plot as pcx!"), wxT("pcx files (*.pcx)|*.pcx"), true }, + { wxT("wxjpeg"), wxT("jpeg (wx)..."), wxT("Save this plot as jpeg!"), wxT("jpg files (*.jpg;*.jpeg)|*.jpg;*.jpeg"), true }, + { wxT("wxtiff"), wxT("tiff (wx)..."), wxT("Save this plot as tiff!"), wxT("tiff files (*.tif;*.tiff)|*.tif;*.tiff"), true }, + { wxT("wxpnm"), wxT("pnm (wx)..."), wxT("Save this plot as pnm!"), wxT("pnm files (*.pnm)|*.pnm"), true }, + { wxT("pngcairo"), wxT("png (cairo)..."), wxT("Save this plot as png using cairo!"), wxT("png files (*.png)|*.png"), true }, + { wxT("pdfcairo"), wxT("pdf (cairo)..."), wxT("Save this plot as pdf using cairo!"), wxT("pdf files (*.pdf)|*.pdf"), false }, + { wxT("ps"), wxT("postscript..."), wxT("Save this plot as postscript!"), wxT("ps files (*.ps)|*.ps"), false }, + { wxT("psc"), wxT("color postscript..."), wxT("Save this plot as color postscript!"), wxT("ps files (*.ps;*.psc)|*.ps;*.psc"), false }, + { wxT("pscairo"), wxT("color postscript (cairo)..."), wxT("Save this plot as color postscript using cairo!"), wxT("ps files (*.ps;*.psc)|*.ps;*.psc"), false }, + { wxT("svg"), wxT("svg..."), wxT("Save this plot as svg!"), wxT("svg files (*.svg)|*.svg"), false }, + { wxT("svgcairo"), wxT("svg (cairo)..."), wxT("Save this plot as svg using cairo!"), wxT("svg files (*.svg)|*.svg"), false }, + { wxT("xfig"), wxT("xfig..."), wxT("Save this plot as xfig!"), wxT("fig files (*.fig)|*.fig"), false } }; @@ -98,7 +98,7 @@ EVT_CLOSE( wxPLplotFrame::OnClose ) END_EVENT_TABLE() -/* event table the widget */ +/* event table for the plot widget */ BEGIN_EVENT_TABLE( wxPLplotWindow, wxWindow ) EVT_PAINT( wxPLplotWindow::OnPaint ) /* (re)draw the plot in window */ EVT_CHAR( wxPLplotWindow::OnChar ) @@ -109,6 +109,9 @@ EVT_MAXIMIZE( wxPLplotWindow::OnMaximize ) END_EVENT_TABLE() +/* event table for the size dialog */ +BEGIN_EVENT_TABLE(wxGetSizeDialog,wxDialog) +END_EVENT_TABLE() /*----------------------------------------------------------------------*\ * bool wxPLplotApp::OnInit() @@ -294,17 +297,35 @@ size_t index=event.GetId()-wxPL_Save; if( (index>=0) && (index<sizeof(dev_entries)/sizeof(dev_entry)) ) { - wxFileDialog dialog( this, wxT("Save plot as ")+dev_entries[index].dev_name, wxT(""), wxT(""), - dev_entries[index].dev_file_app+wxT("|All Files (*.*)|*.*"), + int width=800; + int height=600; + bool proceed=false; + + /* ask for geometry in pixels only for image devices */ + if( dev_entries[index].pixelDevice ) { + wxGetSizeDialog sizeDialog( this, -1, wxT("Size of plot"), wxDefaultPosition, wxDefaultSize, + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER, width, height ); + if( sizeDialog.ShowModal() == wxID_OK ) { + width=sizeDialog.getWidth(); + height=sizeDialog.getHeight(); + proceed=true; + } + } else + proceed=true; + + if( proceed ) { + wxFileDialog dialog( this, wxT("Save plot as ")+dev_entries[index].dev_name, wxT(""), wxT(""), + dev_entries[index].dev_file_app+wxT("|All Files (*.*)|*.*"), #if (wxMAJOR_VERSION<=2) & (wxMINOR_VERSION<=6) - wxSAVE | wxOVERWRITE_PROMPT ); + wxSAVE | wxOVERWRITE_PROMPT ); #else - wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); #endif - if (dialog.ShowModal() == wxID_OK) { - const wxCharBuffer buf1=dialog.GetPath().mb_str(); - const wxCharBuffer buf2=dev_entries[index].dev_name.mb_str(); - SavePlot( (const char*)buf1, (const char*)buf2, 800, 600 ); + if (dialog.ShowModal() == wxID_OK) { + const wxCharBuffer buf1=dialog.GetPath().mb_str(); + const wxCharBuffer buf2=dev_entries[index].dev_name.mb_str(); + SavePlot( (const char*)buf1, (const char*)buf2, width, height ); + } } } } @@ -804,4 +825,46 @@ Refresh(); } +/*---------------------------------------------------------------------- + * wxGetSizeDialog::wxGetSizeDialog( wxWindow *parent, ... ) + * + * Constructor of GetSizeDialog. + *----------------------------------------------------------------------*/ +wxGetSizeDialog::wxGetSizeDialog( wxWindow *parent, wxWindowID id, const wxString &title, + const wxPoint &position, const wxSize& size, long style, int width, int height ) : + wxDialog( parent, id, title, position, size, style ) +{ + wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer *staticSizer = new wxStaticBoxSizer( new wxStaticBox(this, -1, wxT("Size of plot")), wxVERTICAL ); + + wxFlexGridSizer *flexSizer = new wxFlexGridSizer( 2, 0, 0 ); + flexSizer->AddGrowableCol( 1 ); + + wxStaticText *textWidth = new wxStaticText( this, -1, wxT("Width [pixels]:"), wxDefaultPosition, wxDefaultSize, 0 ); + flexSizer->Add( textWidth, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + spinControlWidth = new wxSpinCtrl( this, -1, wxString::Format(wxT("%d"), width), wxDefaultPosition, wxSize(100,-1), wxSP_ARROW_KEYS, 10, 4096, width ); + flexSizer->Add( spinControlWidth, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + wxStaticText *textHeight = new wxStaticText( this, -1, wxT("Height [pixels]:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); + flexSizer->Add( textHeight, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + spinControlHeight = new wxSpinCtrl( this, -1, wxString::Format(wxT("%d"), height), wxDefaultPosition, wxSize(100,-1), wxSP_ARROW_KEYS, 10, 4096, height ); + flexSizer->Add( spinControlHeight, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + staticSizer->Add( flexSizer, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + sizer->Add( staticSizer, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + + wxBoxSizer *buttonSizer = new wxBoxSizer( wxHORIZONTAL ); + wxButton *buttonOK = new wxButton( this, wxID_OK, wxT("OK"), wxDefaultPosition, wxDefaultSize, 0 ); + buttonSizer->Add( buttonOK, 0, wxALIGN_CENTER|wxALL|wxEXPAND, 5 ); + buttonSizer->Add( 20, 20, 1, wxALIGN_CENTER|wxALL, 5 ); + wxButton *buttonCancel = new wxButton( this, wxID_CANCEL, wxT("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); + buttonSizer->Add( buttonCancel, 0, wxALIGN_CENTER|wxALL|wxEXPAND, 5 ); + + sizer->Add( buttonSizer, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 15 ); + + this->SetSizer( sizer ); + sizer->SetSizeHints( this ); +} + #endif /* PLD_wxwidgets */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-12-10 08:25:15
|
Revision: 9072 http://plplot.svn.sourceforge.net/plplot/?rev=9072&view=rev Author: smekal Date: 2008-12-10 08:25:05 +0000 (Wed, 10 Dec 2008) Log Message: ----------- These changes fixes bugs regarding the AGG backend. wxPLplotDemo works also with the AGG backend now. A problem which occured if the clear function was called by the plbuffer implementation was also fixed. Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets_agg.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-12-10 08:23:08 UTC (rev 9071) +++ trunk/drivers/wxwidgets.cpp 2008-12-10 08:25:05 UTC (rev 9072) @@ -680,11 +680,11 @@ case PLESC_CLEAR: { /* Since the plot is updated only every MAX_COMCOUNT commands (usually 5000) before we clear the screen we need to show the plot at least once :) */ - if( dev->ownGUI ) { + if( !(dev->resizing) && dev->ownGUI ) { wxRunApp( pls, true ); dev->comcount=0; } - dev->ClearBackground( pls->cmap0[0].r, pls->cmap0[0].g, pls->cmap0[0].b, + dev->ClearBackground( pls->cmap0[0].r, pls->cmap0[0].g, pls->cmap0[0].b, pls->sppxmi, pls->sppymi, pls->sppxma, pls->sppyma ); } break; Modified: trunk/drivers/wxwidgets_agg.cpp =================================================================== --- trunk/drivers/wxwidgets_agg.cpp 2008-12-10 08:23:08 UTC (rev 9071) +++ trunk/drivers/wxwidgets_agg.cpp 2008-12-10 08:25:05 UTC (rev 9072) @@ -415,12 +415,9 @@ * Adds a dc to the device. In that case, the drivers doesn't provide * a GUI. A new buffer (image) will be created and set up. *--------------------------------------------------------------------------*/ -void wxPLDevAGG::SetExternalBuffer( void* dc ) +void wxPLDevAGG::SetExternalBuffer( void* image ) { - mDC=(wxDC*)dc; /* Add the dc to the device */ - if( mBuffer ) - delete mBuffer; - mBuffer = new wxImage( width, height ); + mBuffer = (wxImage*)image; /* Add the image to the device */ mRenderingBuffer.attach( mBuffer->GetData(), width, height, width*3 ); mRendererBase.reset_clipping( true ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-12-10 10:08:14
|
Revision: 9074 http://plplot.svn.sourceforge.net/plplot/?rev=9074&view=rev Author: andrewross Date: 2008-12-10 10:08:05 +0000 (Wed, 10 Dec 2008) Log Message: ----------- Rearrange variable definitions in recent patch to fix compilation error on MS Visual Studio. Modified Paths: -------------- trunk/drivers/ps.c trunk/drivers/psttf.cc Modified: trunk/drivers/ps.c =================================================================== --- trunk/drivers/ps.c 2008-12-10 08:28:28 UTC (rev 9073) +++ trunk/drivers/ps.c 2008-12-10 10:08:05 UTC (rev 9074) @@ -156,6 +156,8 @@ { PSDev *dev; + PLFLT pxlx, pxly; + /* Set default values - 7.5 x 10 [inches] (72 points = 1 inch) */ if (pls->xlength <= 0 || pls->ylength <=0) { pls->xlength = 540; @@ -164,8 +166,8 @@ if (pls->xdpi <= 0) pls->xdpi = 72.; if (pls->ydpi <= 0) pls->ydpi = 72.; - PLFLT pxlx = YPSSIZE/LPAGE_X; - PLFLT pxly = XPSSIZE/LPAGE_Y; + pxlx = YPSSIZE/LPAGE_X; + pxly = XPSSIZE/LPAGE_Y; if (text) { Modified: trunk/drivers/psttf.cc =================================================================== --- trunk/drivers/psttf.cc 2008-12-10 08:28:28 UTC (rev 9073) +++ trunk/drivers/psttf.cc 2008-12-10 10:08:05 UTC (rev 9074) @@ -194,6 +194,7 @@ char *a; PSDev *dev; PostscriptDocument *doc; + PLFLT pxlx, pxly; /* Set default values - 7.5 x 10 [inches] (72 points = 1 inch) */ if (pls->xlength <= 0 || pls->ylength <=0) { @@ -204,8 +205,8 @@ if (pls->ydpi <= 0) pls->ydpi = 72.; - PLFLT pxlx = YPSSIZE/LPAGE_X; - PLFLT pxly = XPSSIZE/LPAGE_Y; + pxlx = YPSSIZE/LPAGE_X; + pxly = XPSSIZE/LPAGE_Y; if (text) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2008-12-18 08:39:02
|
Revision: 9183 http://plplot.svn.sourceforge.net/plplot/?rev=9183&view=rev Author: smekal Date: 2008-12-18 08:38:53 +0000 (Thu, 18 Dec 2008) Log Message: ----------- Add the wxpng device. Some work on comments and documentation. Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_agg.cpp trunk/drivers/wxwidgets_app.cpp trunk/drivers/wxwidgets_dc.cpp trunk/drivers/wxwidgets_gc.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2008-12-18 08:29:48 UTC (rev 9182) +++ trunk/drivers/wxwidgets.cpp 2008-12-18 08:38:53 UTC (rev 9183) @@ -27,8 +27,6 @@ #include "plDevs.h" -#ifdef PLD_wxwidgets - /* plplot headers */ #include "plplotP.h" #include "drivers.h" @@ -37,8 +35,9 @@ #include <cstdio> /* wxwidgets headers */ -#include "wx/wx.h" -#include "wx/except.h" +#include <wx/wx.h> +#include <wx/wfstream.h> +#include <wx/except.h> #include "wxwidgets.h" @@ -49,11 +48,11 @@ DECLARE_PLAPP( wxPLplotApp ) -/*--------------------------------------------------------------------------*\ +/*-------------------------------------------------------------------------- * void Log_Verbose( const char *fmt, ... ) * * Print verbose debug message to stderr (printf style). -\*--------------------------------------------------------------------------*/ + *--------------------------------------------------------------------------*/ void Log_Verbose( const char *fmt, ... ) { #ifdef _DEBUG_VERBOSE @@ -68,11 +67,11 @@ } -/*--------------------------------------------------------------------------*\ +/*-------------------------------------------------------------------------- * void Log_Debug( const char *fmt, ... ) * * Print debug message to stderr (printf style). -\*--------------------------------------------------------------------------*/ + *--------------------------------------------------------------------------*/ void Log_Debug( const char *fmt, ... ) { #ifdef _DEBUG @@ -87,44 +86,35 @@ } -/*----------------------------------------------------------------------*\ +/*---------------------------------------------------------------------- * In the following you'll find the driver functions which are * are needed by the plplot core. -\*----------------------------------------------------------------------*/ + *----------------------------------------------------------------------*/ /* Device info */ #ifdef __cplusplus extern "C" { #endif -PLDLLIMPEXP_DRIVER const char* plD_DEVICE_INFO_wxwidgets = "wxwidgets:wxWidgets DC:1:wxwidgets:51:wxwidgets"; + +PLDLLIMPEXP_DRIVER const char* plD_DEVICE_INFO_wxwidgets = +#ifdef PLD_wxwidgets + "wxwidgets:wxWidgets Driver:1:wxwidgets:51:wxwidgets\n" +#endif +#ifdef PLD_wxpng + "wxpng:wxWidgets PNG Driver:0:wxwidgets:52:wxpng\n" +#endif +; + #ifdef __cplusplus } #endif -/*--------------------------------------------------------------------------*\ - * void plD_dispatch_init_wxwidgets( PLDispatchTable *pdt ) + +/*-------------------------------------------------------------------------- + * wxPLDevBase::wxPLDevBase( void ) * - * Make driver functions known to plplot. -\*--------------------------------------------------------------------------*/ -void plD_dispatch_init_wxwidgets( PLDispatchTable *pdt ) -{ -#ifndef ENABLE_DYNDRIVERS - pdt->pl_MenuStr = "wxWidgets DC"; - pdt->pl_DevName = "wxwidgets"; -#endif - pdt->pl_type = plDevType_Interactive; - pdt->pl_seq = 51; - pdt->pl_init = (plD_init_fp) plD_init_wxwidgets; - pdt->pl_line = (plD_line_fp) plD_line_wxwidgets; - pdt->pl_polyline = (plD_polyline_fp) plD_polyline_wxwidgets; - pdt->pl_eop = (plD_eop_fp) plD_eop_wxwidgets; - pdt->pl_bop = (plD_bop_fp) plD_bop_wxwidgets; - pdt->pl_tidy = (plD_tidy_fp) plD_tidy_wxwidgets; - pdt->pl_state = (plD_state_fp) plD_state_wxwidgets; - pdt->pl_esc = (plD_esc_fp) plD_esc_wxwidgets; -} - - + * Contructor of base class of wxPLDev classes. + *--------------------------------------------------------------------------*/ wxPLDevBase::wxPLDevBase( void ) { // Log_Verbose( "wxPLDevBase::wxPLDevBase()" ); @@ -287,22 +277,21 @@ } -/*--------------------------------------------------------------------------*\ - * plD_init_wxwidgets() +/*-------------------------------------------------------------------------- + * void common_init( PLStream *pls ) * - * Initialize device. -\*--------------------------------------------------------------------------*/ -void -plD_init_wxwidgets( PLStream *pls ) + * Basic initialization for all devices. + *--------------------------------------------------------------------------*/ +wxPLDevBase* common_init( PLStream *pls ) { - // Log_Verbose( "plD_init_wxwidgets()" ); - + // Log_Verbose( "common_init()" ); + wxPLDevBase* dev; /* default options */ static PLINT freetype=0; static PLINT smooth_text=1; - static PLINT backend=0; + static PLINT backend=wxBACKEND_DC; static PLINT text=1; static PLINT hrshsym = 0; @@ -323,13 +312,13 @@ switch( backend ) { #if wxUSE_GRAPHICS_CONTEXT - case 2: + case wxBACKEND_GC: dev = new wxPLDevGC; freetype = 0; /* this backend is vector oriented and doesn't now pixels */ break; #endif #ifdef HAVE_AGG - case 1: + case wxBACKEND_AGG: dev = new wxPLDevAGG; text = 0; /* text processing doesn't work yet for the AGG backend */ break; @@ -353,15 +342,12 @@ pls->debug = 0; #endif - pls->color = 1; /* Is a color device */ + pls->color = 1; /* Is a color device */ pls->dev_fill0 = 1; /* Can handle solid fills */ pls->dev_fill1 = 0; /* Can't handle pattern fills */ pls->dev_dash = 0; - pls->plbuf_write = 1; /* use the plot buffer! */ - pls->termin = 1; /* interactive device */ - pls->graphx = GRAPHICS_MODE; /* No text mode for this driver (at least for now, might add a console window if I ever figure it out and have the inclination) */ - pls->dev_clear = 1; /* driver supports clear */ - + pls->dev_clear = 1; /* driver supports clear */ + if( text ) { pls->dev_text = 1; /* want to draw text */ pls->dev_unicode = 1; /* want unicode */ @@ -396,15 +382,13 @@ dev->height=pls->ylength; dev->clipminx=pls->xlength; dev->clipminy=pls->ylength; - + /* If portrait mode, apply a rotation and set freeaspect */ if( pls->portrait ) { plsdiori( (PLFLT)(4 - ORIENTATION) ); pls->freeaspect = 1; } - // Log_Verbose( "settings" ); - /* Set the number of pixels per mm */ plP_setpxl( (PLFLT)VIRTUAL_PIXELS_PER_MM, (PLFLT)VIRTUAL_PIXELS_PER_MM ); @@ -426,18 +410,122 @@ if( dev->freetype ) init_freetype_lv2( pls ); #endif - + /* find out what file drivers are available */ plgFileDevs( &dev->devDesc, &dev->devName, &dev->ndev ); + + return dev; } -/*--------------------------------------------------------------------------*\ +#ifdef PLD_wxwidgets + +/*-------------------------------------------------------------------------- + * void plD_dispatch_init_wxwidgets( PLDispatchTable *pdt ) + * + * Make wxwidgets driver functions known to plplot. + *--------------------------------------------------------------------------*/ +void plD_dispatch_init_wxwidgets( PLDispatchTable *pdt ) +{ +#ifndef ENABLE_DYNDRIVERS + pdt->pl_MenuStr = "wxWidgets DC"; + pdt->pl_DevName = "wxwidgets"; +#endif + pdt->pl_type = plDevType_Interactive; + pdt->pl_seq = 51; + pdt->pl_init = (plD_init_fp) plD_init_wxwidgets; + pdt->pl_line = (plD_line_fp) plD_line_wxwidgets; + pdt->pl_polyline = (plD_polyline_fp) plD_polyline_wxwidgets; + pdt->pl_eop = (plD_eop_fp) plD_eop_wxwidgets; + pdt->pl_bop = (plD_bop_fp) plD_bop_wxwidgets; + pdt->pl_tidy = (plD_tidy_fp) plD_tidy_wxwidgets; + pdt->pl_state = (plD_state_fp) plD_state_wxwidgets; + pdt->pl_esc = (plD_esc_fp) plD_esc_wxwidgets; +} + +/*-------------------------------------------------------------------------- + * plD_init_wxwidgets( PLStream* pls ) + * + * Initialize wxWidgets device. + *--------------------------------------------------------------------------*/ +void plD_init_wxwidgets( PLStream* pls ) +{ + // Log_Verbose( "plD_init_wxwidgets()" ); + + wxPLDevBase* dev; + dev = common_init( pls ); + + pls->plbuf_write = 1; /* use the plot buffer! */ + pls->termin = 1; /* interactive device */ + pls->graphx = GRAPHICS_MODE; /* No text mode for this driver (at least for now, might add a console window if I ever figure it out and have the inclination) */ + + dev->showGUI = true; + dev->bitmapType = (wxBitmapType)0; +} + +#endif /* PLD_wxwidgets */ + + +#ifdef PLD_wxpng + +/*-------------------------------------------------------------------------- + * void plD_dispatch_init_wxpng( PLDispatchTable *pdt ) + * + * Make wxpng driver functions known to plplot. + *--------------------------------------------------------------------------*/ +void plD_dispatch_init_wxpng( PLDispatchTable *pdt ) +{ +#ifndef ENABLE_DYNDRIVERS + pdt->pl_MenuStr = "wxWidgets PNG driver"; + pdt->pl_DevName = "wxpng"; +#endif + pdt->pl_type = plDevType_FileOriented; + pdt->pl_seq = 52; + pdt->pl_init = (plD_init_fp) plD_init_wxpng; + pdt->pl_line = (plD_line_fp) plD_line_wxwidgets; + pdt->pl_polyline = (plD_polyline_fp) plD_polyline_wxwidgets; + pdt->pl_eop = (plD_eop_fp) plD_eop_wxwidgets; + pdt->pl_bop = (plD_bop_fp) plD_bop_wxwidgets; + pdt->pl_tidy = (plD_tidy_fp) plD_tidy_wxwidgets; + pdt->pl_state = (plD_state_fp) plD_state_wxwidgets; + pdt->pl_esc = (plD_esc_fp) plD_esc_wxwidgets; +} + +/*-------------------------------------------------------------------------- + * void plD_init_wxpng( PLStream *pls ) + * + * Initialize wxpng device. + *--------------------------------------------------------------------------*/ +void plD_init_wxpng( PLStream *pls ) +{ + // Log_Verbose( "plD_init_wxwidgets()" ); + + wxPLDevBase* dev; + dev = common_init( pls ); + + /* Initialize family file info */ + plFamInit( pls ); + + /* Prompt for a file name if not already set. */ + plOpenFile( pls ); + + pls->plbuf_write = 1; /* use the plot buffer! */ + pls->termin = 0; /* interactive device */ + pls->graphx = GRAPHICS_MODE; /* No text mode for this driver (at least for now, might add a console window if I ever figure it out and have the inclination) */ + + dev->showGUI = false; + dev->bitmapType = wxBITMAP_TYPE_PNG; +} + +#endif /* PLD_wxpng */ + + +/*-------------------------------------------------------------------------- * void plD_line_wxwidgets( PLStream *pls, short x1a, short y1a, * short x2a, short y2a ) * * Draws a line from (x1a, y1a) to (x2a, y2a). -\*--------------------------------------------------------------------------*/ + *--------------------------------------------------------------------------*/ void plD_line_wxwidgets( PLStream *pls, short x1a, short y1a, short x2a, short y2a ) { // Log_Verbose( "plD_line_wxwidgets(x1a=%d, y1a=%d, x2a=%d, y2a=%d)", x1a, y1a, x2a, y2a ); @@ -459,12 +547,12 @@ } -/*--------------------------------------------------------------------------*\ +/*-------------------------------------------------------------------------- * void plD_polyline_wxwidgets( PLStream *pls, short *xa, short *ya, * PLINT npts ) * * Draw a poly line - points are in xa and ya arrays. -\*--------------------------------------------------------------------------*/ + *--------------------------------------------------------------------------*/ void plD_polyline_wxwidgets( PLStream *pls, short *xa, short *ya, PLINT npts ) { // Log_Verbose( "plD_polyline_wxwidgets()" ); @@ -487,29 +575,42 @@ } -/*--------------------------------------------------------------------------*\ +/*-------------------------------------------------------------------------- * void plD_eop_wxwidgets( PLStream *pls ) * * End of Page. This function is called if a "end of page" is send by the * user. This command is ignored if we have the plot embedded in a * wxWidgets application, otherwise the application created by the device * takes over. -\*--------------------------------------------------------------------------*/ + *--------------------------------------------------------------------------*/ void plD_eop_wxwidgets( PLStream *pls ) { // Log_Verbose( "plD_eop_wxwidgets()" ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; + if( dev->bitmapType ) { + wxMemoryDC memDC; + wxBitmap bitmap( dev->width, dev->height, -1 ); + memDC.SelectObject( bitmap ); + + dev->BlitRectangle( &memDC, 0, 0, dev->width, dev->height ); + wxImage buffer=bitmap.ConvertToImage(); + wxFFileOutputStream fstream( pls->OutFile ); + if(!(buffer.SaveFile( fstream, dev->bitmapType ))) + puts("Troubles saving file!"); + memDC.SelectObject( wxNullBitmap ); + } + if( dev->ownGUI ) - if ( pls->nopause ) + if ( pls->nopause || !dev->showGUI ) wxRunApp( pls, true ); else wxRunApp( pls ); } -/*--------------------------------------------------------------------------*\ +/*-------------------------------------------------------------------------- * void plD_bop_wxwidgets( PLStream *pls ) * * Begin of page. Before any plot command, this function is called, If we @@ -517,7 +618,7 @@ * state calls are resent - this is because at the first call of this * function, a dc does most likely not exist, but state calls are recorded * and when a new dc is created this function is called again. -\*--------------------------------------------------------------------------*/ + *--------------------------------------------------------------------------*/ void plD_bop_wxwidgets( PLStream *pls ) { // Log_Verbose( "plD_bop_wxwidgets()" ); @@ -551,11 +652,11 @@ } -/*--------------------------------------------------------------------------*\ +/*-------------------------------------------------------------------------- * void plD_tidy_wxwidgets( PLStream *pls ) * * This function is called, if all plots are done. -\*--------------------------------------------------------------------------*/ + *--------------------------------------------------------------------------*/ void plD_tidy_wxwidgets( PLStream *pls ) { // Log_Verbose( "plD_tidy_wxwidgets()" ); @@ -760,7 +861,6 @@ dev->CreateCanvas(); dev->ClearBackground( bgr, bgg, bgb ); } - /* freetype parameters must also be changed */ #ifdef HAVE_FREETYPE @@ -1060,15 +1160,18 @@ dev->m_frame = new wxPLplotFrame( wxT("wxWidgets PLplot App"), pls ); wxPLGetApp().AddFrame( dev->m_frame ); dev->m_frame->SetClientSize( dev->width, dev->height ); - dev->m_frame->Show( true ); - dev->m_frame->Raise(); + if( dev->showGUI ) { + dev->m_frame->Show( true ); + dev->m_frame->Raise(); + } + else + dev->m_frame->Show( false ); /* get a DC and a bitmap or an imagebuffer */ dev->ownGUI = true; - dev->bm_width=1024; - dev->bm_height=800; + dev->bm_width=dev->width; + dev->bm_height=dev->height; dev->CreateCanvas(); - dev->ready = true; /* Set wx error handler for various errors in plplot*/ @@ -1123,12 +1226,3 @@ dev->waiting=false; } - -#else - -int pldummy_wxwidgets() -{ - return 0; -} - -#endif /* PLD_wxwidgets */ Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2008-12-18 08:29:48 UTC (rev 9182) +++ trunk/drivers/wxwidgets.h 2008-12-18 08:38:53 UTC (rev 9183) @@ -78,6 +78,11 @@ #define LOCATE_INVOKED_VIA_API 1 #define LOCATE_INVOKED_VIA_DRIVER 2 +/* Available backends */ +#define wxBACKEND_DC 0 +#define wxBACKEND_AGG 1 +#define wxBACKEND_GC 2 + class wxPLplotFrame; /* base device class */ @@ -92,7 +97,7 @@ virtual void DrawPolyline( short *xa, short *ya, PLINT npts )=0; virtual void ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, PLINT x1=-1, PLINT y1=-1, PLINT x2=-1, PLINT y2=-1 )=0; virtual void FillPolygon( PLStream *pls )=0; - virtual void BlitRectangle( wxPaintDC* dc, int vX, int vY, int vW, int vH )=0; + virtual void BlitRectangle( wxDC* dc, int vX, int vY, int vW, int vH )=0; void AddtoClipRegion( int x1, int y1, int x2, int y2 ); virtual void CreateCanvas()=0; virtual void SetWidth( PLStream *pls )=0; @@ -112,10 +117,11 @@ public: /* variables */ bool ready; bool ownGUI; + bool showGUI; bool waiting; bool resizing; bool exit; - + int backend; int comcount; wxPLplotFrame* m_frame; @@ -152,6 +158,7 @@ const char** devDesc; /* Descriptive names for file-oriented devices. Malloc'ed. */ const char** devName; /* Keyword names of file-oriented devices. Malloc'ed. */ int ndev; + wxBitmapType bitmapType; /* font variables */ static const int max_string_length=500; @@ -178,7 +185,7 @@ void DrawPolyline( short *xa, short *ya, PLINT npts ); void ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, PLINT x1=-1, PLINT y1=-1, PLINT x2=-1, PLINT y2=-1 ); void FillPolygon( PLStream *pls ); - void BlitRectangle( wxPaintDC* dc, int vX, int vY, int vW, int vH ); + void BlitRectangle( wxDC* dc, int vX, int vY, int vW, int vH ); void CreateCanvas(); void SetWidth( PLStream *pls ); void SetColor0( PLStream *pls ); @@ -241,7 +248,7 @@ void DrawPolyline( short *xa, short *ya, PLINT npts ); void ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, PLINT x1=-1, PLINT y1=-1, PLINT x2=-1, PLINT y2=-1 ); void FillPolygon( PLStream *pls ); - void BlitRectangle( wxPaintDC* dc, int vX, int vY, int vW, int vH ); + void BlitRectangle( wxDC* dc, int vX, int vY, int vW, int vH ); void CreateCanvas(); void SetWidth( PLStream *pls ); void SetColor0( PLStream *pls ); @@ -307,7 +314,7 @@ void DrawPolyline( short *xa, short *ya, PLINT npts ); void ClearBackground( PLINT bgr, PLINT bgg, PLINT bgb, PLINT x1=-1, PLINT y1=-1, PLINT x2=-1, PLINT y2=-1 ); void FillPolygon( PLStream *pls ); - void BlitRectangle( wxPaintDC* dc, int vX, int vY, int vW, int vH ); + void BlitRectangle( wxDC* dc, int vX, int vY, int vW, int vH ); void CreateCanvas(); void SetWidth( PLStream *pls ); void SetColor0( PLStream *pls ); @@ -482,11 +489,13 @@ static void wxRunApp( PLStream *pls, bool runonce=false ); static void GetCursorCmd( PLStream *pls, PLGraphicsIn *ptr ); + /*----------------------------------------------------------------------*\ * Declarations for the device. \*----------------------------------------------------------------------*/ void plD_init_wxwidgets (PLStream *); +void plD_init_wxpng (PLStream *); void plD_line_wxwidgets (PLStream *, short, short, short, short); void plD_polyline_wxwidgets (PLStream *, short *, short *, PLINT); void plD_eop_wxwidgets (PLStream *); Modified: trunk/drivers/wxwidgets_agg.cpp =================================================================== --- trunk/drivers/wxwidgets_agg.cpp 2008-12-18 08:29:48 UTC (rev 9182) +++ trunk/drivers/wxwidgets_agg.cpp 2008-12-18 08:38:53 UTC (rev 9183) @@ -26,16 +26,14 @@ #include "plDevs.h" -#ifdef PLD_wxwidgets - /* plplot headers */ #include "plplotP.h" #include "plfci-truetype.h" /* wxwidgets headers */ -#include "wx/wx.h" +#include <wx/wx.h> #include <wx/strconv.h> - + /* std and driver headers */ #include "wxwidgets.h" #include <wchar.h> @@ -95,11 +93,13 @@ mColorGreenFill( 0 ), mColorBlueFill( 0 ) { + backend=wxBACKEND_AGG; + mCurves.approximation_scale( 2.0 ); mContour.auto_detect_orientation( false ); mConvStroke.line_join( agg::round_join ); mConvStroke.line_cap( agg::round_cap ); - + /* determine font directory */ #if defined(WIN32) /*static char *default_font_names[]={"arial.ttf","times.ttf","timesi.ttf","arial.ttf", @@ -328,12 +328,12 @@ /*-------------------------------------------------------------------------- - * void wxPLDevAGG::BlitRectangle( wxPaintDC* dc, int vX, int vY, + * void wxPLDevAGG::BlitRectangle( wxDC* dc, int vX, int vY, * int vW, int vH ) * * Copy/Blit a rectangle ((vX,vY) to (vX+vW,vY+vH)) into given dc. *--------------------------------------------------------------------------*/ -void wxPLDevAGG::BlitRectangle( wxPaintDC* dc, int vX, int vY, int vW, int vH ) +void wxPLDevAGG::BlitRectangle( wxDC* dc, int vX, int vY, int vW, int vH ) { if( mBuffer ) { wxMemoryDC MemoryDC; @@ -587,5 +587,3 @@ AddtoClipRegion( 0, 0, width, height ); } - -#endif /* PLD_wxwidgets */ Modified: trunk/drivers/wxwidgets_app.cpp =================================================================== --- trunk/drivers/wxwidgets_app.cpp 2008-12-18 08:29:48 UTC (rev 9182) +++ trunk/drivers/wxwidgets_app.cpp 2008-12-18 08:38:53 UTC (rev 9183) @@ -84,7 +84,7 @@ { wxT("xfig"), wxT("xfig..."), wxT("Save this plot as xfig!"), wxT("fig files (*.fig)|*.fig"), false } }; - +/* Application implementation */ IMPLEMENT_PLAPP_NO_MAIN( wxPLplotApp ) /* event table for the app */ Modified: trunk/drivers/wxwidgets_dc.cpp =================================================================== --- trunk/drivers/wxwidgets_dc.cpp 2008-12-18 08:29:48 UTC (rev 9182) +++ trunk/drivers/wxwidgets_dc.cpp 2008-12-18 08:38:53 UTC (rev 9183) @@ -28,13 +28,11 @@ #include "plDevs.h" -#ifdef PLD_wxwidgets - /* plplot headers */ #include "plplotP.h" /* wxwidgets headers */ -#include "wx/wx.h" +#include <wx/wx.h> /* std and driver headers */ #include <cmath> @@ -49,6 +47,7 @@ *--------------------------------------------------------------------------*/ wxPLDevDC::wxPLDevDC( void ) : wxPLDevBase() { + backend=wxBACKEND_DC; m_dc=NULL; m_bitmap=NULL; m_font=NULL; @@ -166,12 +165,12 @@ /*-------------------------------------------------------------------------- - * void wxPLDevDC::BlitRectangle( wxPaintDC* dc, int vX, int vY, + * void wxPLDevDC::BlitRectangle( wxDC* dc, int vX, int vY, * int vW, int vH ) * * Copy/Blit a rectangle ((vX,vY) to (vX+vW,vY+vH)) into given dc. *--------------------------------------------------------------------------*/ -void wxPLDevDC::BlitRectangle( wxPaintDC* dc, int vX, int vY, int vW, int vH ) +void wxPLDevDC::BlitRectangle( wxDC* dc, int vX, int vY, int vW, int vH ) { if( m_dc ) dc->Blit( vX, vY, vW, vH, m_dc, vX, vY ); @@ -400,6 +399,4 @@ AddtoClipRegion( 0, 0, width, height ); } -#endif /* PLD_wxwidgets */ - Modified: trunk/drivers/wxwidgets_gc.cpp =================================================================== --- trunk/drivers/wxwidgets_gc.cpp 2008-12-18 08:29:48 UTC (rev 9182) +++ trunk/drivers/wxwidgets_gc.cpp 2008-12-18 08:38:53 UTC (rev 9183) @@ -27,13 +27,11 @@ #include "plDevs.h" -#ifdef PLD_wxwidgets - /* plplot headers */ #include "plplotP.h" /* wxwidgets headers */ -#include "wx/wx.h" +#include <wx/wx.h> /* std and driver headers */ #include "wxwidgets.h" @@ -46,11 +44,12 @@ { // Log_Verbose( "%s", __FUNCTION__ ); + backend=wxBACKEND_GC; m_dc=NULL; m_bitmap=NULL; m_context=NULL; m_font=NULL; - underlined=false; + underlined=false; } @@ -149,7 +148,7 @@ } -void wxPLDevGC::BlitRectangle( wxPaintDC* dc, int vX, int vY, int vW, int vH ) +void wxPLDevGC::BlitRectangle( wxDC* dc, int vX, int vY, int vW, int vH ) { // Log_Verbose( "%s", __FUNCTION__ ); @@ -373,7 +372,3 @@ } #endif - -#endif /* PLD_wxwidgets */ - - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2009-01-16 08:56:13
|
Revision: 9320 http://plplot.svn.sourceforge.net/plplot/?rev=9320&view=rev Author: smekal Date: 2009-01-16 08:56:02 +0000 (Fri, 16 Jan 2009) Log Message: ----------- By default wxGraphicsContext (backend 2) will be used if available, then AGG library (backend 1) if available, then basic backend (which is always available). The title of the plot frame also tells the user which backend is used (basic, AGG, wxGC). Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets_app.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2009-01-15 23:23:20 UTC (rev 9319) +++ trunk/drivers/wxwidgets.cpp 2009-01-16 08:56:02 UTC (rev 9320) @@ -291,10 +291,22 @@ /* default options */ static PLINT freetype=0; static PLINT smooth_text=1; - static PLINT backend=wxBACKEND_DC; static PLINT text=1; static PLINT hrshsym = 0; + /* default backend uses wxGraphicsContext, if not available + the agg library will be used, if not available the basic + backend will be used. */ + static PLINT backend=wxBACKEND_DC; + #if wxUSE_GRAPHICS_CONTEXT + backend=wxBACKEND_GC; + #else + #ifdef HAVE_AGG + backend=wxBACKEND_AGG; + #endif + #endif + + DrvOpt wx_options[] = { #ifdef HAVE_FREETYPE {"freetype", DRV_INT, &freetype, "Use FreeType library"}, @@ -311,14 +323,18 @@ /* allocate memory for the device storage */ switch( backend ) { + case wxBACKEND_GC: + /* in case wxGraphicsContext isn't available, the next backend (agg + if available) in this list will be used */ #if wxUSE_GRAPHICS_CONTEXT - case wxBACKEND_GC: dev = new wxPLDevGC; - freetype = 0; /* this backend is vector oriented and doesn't now pixels */ + freetype = 0; /* this backend is vector oriented and doesn't know pixels */ break; #endif + case wxBACKEND_AGG: + /* in case the agg library isn't available, the standard backend + will be used */ #ifdef HAVE_AGG - case wxBACKEND_AGG: dev = new wxPLDevAGG; text = 0; /* text processing doesn't work yet for the AGG backend */ break; @@ -332,7 +348,7 @@ exit( 0 ); } pls->dev = (void*)dev; - + /* be verbose and write out debug messages */ #ifdef _DEBUG pls->verbose = 1; @@ -1157,7 +1173,22 @@ initApp=true; } - dev->m_frame = new wxPLplotFrame( wxT("wxWidgets PLplot App"), pls ); + + wxString title=wxT("wxWidgets PLplot App"); + switch(dev->backend) { + case wxBACKEND_DC: + title += wxT(" (basic)"); + break; + case wxBACKEND_GC: + title += wxT(" (wxGC)"); + break; + case wxBACKEND_AGG: + title += wxT(" (AGG)"); + break; + default: + break; + } + dev->m_frame = new wxPLplotFrame( title, pls ); wxPLGetApp().AddFrame( dev->m_frame ); dev->m_frame->SetClientSize( dev->width, dev->height ); if( dev->showGUI ) { Modified: trunk/drivers/wxwidgets_app.cpp =================================================================== --- trunk/drivers/wxwidgets_app.cpp 2009-01-15 23:23:20 UTC (rev 9319) +++ trunk/drivers/wxwidgets_app.cpp 2009-01-16 08:56:02 UTC (rev 9320) @@ -256,7 +256,6 @@ menuBar->Append( plotMenu, wxT("&Plot") ); SetMenuBar( menuBar ); - SetTitle( wxT("wxWidgets PLplot App") ); SetIcon( wxIcon(graph) ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2009-02-08 21:15:46
|
Revision: 9474 http://plplot.svn.sourceforge.net/plplot/?rev=9474&view=rev Author: andrewross Date: 2009-02-08 21:15:41 +0000 (Sun, 08 Feb 2009) Log Message: ----------- Replace use of sprintf, strcat and strcpy with snprintf, strncat, strncpy to prevent the possibility of user-supplied data leading to buffer overflows. Modified Paths: -------------- trunk/drivers/cairo.c trunk/drivers/gcw.c trunk/drivers/get-drv-info.c trunk/drivers/gnome.c trunk/drivers/plmeta.c trunk/drivers/ps.c trunk/drivers/psttf.cc trunk/drivers/tk.c trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets_agg.cpp trunk/drivers/xwin.c Modified: trunk/drivers/cairo.c =================================================================== --- trunk/drivers/cairo.c 2009-02-08 20:44:22 UTC (rev 9473) +++ trunk/drivers/cairo.c 2009-02-08 21:15:41 UTC (rev 9474) @@ -495,17 +495,17 @@ switch(ucs4[i]) { case 38: - strcat(pangoMarkupString, "&"); + strncat(pangoMarkupString, "&", MAX_MARKUP_LEN); break; case 60: - strcat(pangoMarkupString, "<"); + strncat(pangoMarkupString, "<", MAX_MARKUP_LEN); break; case 62: - strcat(pangoMarkupString, ">"); + strncat(pangoMarkupString, ">", MAX_MARKUP_LEN); break; default: ucs4_to_utf8(ucs4[i],utf8); - strcat(pangoMarkupString, utf8); + strncat(pangoMarkupString, utf8, MAX_MARKUP_LEN); break; } i++; @@ -514,24 +514,24 @@ i++; if (ucs4[i] == (PLUNICODE)plplotEsc){ /* a escape character to display */ ucs4_to_utf8(ucs4[i],utf8); - strcat(pangoMarkupString, utf8); + strncat(pangoMarkupString, utf8, MAX_MARKUP_LEN); i++; continue; } else { if(ucs4[i] == (PLUNICODE)'u'){ /* Superscript */ if(upDown < 0){ - strcat(pangoMarkupString, "</sub>"); + strncat(pangoMarkupString, "</sub>", MAX_MARKUP_LEN); } else { - strcat(pangoMarkupString, "<sup>"); + strncat(pangoMarkupString, "<sup>", MAX_MARKUP_LEN); } upDown++; } if(ucs4[i] == (PLUNICODE)'d'){ /* Subscript */ if(upDown > 0){ - strcat(pangoMarkupString, "</sup>"); + strncat(pangoMarkupString, "</sup>", MAX_MARKUP_LEN); } else { - strcat(pangoMarkupString, "<sub>"); + strncat(pangoMarkupString, "<sub>", MAX_MARKUP_LEN); } upDown--; } @@ -573,25 +573,25 @@ plP_fci2hex(fci, &fontFamily, PL_FCI_FAMILY); plP_fci2hex(fci, &fontStyle, PL_FCI_STYLE); plP_fci2hex(fci, &fontWeight, PL_FCI_WEIGHT); - sprintf(openTag, "<span font_desc=\"%s %.2f\" ", familyLookup[fontFamily], fontSize); - strcat(pangoMarkupString, openTag); + snprintf(openTag, 200, "<span font_desc=\"%s %.2f\" ", familyLookup[fontFamily], fontSize); + strncat(pangoMarkupString, openTag, MAX_MARKUP_LEN); - sprintf(openTag, "style=\"%s\" ", styleLookup[fontStyle]); - strcat(pangoMarkupString, openTag); + snprintf(openTag, 200, "style=\"%s\" ", styleLookup[fontStyle]); + strncat(pangoMarkupString, openTag, MAX_MARKUP_LEN); - sprintf(openTag, "weight=\"%s\">", weightLookup[fontWeight]); - strcat(pangoMarkupString, openTag); + snprintf(openTag, 200, "weight=\"%s\">", weightLookup[fontWeight]); + strncat(pangoMarkupString, openTag, MAX_MARKUP_LEN); /* Move to the right sub/super-script level */ if(upDown > 0){ while(upDown > 0){ - strcat(pangoMarkupString, "<sup>"); + strncat(pangoMarkupString, "<sup>", MAX_MARKUP_LEN); upDown--; } } if(upDown < 0){ while(upDown < 0){ - strcat(pangoMarkupString, "<sub>"); + strncat(pangoMarkupString, "<sub>", MAX_MARKUP_LEN); upDown++; } } @@ -607,18 +607,18 @@ { if(upDown > 0){ while(upDown > 0){ - strcat(pangoMarkupString, "</sup>"); + strncat(pangoMarkupString, "</sup>", MAX_MARKUP_LEN); upDown--; } } if(upDown < 0){ while(upDown < 0){ - strcat(pangoMarkupString, "</sub>"); + strncat(pangoMarkupString, "</sub>", MAX_MARKUP_LEN); upDown++; } } - strcat(pangoMarkupString, "</span>"); + strncat(pangoMarkupString, "</span>", MAX_MARKUP_LEN); } /*--------------------------------------------------------------------- @@ -686,10 +686,10 @@ This was copied from the psttf driver. */ for(i=0;i<NPANGOLOOKUP;i++){ if((a = getenv(envFamilyLookup[i])) != NULL){ - strcpy(familyLookup[i],a); + strncpy(familyLookup[i],a,1024); } else { - strcpy(familyLookup[i],defaultFamilyLookup[i]); + strncpy(familyLookup[i],defaultFamilyLookup[i],1024); } } Modified: trunk/drivers/gcw.c =================================================================== --- trunk/drivers/gcw.c 2009-02-08 20:44:22 UTC (rev 9473) +++ trunk/drivers/gcw.c 2009-02-08 21:15:41 UTC (rev 9474) @@ -726,7 +726,7 @@ else if(op==PLSTATE_CMAP0) strcpy(opname,"PLSTATE_CMAP0"); else if(op==PLSTATE_CMAP1) strcpy(opname,"PLSTATE_CMAP1"); else strcpy(opname,"unknown"); - sprintf(msg,"<plD_state_gcw />: %s\n",opname); + snprintf(msg,100,"<plD_state_gcw />: %s\n",opname); gcw_debug(msg); #endif @@ -1186,7 +1186,7 @@ else if(op==PLESC_HAS_TEXT) strcpy(opname,"PLESC_HAS_TEXT"); else if(op==PLESC_GRAPH) strcpy(opname,"PLESC_GRAPH"); else strcpy(opname,"unknown"); - sprintf(msg,"<plD_esc_gcw />: %s\n",opname); + snprintf(msg,100,"<plD_esc_gcw />: %s\n",opname); gcw_debug(msg); #endif Modified: trunk/drivers/get-drv-info.c =================================================================== --- trunk/drivers/get-drv-info.c 2009-02-08 20:44:22 UTC (rev 9473) +++ trunk/drivers/get-drv-info.c 2009-02-08 21:15:41 UTC (rev 9474) @@ -53,9 +53,9 @@ lt_dlinit (); #ifdef LTDL_WIN32 - sprintf( drvspec, "%s", drvnam ); + snprintf( drvspec, 400, "%s", drvnam ); #else - sprintf( drvspec, "%s/%s", plGetDrvDir (), drvnam ); + snprintf( drvspec, 400, "%s/%s", plGetDrvDir (), drvnam ); #endif /* LTDL_WIN32 */ dlhand = lt_dlopenext (drvspec); if (dlhand == NULL) { @@ -63,7 +63,7 @@ "libltdl error: %s\n", drvspec, lt_dlerror ()); return 1; } - sprintf (sym, "plD_DEVICE_INFO_%s", drvnam); + snprintf (sym, 300, "plD_DEVICE_INFO_%s", drvnam); info = (char **) lt_dlsym (dlhand, sym); if (info != NULL) { printf ("%s", *info); Modified: trunk/drivers/gnome.c =================================================================== --- trunk/drivers/gnome.c 2009-02-08 20:44:22 UTC (rev 9473) +++ trunk/drivers/gnome.c 2009-02-08 21:15:41 UTC (rev 9474) @@ -342,13 +342,13 @@ plTranslateCursor (gin); if (color == NULL) - sprintf (buffer, ""); + buffer[0] = '\0'; else if (color->cmap == 0) - sprintf (buffer, " x = %f y = %f color = %d (cmap0)", + snprintf (buffer, 128, " x = %f y = %f color = %d (cmap0)", gin->wX, gin->wY, (int) color->color); else - sprintf (buffer, " x = %f y = %f color = %f (cmap1)", + snprintf (buffer, 128, " x = %f y = %f color = %f (cmap1)", gin->wX, gin->wY, color->color); /*// FIXME : Terrible global variable hack*/ @@ -700,7 +700,7 @@ gtk_notebook_set_show_tabs (dev->notebook, (np > 0)); - sprintf (buffer, "Page %d", np+1); + snprintf (buffer, 32, "Page %d", np+1); gtk_notebook_append_page (dev->notebook, GTK_WIDGET (page->sw), gtk_label_new (buffer)); Modified: trunk/drivers/plmeta.c =================================================================== --- trunk/drivers/plmeta.c 2009-02-08 20:44:22 UTC (rev 9473) +++ trunk/drivers/plmeta.c 2009-02-08 21:15:41 UTC (rev 9474) @@ -410,7 +410,7 @@ /* The forward byte offset is located exactly 7 bytes after the BOP */ fwbyte_offset = dev->lp_offset + 7; if (pl_fsetpos(file, &fwbyte_offset)) { - sprintf(buffer, "UpdatePrevPagehdr (plmeta.c): fsetpos to fwbyte_offset (%d) failed", + snprintf(buffer, 256, "UpdatePrevPagehdr (plmeta.c): fsetpos to fwbyte_offset (%d) failed", (int) fwbyte_offset); plexit(buffer); } @@ -435,7 +435,7 @@ #ifdef DEBUG if (pl_fsetpos(file, &fwbyte_offset)) { - sprintf(buffer, "UpdatePrevPagehdr (plmeta.c): fsetpos to fwbyte_offset (%d) failed", + snprintf(buffer, 256, "UpdatePrevPagehdr (plmeta.c): fsetpos to fwbyte_offset (%d) failed", (int) fwbyte_offset); plexit(buffer); } @@ -450,7 +450,7 @@ /* Return to current page offset */ if (pl_fsetpos(file, &cp_offset)) { - sprintf(buffer, "UpdatePrevPagehdr (plmeta.c): fsetpos to cp_offset (%d) failed", + snprintf(buffer, 256, "UpdatePrevPagehdr (plmeta.c): fsetpos to cp_offset (%d) failed", (int) cp_offset); plexit(buffer); } @@ -478,7 +478,7 @@ (int) cp_offset, (int) dev->lp_offset); if (pl_fsetpos(file, &dev->index_offset)) { - sprintf(buffer, "UpdateIndex (plmeta.c): fsetpos to index_offset (%d) failed", + snprintf(buffer, 256, "UpdateIndex (plmeta.c): fsetpos to index_offset (%d) failed", (int) dev->index_offset); plexit(buffer); } @@ -490,7 +490,7 @@ (int) dev->lp_offset, (int) cp_offset); if (pl_fsetpos(file, &cp_offset)) { - sprintf(buffer, "UpdateIndex (plmeta.c): fsetpos to cp_offset (%d) failed", + snprintf(buffer, 256, "UpdateIndex (plmeta.c): fsetpos to cp_offset (%d) failed", (int) cp_offset); plexit(buffer); } Modified: trunk/drivers/ps.c =================================================================== --- trunk/drivers/ps.c 2009-02-08 20:44:22 UTC (rev 9473) +++ trunk/drivers/ps.c 2009-02-08 21:15:41 UTC (rev 9474) @@ -408,7 +408,7 @@ else putc(' ', OF); - sprintf(outbuf, "%d %d D", x2, y2); + snprintf(outbuf, 128, "%d %d D", x2, y2); dev->ptcnt++; pls->linepos += 12; } @@ -417,9 +417,9 @@ pls->linepos = 0; if (x1 == x2 && y1 == y2) /* must be a single dot, draw a circle */ - sprintf(outbuf, "%d %d A", x1, y1); + snprintf(outbuf, 128, "%d %d A", x1, y1); else - sprintf(outbuf, "%d %d M %d %d D", x1, y1, x2, y2); + snprintf(outbuf, 128, "%d %d M %d %d D", x1, y1, x2, y2); dev->llx = MIN(dev->llx, x1); dev->lly = MIN(dev->lly, y1); dev->urx = MAX(dev->urx, x1); @@ -657,7 +657,7 @@ /* First time through start with a x y moveto */ if (n == 0) { - sprintf(outbuf, "N %d %d M", x, y); + snprintf(outbuf, 128, "N %d %d M", x, y); dev->llx = MIN(dev->llx, x); dev->lly = MIN(dev->lly, y); dev->urx = MAX(dev->urx, x); @@ -676,7 +676,7 @@ pls->bytecnt++; - sprintf(outbuf, "%d %d D", x, y); + snprintf(outbuf, 128, "%d %d D", x, y); dev->llx = MIN(dev->llx, x); dev->lly = MIN(dev->lly, y); dev->urx = MAX(dev->urx, x); Modified: trunk/drivers/psttf.cc =================================================================== --- trunk/drivers/psttf.cc 2009-02-08 20:44:22 UTC (rev 9473) +++ trunk/drivers/psttf.cc 2009-02-08 21:15:41 UTC (rev 9474) @@ -283,10 +283,10 @@ // or defaults. for (i=0;i<N_Pango_Lookup;i++) { if ( (a = getenv(EnvFamilyLookup[i])) != NULL ) { - strcpy(FamilyLookup[i],a); + strncpy(FamilyLookup[i],a,1024); } else { - strcpy(FamilyLookup[i],DefaultFamilyLookup[i]); + strncpy(FamilyLookup[i],DefaultFamilyLookup[i],1024); } } @@ -471,7 +471,7 @@ else doc->osBody() << ' '; - sprintf(outbuf, "%d %d D", x2, y2); + snprintf(outbuf, 128, "%d %d D", x2, y2); dev->ptcnt++; pls->linepos += 12; } @@ -480,9 +480,9 @@ pls->linepos = 0; if (x1 == x2 && y1 == y2) /* must be a single dot, draw a circle */ - sprintf(outbuf, "%d %d A", x1, y1); + snprintf(outbuf, 128, "%d %d A", x1, y1); else - sprintf(outbuf, "%d %d M %d %d D", x1, y1, x2, y2); + snprintf(outbuf, 128, "%d %d M %d %d D", x1, y1, x2, y2); dev->llx = MIN(dev->llx, x1); dev->lly = MIN(dev->lly, y1); dev->urx = MAX(dev->urx, x1); @@ -734,7 +734,7 @@ /* First time through start with a x y moveto */ if (n == 0) { - sprintf(outbuf, "N %d %d M", x, y); + snprintf(outbuf, 128, "N %d %d M", x, y); dev->llx = MIN(dev->llx, x); dev->lly = MIN(dev->lly, y); dev->urx = MAX(dev->urx, x); @@ -753,7 +753,7 @@ pls->bytecnt++; - sprintf(outbuf, "%d %d D", x, y); + snprintf(outbuf, 128, "%d %d D", x, y); dev->llx = MIN(dev->llx, x); dev->lly = MIN(dev->lly, y); dev->urx = MAX(dev->urx, x); Modified: trunk/drivers/tk.c =================================================================== --- trunk/drivers/tk.c 2009-02-08 20:44:22 UTC (rev 9473) +++ trunk/drivers/tk.c 2009-02-08 21:15:41 UTC (rev 9474) @@ -659,7 +659,7 @@ /* Change orientation */ if (pls->difilt & PLDI_ORI) { - sprintf(str, "%f", pls->diorot); + snprintf(str, 10, "%f", pls->diorot); Tcl_SetVar(dev->interp, "rot", str, 0); server_cmd( pls, "$plwidget cmd plsetopt -ori $rot", 1 ); @@ -669,13 +669,13 @@ /* Change window into plot space */ if (pls->difilt & PLDI_PLT) { - sprintf(str, "%f", pls->dipxmin); + snprintf(str, 10, "%f", pls->dipxmin); Tcl_SetVar(dev->interp, "xl", str, 0); - sprintf(str, "%f", pls->dipymin); + snprintf(str, 10, "%f", pls->dipymin); Tcl_SetVar(dev->interp, "yl", str, 0); - sprintf(str, "%f", pls->dipxmax); + snprintf(str, 10, "%f", pls->dipxmax); Tcl_SetVar(dev->interp, "xr", str, 0); - sprintf(str, "%f", pls->dipymax); + snprintf(str, 10, "%f", pls->dipymax); Tcl_SetVar(dev->interp, "yr", str, 0); server_cmd( pls, "$plwidget cmd plsetopt -wplt $xl,$yl,$xr,$yr", 1 ); @@ -685,13 +685,13 @@ /* Change window into device space */ if (pls->difilt & PLDI_DEV) { - sprintf(str, "%f", pls->mar); + snprintf(str, 10, "%f", pls->mar); Tcl_SetVar(dev->interp, "mar", str, 0); - sprintf(str, "%f", pls->aspect); + snprintf(str, 10, "%f", pls->aspect); Tcl_SetVar(dev->interp, "aspect", str, 0); - sprintf(str, "%f", pls->jx); + snprintf(str, 10, "%f", pls->jx); Tcl_SetVar(dev->interp, "jx", str, 0); - sprintf(str, "%f", pls->jy); + snprintf(str, 10, "%f", pls->jy); Tcl_SetVar(dev->interp, "jy", str, 0); server_cmd( pls, "$plwidget cmd plsetopt -mar $mar", 1 ); @@ -1346,7 +1346,7 @@ bg = pls->cmap0[0].b | (pls->cmap0[0].g << 8) | (pls->cmap0[0].r << 16); if (bg > 0) { - sprintf(command, "$plwidget configure -plbg #%06x", bg); + snprintf(command, 100, "$plwidget configure -plbg #%06x", bg); server_cmd( pls, command, 0 ); } @@ -1368,12 +1368,12 @@ /* color map options */ if (pls->ncol0) { - sprintf(command, "$plwidget cmd plsetopt -ncol0 %d", pls->ncol0); + snprintf(command, 100, "$plwidget cmd plsetopt -ncol0 %d", pls->ncol0); server_cmd( pls, command, 0 ); } if (pls->ncol1) { - sprintf(command, "$plwidget cmd plsetopt -ncol1 %d", pls->ncol1); + snprintf(command, 100, "$plwidget cmd plsetopt -ncol1 %d", pls->ncol1); server_cmd( pls, command, 0 ); } @@ -1393,7 +1393,7 @@ set_windowname(PLStream *pls) { const char *pname; - int i; + int i, maxlen; /* Set to "plclient" if not initialized via plargs or otherwise */ @@ -1409,14 +1409,15 @@ pname = pls->program; if (pls->plwindow == NULL) { /* dont override -plwindow cmd line option */ - pls->plwindow = (char *) malloc(10+(strlen(pname)) * sizeof(char)); + maxlen = strlen(pname) + 10; + pls->plwindow = (char *) malloc(maxlen * sizeof(char)); /* Allow for multiple widgets created by multiple streams */ if (pls->ipls == 0) - sprintf(pls->plwindow, ".%s", pname); + snprintf(pls->plwindow, maxlen, ".%s", pname); else - sprintf(pls->plwindow, ".%s_%d", pname, (int) pls->ipls); + snprintf(pls->plwindow, maxlen, ".%s_%d", pname, (int) pls->ipls); /* Replace any ' 's with '_'s to avoid quoting problems. */ /* Replace any '.'s (except leading) with '_'s to avoid bad window names. */ Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2009-02-08 20:44:22 UTC (rev 9473) +++ trunk/drivers/wxwidgets.cpp 2009-02-08 21:15:41 UTC (rev 9474) @@ -212,14 +212,14 @@ if( ucs4[i] < PL_FCI_MARK ) { /* not a font change */ if( ucs4[i] != (PLUNICODE)plplotEsc ) { /* a character to display */ ucs4_to_utf8( ucs4[i], utf8 ); - strcat( utf8_string, utf8 ); + strncat( utf8_string, utf8, max_string_length ); i++; continue; } i++; if( ucs4[i] == (PLUNICODE)plplotEsc ) { /* a escape character to display */ ucs4_to_utf8( ucs4[i], utf8 ); - strcat( utf8_string, utf8 ); + strncat( utf8_string, utf8, max_string_length ); i++; continue; } else { Modified: trunk/drivers/wxwidgets_agg.cpp =================================================================== --- trunk/drivers/wxwidgets_agg.cpp 2009-02-08 20:44:22 UTC (rev 9473) +++ trunk/drivers/wxwidgets_agg.cpp 2009-02-08 21:15:41 UTC (rev 9474) @@ -107,7 +107,7 @@ char WINDIR_PATH[255]; char *b; b=getenv("WINDIR"); - strcpy(WINDIR_PATH,b);*/ + strncpy(WINDIR_PATH,b,255);*/ /* * Work out if we have Win95+ or Win3.?... sort of. @@ -129,7 +129,7 @@ } else { - strcat(WINDIR_PATH,"\\fonts\\arial.ttf"); + strncat(WINDIR_PATH,"\\fonts\\arial.ttf",255); if (access(WINDIR_PATH, F_OK)==0) { b=strrchr(WINDIR_PATH,'\\'); Modified: trunk/drivers/xwin.c =================================================================== --- trunk/drivers/xwin.c 2009-02-08 20:44:22 UTC (rev 9473) +++ trunk/drivers/xwin.c 2009-02-08 21:15:41 UTC (rev 9474) @@ -1129,13 +1129,13 @@ /* Window title */ if (pls->plwindow){ /* allow -plwindow to specify wm decoration name */ - sprintf(header, "%s", pls->plwindow); + strncpy(header, pls->plwindow, 1024); } else if(pls->program) { - sprintf(header, "%s", pls->program); /* else program name */ + strncpy(header, pls->program, 1024); /* else program name */ } else - sprintf(header,"%s","Plplot"); + strncpy(header,"Plplot",1024); /* Window creation */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2009-02-19 23:17:14
|
Revision: 9559 http://plplot.svn.sourceforge.net/plplot/?rev=9559&view=rev Author: smekal Date: 2009-02-19 22:48:09 +0000 (Thu, 19 Feb 2009) Log Message: ----------- Applied a patch by Vadim Zeitlin: the header "wx/graphics.h" is now included at the right place and warnings for gcc 4.1 are removed. Modified Paths: -------------- trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_gc.cpp Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2009-02-19 22:45:45 UTC (rev 9558) +++ trunk/drivers/wxwidgets.h 2009-02-19 22:48:09 UTC (rev 9559) @@ -304,6 +304,8 @@ #if wxUSE_GRAPHICS_CONTEXT +#include <wx/graphics.h> + class wxPLDevGC : public wxPLDevBase { public: /* methods */ Modified: trunk/drivers/wxwidgets_gc.cpp =================================================================== --- trunk/drivers/wxwidgets_gc.cpp 2009-02-19 22:45:45 UTC (rev 9558) +++ trunk/drivers/wxwidgets_gc.cpp 2009-02-19 22:48:09 UTC (rev 9559) @@ -38,7 +38,6 @@ /* only compile code if wxGraphicsContext available */ #if wxUSE_GRAPHICS_CONTEXT -#include "wx/graphics.h" wxPLDevGC::wxPLDevGC( void ) : wxPLDevBase() { @@ -297,8 +296,10 @@ m_context->Translate( w, 0 ); } - textWidth += w; - textHeight = textHeight>(h+yOffset/scaley) ? textHeight : (h+yOffset/scaley); + textWidth += static_cast<int>(w); + textHeight = textHeight > (h+yOffset/scaley) + ? textHeight + : static_cast<int>((h+yOffset/scaley)); memset( utf8_string, '\0', max_string_length ); } @@ -314,8 +315,9 @@ plP_fci2hex( fci, &fontWeight, PL_FCI_WEIGHT ); if( m_font ) delete m_font; - m_font=wxFont::New(fontSize*fontScale, fontFamilyLookup[fontFamily], - fontStyleLookup[fontStyle] & fontWeightLookup[fontWeight] ); + m_font=wxFont::New(static_cast<int>(fontSize*fontScale), + fontFamilyLookup[fontFamily], + fontStyleLookup[fontStyle] & fontWeightLookup[fontWeight] ); m_font->SetUnderlined( underlined ); m_context->SetFont( *m_font, wxColour(textRed, textGreen, textBlue) ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2009-02-20 07:36:57
|
Revision: 9562 http://plplot.svn.sourceforge.net/plplot/?rev=9562&view=rev Author: smekal Date: 2009-02-20 07:36:49 +0000 (Fri, 20 Feb 2009) Log Message: ----------- The wxWidgets driver considers now the position settings of the geometry option. Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets.h Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2009-02-19 22:52:21 UTC (rev 9561) +++ trunk/drivers/wxwidgets.cpp 2009-02-20 07:36:49 UTC (rev 9562) @@ -128,6 +128,8 @@ comcount = 0; m_frame=NULL; + xpos=0; + ypos=0; // width, height are set in plD_init_wxwidgets // bm_width, bm_height are set in install_buffer @@ -405,7 +407,7 @@ } #endif - /* initialize device storage */ + /* initialize frame size and position */ if( pls->xlength <= 0 || pls->ylength <=0 ) plspage( 0.0, 0.0, (PLINT)(CANVAS_WIDTH*DEVICE_PIXELS_PER_IN), (PLINT)(CANVAS_HEIGHT*DEVICE_PIXELS_PER_IN), 0, 0 ); @@ -415,6 +417,12 @@ dev->clipminx=pls->xlength; dev->clipminy=pls->ylength; + if( pls->xoffset!=0 || pls->yoffset!=0) { + dev->xpos = (int)(pls->xoffset); + dev->ypos = (int)(pls->yoffset); + } + + /* If portrait mode, apply a rotation and set freeaspect */ if( pls->portrait ) { plsdiori( (PLFLT)(4 - ORIENTATION) ); @@ -1224,7 +1232,14 @@ } dev->m_frame = new wxPLplotFrame( title, pls ); wxPLGetApp().AddFrame( dev->m_frame ); + + /* set size and position of window */ dev->m_frame->SetClientSize( dev->width, dev->height ); + if( dev->xpos!=0 || dev->ypos!=0) + dev->m_frame->SetSize( dev->xpos, dev->ypos, + wxDefaultCoord, wxDefaultCoord, + wxSIZE_USE_EXISTING ); + if( dev->showGUI ) { dev->m_frame->Show( true ); dev->m_frame->Raise(); Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2009-02-19 22:52:21 UTC (rev 9561) +++ trunk/drivers/wxwidgets.h 2009-02-20 07:36:49 UTC (rev 9562) @@ -125,6 +125,8 @@ int comcount; wxPLplotFrame* m_frame; + PLINT xpos; + PLINT ypos; PLINT width; PLINT height; PLINT bm_width; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sm...@us...> - 2009-02-25 12:48:05
|
Revision: 9608 http://plplot.svn.sourceforge.net/plplot/?rev=9608&view=rev Author: smekal Date: 2009-02-25 12:47:51 +0000 (Wed, 25 Feb 2009) Log Message: ----------- The user can determine now which backend the wxWidgets driver actually uses. Modified Paths: -------------- trunk/drivers/wxwidgets.cpp trunk/drivers/wxwidgets.h trunk/drivers/wxwidgets_agg.cpp trunk/drivers/wxwidgets_dc.cpp trunk/drivers/wxwidgets_gc.cpp Modified: trunk/drivers/wxwidgets.cpp =================================================================== --- trunk/drivers/wxwidgets.cpp 2009-02-25 12:46:00 UTC (rev 9607) +++ trunk/drivers/wxwidgets.cpp 2009-02-25 12:47:51 UTC (rev 9608) @@ -115,7 +115,7 @@ * * Contructor of base class of wxPLDev classes. *--------------------------------------------------------------------------*/ -wxPLDevBase::wxPLDevBase( void ) +wxPLDevBase::wxPLDevBase( int bcknd ) : backend(bcknd) { // Log_Verbose( "wxPLDevBase::wxPLDevBase()" ); @@ -854,6 +854,10 @@ GetCursorCmd( pls, (PLGraphicsIn *) ptr ); break; + case PLESC_GETBACKEND: + *((int*)ptr) = dev->backend; + break; + default: break; } Modified: trunk/drivers/wxwidgets.h =================================================================== --- trunk/drivers/wxwidgets.h 2009-02-25 12:46:00 UTC (rev 9607) +++ trunk/drivers/wxwidgets.h 2009-02-25 12:47:51 UTC (rev 9608) @@ -89,7 +89,7 @@ class wxPLDevBase { public: /* methods */ - wxPLDevBase( void ); + wxPLDevBase( int bcknd ); virtual ~wxPLDevBase( void ); // virtual functions which need to implemented @@ -115,13 +115,13 @@ virtual void PSSetFont( PLUNICODE fci )=0; public: /* variables */ + const int backend; bool ready; bool ownGUI; bool showGUI; bool waiting; bool resizing; bool exit; - int backend; int comcount; wxPLplotFrame* m_frame; Modified: trunk/drivers/wxwidgets_agg.cpp =================================================================== --- trunk/drivers/wxwidgets_agg.cpp 2009-02-25 12:46:00 UTC (rev 9607) +++ trunk/drivers/wxwidgets_agg.cpp 2009-02-25 12:47:51 UTC (rev 9608) @@ -65,7 +65,7 @@ * class. Initialisations of variables and objects are done. *--------------------------------------------------------------------------*/ wxPLDevAGG::wxPLDevAGG() : - wxPLDevBase(), + wxPLDevBase(wxBACKEND_AGG), mRenderingBuffer(), mPixFormat( mRenderingBuffer ), mRendererBase( mPixFormat ), @@ -93,8 +93,6 @@ mColorGreenFill( 0 ), mColorBlueFill( 0 ) { - backend=wxBACKEND_AGG; - mCurves.approximation_scale( 2.0 ); mContour.auto_detect_orientation( false ); mConvStroke.line_join( agg::round_join ); Modified: trunk/drivers/wxwidgets_dc.cpp =================================================================== --- trunk/drivers/wxwidgets_dc.cpp 2009-02-25 12:46:00 UTC (rev 9607) +++ trunk/drivers/wxwidgets_dc.cpp 2009-02-25 12:47:51 UTC (rev 9608) @@ -45,9 +45,8 @@ * Constructor of the standard wxWidgets device based on the wxPLDevBase * class. Only some initialisations are done. *--------------------------------------------------------------------------*/ -wxPLDevDC::wxPLDevDC( void ) : wxPLDevBase() +wxPLDevDC::wxPLDevDC( void ) : wxPLDevBase(wxBACKEND_DC) { - backend=wxBACKEND_DC; m_dc=NULL; m_bitmap=NULL; m_font=NULL; Modified: trunk/drivers/wxwidgets_gc.cpp =================================================================== --- trunk/drivers/wxwidgets_gc.cpp 2009-02-25 12:46:00 UTC (rev 9607) +++ trunk/drivers/wxwidgets_gc.cpp 2009-02-25 12:47:51 UTC (rev 9608) @@ -39,11 +39,10 @@ /* only compile code if wxGraphicsContext available */ #if wxUSE_GRAPHICS_CONTEXT -wxPLDevGC::wxPLDevGC( void ) : wxPLDevBase() +wxPLDevGC::wxPLDevGC( void ) : wxPLDevBase(wxBACKEND_GC) { // Log_Verbose( "%s", __FUNCTION__ ); - backend=wxBACKEND_GC; m_dc=NULL; m_bitmap=NULL; m_context=NULL; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |