41#include <QMutexLocker>
56#if defined ( PLD_bmpqt )
57 "bmpqt:Qt Windows bitmap driver:0:qt:66:bmpqt\n"
59#if defined ( PLD_jpgqt )
60 "jpgqt:Qt jpg driver:0:qt:67:jpgqt\n"
62#if defined ( PLD_pngqt )
63 "pngqt:Qt png driver:0:qt:68:pngqt\n"
65#if defined ( PLD_ppmqt )
66 "ppmqt:Qt ppm driver:0:qt:69:ppmqt\n"
68#if defined ( PLD_tiffqt )
69 "tiffqt:Qt tiff driver:0:qt:70:tiffqt\n"
71#if defined ( PLD_svgqt ) && QT_VERSION >= 0x040300
72 "svgqt:Qt SVG driver:0:qt:71:svgqt\n"
74#if defined ( PLD_qtwidget )
75 "qtwidget:Qt Widget:1:qt:72:qtwidget\n"
77#if defined ( PLD_epsqt )
78 "epsqt:Qt EPS driver:0:qt:73:epsqt\n"
80#if defined ( PLD_pdfqt )
81 "pdfqt:Qt PDF driver:0:qt:74:pdfqt\n"
83#if defined ( PLD_extqt )
84 "extqt:External Qt driver:0:qt:75:extqt\n"
86#if defined ( PLD_memqt )
87 "memqt:Memory Qt driver:0:qt:76:memqt\n"
93 {
"lines_antialiasing",
DRV_INT, &lines_aa,
"Toggles antialiasing on lines (0|1)" },
94 { NULL,
DRV_INT, NULL, NULL } };
109 argv[0] =
new char[10];
110 argv[1] =
new char[1];
111 snprintf(
argv[0], 10,
"qt_driver" );
115 if ( getenv(
"DISPLAY" ) == NULL )
118 new QApplication(
argc,
argv, isGUI );
159 if (
pls->family ||
pls->page == 1 )
168 plwarn(
"All pages after the first skipped because family file output not specified.\n" );
175#if defined ( PLD_bmpqt ) || defined ( PLD_jpgqt ) || defined ( PLD_pngqt ) || defined ( PLD_ppmqt ) || defined ( PLD_tiffqt ) || defined ( PLD_memqt )
176void plD_init_rasterqt(
PLStream * );
178void plD_line_rasterqt(
PLStream *,
short,
short,
short,
short );
179void plD_polyline_rasterqt(
PLStream *,
short*,
short*,
PLINT );
180void plD_tidy_rasterqt(
PLStream * );
185#if defined ( PLD_bmpqt )
190#if defined ( PLD_jpgqt )
195#if defined ( PLD_pngqt )
200#if defined ( PLD_ppmqt )
205#if defined ( PLD_tiffqt )
210#if defined ( PLD_svgqt ) && QT_VERSION >= 0x040300
215void plD_line_svgqt(
PLStream *,
short,
short,
short,
short );
222#if defined ( PLD_epsqt ) || defined ( PLD_pdfqt )
223void plD_init_epspdfqt(
PLStream * );
224void plD_bop_epspdfqt_helper(
PLStream *,
int ifeps );
226void plD_line_epspdfqt(
PLStream *,
short,
short,
short,
short );
227void plD_polyline_epspdfqt(
PLStream *,
short*,
short*,
PLINT );
228void plD_tidy_epspdfqt(
PLStream * );
232#if defined ( PLD_epsqt )
236#if defined ( PLD_pdfqt )
241#if defined ( PLD_qtwidget )
243void plD_init_qtwidget(
PLStream * );
245void plD_wait_qtwidget(
PLStream * );
246void plD_line_qtwidget(
PLStream *,
short,
short,
short,
short );
247void plD_polyline_qtwidget(
PLStream *,
short*,
short*,
PLINT );
248void plD_tidy_qtwidget(
PLStream * );
254#if defined ( PLD_extqt )
258void plD_line_extqt(
PLStream *,
short,
short,
short,
short );
266#if defined ( PLD_memqt )
274#if defined ( PLD_bmpqt ) || defined ( PLD_jpgqt ) || defined ( PLD_pngqt ) || defined ( PLD_ppmqt ) || defined ( PLD_tiffqt ) || defined ( PLD_memqt )
285 pls->plbuf_write = 0;
288 pls->dev_gradient = 1;
300 pls->dev_unicode = 1;
301 pls->has_string_length = 1;
306 if (
pls->xdpi <= 0. )
312 if (
pls->xlength <= 0 ||
pls->ylength <= 0 )
314 pls->dev =
new QtRasterDevice;
315 pls->xlength = (
PLINT) ( ( (QtRasterDevice *) (
pls->dev ) )->m_dWidth );
316 pls->ylength = (
PLINT) ( ( (QtRasterDevice *) (
pls->dev ) )->m_dHeight );
320 pls->dev =
new QtRasterDevice(
pls->xlength,
pls->ylength );
322 ( (QtRasterDevice *)
pls->dev )->setPLStream(
pls );
325 handler.setMasterDevice( (QtRasterDevice *) (
pls->dev ) );
327 if (
pls->xlength >
pls->ylength )
334 plP_setpxl( dpi / 25.4 / ( (QtRasterDevice *) (
pls->dev ) )->downscale, dpi / 25.4 / ( (QtRasterDevice *) (
pls->dev ) )->downscale );
336 ( (QtRasterDevice *) (
pls->dev ) )->setResolution( dpi );
350 ( (QtRasterDevice *)
pls->dev )->savePlot();
351 handler.DeviceChangedPage( (QtRasterDevice *)
pls->dev );
354void plD_line_rasterqt(
PLStream *
pls,
short x1a,
short y1a,
short x2a,
short y2a )
356 QtRasterDevice* widget = (QtRasterDevice *)
pls->dev;
362 if ( widget == NULL )
365 widget->QtPLDriver::setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
366 widget->drawLine( x1a, y1a, x2a, y2a );
369void plD_polyline_rasterqt(
PLStream *
pls,
short *xa,
short *ya,
PLINT npts )
371 QtRasterDevice * widget = (QtRasterDevice *)
pls->dev;
377 if ( widget == NULL )
380 widget->QtPLDriver::setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
381 widget->drawPolyline( xa, ya, npts );
387 unsigned char *r, *g, *b;
390 QtRasterDevice * widget = (QtRasterDevice *)
pls->dev;
395 if ( widget == NULL )
408 xa =
new short[
pls->dev_npts];
409 ya =
new short[
pls->dev_npts];
411 for ( i = 0; i <
pls->dev_npts; i++ )
413 xa[i] =
pls->dev_x[i];
414 ya[i] =
pls->dev_y[i];
416 widget->QtPLDriver::setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
417 widget->drawPolygon( xa, ya,
pls->dev_npts );
424 xa =
new short[
pls->dev_npts];
425 ya =
new short[
pls->dev_npts];
426 r =
new unsigned char[
pls->ncol1];
427 g =
new unsigned char[
pls->ncol1];
428 b =
new unsigned char[
pls->ncol1];
431 for ( i = 0; i <
pls->ncol1; i++ )
433 r[i] =
pls->cmap1[i].r;
434 g[i] =
pls->cmap1[i].g;
435 b[i] =
pls->cmap1[i].b;
436 alpha[i] =
pls->cmap1[i].a;
438 widget->setGradient(
pls->xgradient[0],
pls->xgradient[1],
pls->ygradient[0],
pls->ygradient[1], r, g, b, alpha,
pls->ncol1 );
440 for ( i = 0; i <
pls->dev_npts; i++ )
442 xa[i] =
pls->dev_x[i];
443 ya[i] =
pls->dev_y[i];
445 widget->drawPolygon( xa, ya,
pls->dev_npts );
458 widget->QtPLDriver::setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
459 widget->drawText( (
EscText *) ptr );
468 QtRasterDevice * widget = (QtRasterDevice *)
pls->dev;
473 if ( widget == NULL )
479 widget->setWidthF(
pls->width );
483 ( (
QtPLDriver *) widget )->QtPLDriver::setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
487 ( (
QtPLDriver *) widget )->QtPLDriver::setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
497 QtRasterDevice * widget = (QtRasterDevice *)
pls->dev;
499 if ( widget != NULL )
501 handler.DeviceClosed( widget );
511#if defined ( PLD_bmpqt )
514#ifndef ENABLE_DYNDRIVERS
541 ( (QtRasterDevice *)
pls->dev )->definePlotName(
pls->FileName,
"BMP" );
542 ( (QtRasterDevice *)
pls->dev )->setBackgroundColor(
pls->cmap0[0].r,
pls->cmap0[0].g,
pls->cmap0[0].b,
pls->cmap0[0].a );
546#if defined ( PLD_jpgqt )
549#ifndef ENABLE_DYNDRIVERS
576 ( (QtRasterDevice *)
pls->dev )->definePlotName(
pls->FileName,
"JPG" );
577 ( (QtRasterDevice *)
pls->dev )->setBackgroundColor(
pls->cmap0[0].r,
pls->cmap0[0].g,
pls->cmap0[0].b,
pls->cmap0[0].a );
581#if defined ( PLD_pngqt )
584#ifndef ENABLE_DYNDRIVERS
611 ( (QtRasterDevice *)
pls->dev )->definePlotName(
pls->FileName,
"PNG" );
612 ( (QtRasterDevice *)
pls->dev )->setBackgroundColor(
pls->cmap0[0].r,
pls->cmap0[0].g,
pls->cmap0[0].b,
pls->cmap0[0].a );
616#if defined ( PLD_ppmqt )
619#ifndef ENABLE_DYNDRIVERS
646 ( (QtRasterDevice *)
pls->dev )->definePlotName(
pls->FileName,
"PPM" );
647 ( (QtRasterDevice *)
pls->dev )->setBackgroundColor(
pls->cmap0[0].r,
pls->cmap0[0].g,
pls->cmap0[0].b,
pls->cmap0[0].a );
651#if defined ( PLD_tiffqt )
654#ifndef ENABLE_DYNDRIVERS
681 ( (QtRasterDevice *)
pls->dev )->definePlotName(
pls->FileName,
"TIFF" );
682 ( (QtRasterDevice *)
pls->dev )->setBackgroundColor(
pls->cmap0[0].r,
pls->cmap0[0].g,
pls->cmap0[0].b,
pls->cmap0[0].a );
686#if defined ( PLD_svgqt ) && QT_VERSION >= 0x040300
689#ifndef ENABLE_DYNDRIVERS
713 pls->plbuf_write = 0;
716 pls->dev_gradient = 1;
728 pls->dev_unicode = 1;
729 pls->has_string_length = 1;
734 if (
pls->xlength <= 0 ||
pls->ylength <= 0 )
736 pls->dev =
new QtSVGDevice;
737 pls->xlength = (int) ( ( (QtSVGDevice *) (
pls->dev ) )->m_dWidth );
738 pls->ylength = (int) ( ( (QtSVGDevice *) (
pls->dev ) )->m_dHeight );
742 pls->dev =
new QtSVGDevice(
pls->xlength,
pls->ylength );
744 ( (QtSVGDevice *)
pls->dev )->setPLStream(
pls );
747 handler.setMasterDevice( (QtSVGDevice *) (
pls->dev ) );
749 if (
pls->xlength >
pls->ylength )
775 ( (QtSVGDevice *)
pls->dev )->definePlotName(
pls->FileName );
776 ( (QtSVGDevice *)
pls->dev )->setBackgroundColor(
pls->cmap0[0].r,
pls->cmap0[0].g,
pls->cmap0[0].b,
pls->cmap0[0].a );
788 ( (QtSVGDevice *)
pls->dev )->savePlot();
791 downscale = ( (QtSVGDevice *)
pls->dev )->downscale;
792 s = ( (QtSVGDevice *)
pls->dev )->size();
793 bool isMaster = ( handler.isMasterDevice( (QtSVGDevice *)
pls->dev ) );
794 delete ( (QtSVGDevice *)
pls->dev );
796 pls->dev =
new QtSVGDevice( s.width(), s.height() );
797 ( (QtSVGDevice *)
pls->dev )->downscale = downscale;
798 ( (QtSVGDevice *)
pls->dev )->setPLStream(
pls );
801 handler.setMasterDevice( (QtSVGDevice *)
pls->dev );
802 handler.DeviceChangedPage( (QtSVGDevice *)
pls->dev );
805void plD_line_svgqt(
PLStream *
pls,
short x1a,
short y1a,
short x2a,
short y2a )
807 QtSVGDevice* widget = (QtSVGDevice *)
pls->dev;
812 if ( widget == NULL )
815 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
816 widget->drawLine( x1a, y1a, x2a, y2a );
821 QtSVGDevice * widget = (QtSVGDevice *)
pls->dev;
826 if ( widget == NULL )
829 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
830 widget->drawPolyline( xa, ya, npts );
836 unsigned char *r, *g, *b;
839 QtSVGDevice * widget = (QtSVGDevice *)
pls->dev;
844 if ( widget == NULL )
850 xa =
new short[
pls->dev_npts];
851 ya =
new short[
pls->dev_npts];
853 for ( i = 0; i <
pls->dev_npts; i++ )
855 xa[i] =
pls->dev_x[i];
856 ya[i] =
pls->dev_y[i];
858 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
859 widget->drawPolygon( xa, ya,
pls->dev_npts );
866 xa =
new short[
pls->dev_npts];
867 ya =
new short[
pls->dev_npts];
868 r =
new unsigned char[
pls->ncol1];
869 g =
new unsigned char[
pls->ncol1];
870 b =
new unsigned char[
pls->ncol1];
873 for ( i = 0; i <
pls->ncol1; i++ )
875 r[i] =
pls->cmap1[i].r;
876 g[i] =
pls->cmap1[i].g;
877 b[i] =
pls->cmap1[i].b;
878 alpha[i] =
pls->cmap1[i].a;
880 widget->setGradient(
pls->xgradient[0],
pls->xgradient[1],
pls->ygradient[0],
pls->ygradient[1], r, g, b, alpha,
pls->ncol1 );
882 for ( i = 0; i <
pls->dev_npts; i++ )
884 xa[i] =
pls->dev_x[i];
885 ya[i] =
pls->dev_y[i];
887 widget->drawPolygon( xa, ya,
pls->dev_npts );
900 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
901 widget->drawText( (
EscText *) ptr );
911 QtSVGDevice * widget = (QtSVGDevice *)
pls->dev;
916 if ( widget == NULL )
922 widget->setWidthF(
pls->width );
926 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
930 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
939 QtSVGDevice * widget = (QtSVGDevice *)
pls->dev;
941 if ( widget != NULL )
943 handler.DeviceClosed( widget );
953#if defined ( PLD_epsqt )
956#ifndef ENABLE_DYNDRIVERS
973#if defined ( PLD_pdfqt )
976#ifndef ENABLE_DYNDRIVERS
993#if defined ( PLD_epsqt ) || defined ( PLD_pdfqt )
1002 pls->plbuf_write = 0;
1005 pls->dev_gradient = 1;
1018 pls->dev_unicode = 1;
1019 pls->has_string_length = 1;
1025 if (
pls->xlength <= 0 ||
pls->ylength <= 0 )
1027 pls->dev =
new QtEPSDevice;
1028 pls->xlength = (int) ( ( (QtEPSDevice *) (
pls->dev ) )->m_dWidth );
1029 pls->ylength = (int) ( ( (QtEPSDevice *) (
pls->dev ) )->m_dHeight );
1033 pls->dev =
new QtEPSDevice(
pls->xlength,
pls->ylength );
1035 ( (QtEPSDevice *)
pls->dev )->setPLStream(
pls );
1038 handler.setMasterDevice( (QtEPSDevice *) (
pls->dev ) );
1040 if (
pls->xlength >
pls->ylength )
1055void plD_bop_epspdfqt_helper(
PLStream *
pls,
int ifeps )
1066 ( (QtEPSDevice *)
pls->dev )->definePlotName(
pls->FileName, ifeps );
1067 ( (QtEPSDevice *)
pls->dev )->setBackgroundColor(
pls->cmap0[0].r,
pls->cmap0[0].g,
pls->cmap0[0].b,
pls->cmap0[0].a );
1078 ( (QtEPSDevice *)
pls->dev )->savePlot();
1081 downscale = ( (QtEPSDevice *)
pls->dev )->downscale;
1082 bool isMaster = handler.isMasterDevice( (QtEPSDevice *)
pls->dev );
1083 delete ( (QtEPSDevice *)
pls->dev );
1085 pls->dev =
new QtEPSDevice;
1086 ( (QtEPSDevice *)
pls->dev )->downscale = downscale;
1089 handler.setMasterDevice( (QtEPSDevice *)
pls->dev );
1090 handler.DeviceChangedPage( (QtEPSDevice *)
pls->dev );
1093void plD_line_epspdfqt(
PLStream *
pls,
short x1a,
short y1a,
short x2a,
short y2a )
1095 QtEPSDevice* widget = (QtEPSDevice *)
pls->dev;
1100 if ( widget == NULL )
1103 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1104 widget->drawLine( x1a, y1a, x2a, y2a );
1107void plD_polyline_epspdfqt(
PLStream *
pls,
short *xa,
short *ya,
PLINT npts )
1109 QtEPSDevice * widget = (QtEPSDevice *)
pls->dev;
1114 if ( widget == NULL )
1117 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1118 widget->drawPolyline( xa, ya, npts );
1124 unsigned char *r, *g, *b;
1127 QtEPSDevice * widget = (QtEPSDevice *)
pls->dev;
1134 if ( widget == NULL )
1140 xa =
new short[
pls->dev_npts];
1141 ya =
new short[
pls->dev_npts];
1143 for ( i = 0; i <
pls->dev_npts; i++ )
1145 xa[i] =
pls->dev_x[i];
1146 ya[i] =
pls->dev_y[i];
1148 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1149 widget->drawPolygon( xa, ya,
pls->dev_npts );
1156 xa =
new short[
pls->dev_npts];
1157 ya =
new short[
pls->dev_npts];
1158 r =
new unsigned char[
pls->ncol1];
1159 g =
new unsigned char[
pls->ncol1];
1160 b =
new unsigned char[
pls->ncol1];
1163 for ( i = 0; i <
pls->ncol1; i++ )
1165 r[i] =
pls->cmap1[i].r;
1166 g[i] =
pls->cmap1[i].g;
1167 b[i] =
pls->cmap1[i].b;
1168 alpha[i] =
pls->cmap1[i].a;
1170 widget->setGradient(
pls->xgradient[0],
pls->xgradient[1],
pls->ygradient[0],
pls->ygradient[1], r, g, b, alpha,
pls->ncol1 );
1172 for ( i = 0; i <
pls->dev_npts; i++ )
1174 xa[i] =
pls->dev_x[i];
1175 ya[i] =
pls->dev_y[i];
1177 widget->drawPolygon( xa, ya,
pls->dev_npts );
1190 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1191 widget->drawText( (
EscText *) ptr );
1195 widget->drawArc( arc_info->
x, arc_info->
y, arc_info->
a, arc_info->
b, arc_info->
angle1, arc_info->
angle2, arc_info->
rotate, arc_info->
fill );
1204 QtEPSDevice * widget = (QtEPSDevice *)
pls->dev;
1209 if ( widget == NULL )
1215 widget->setWidthF(
pls->width );
1219 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1223 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1233 QtEPSDevice * widget = (QtEPSDevice *)
pls->dev;
1235 if ( widget != NULL )
1237 handler.DeviceClosed( widget );
1247#if defined ( PLD_epsqt )
1250 plD_bop_epspdfqt_helper(
pls, 1 );
1254#if defined ( PLD_pdfqt )
1257 plD_bop_epspdfqt_helper(
pls, 0 );
1261#if defined ( PLD_qtwidget )
1264#ifndef ENABLE_DYNDRIVERS
1290 if (
pls->xlength <= 0 ||
pls->ylength <= 0 )
1292 widget =
new QtPLWidget;
1293 pls->dev = (
void *) widget;
1294 pls->xlength = (int) widget->m_dWidth;
1295 pls->ylength = (int) widget->m_dHeight;
1299 widget =
new QtPLWidget(
pls->xlength,
pls->ylength );
1300 pls->dev = (
void *) widget;
1302 widget->setPLStream(
pls );
1305 handler.setMasterDevice( widget );
1307 if ( plsc->xlength > plsc->ylength )
1315 QPainter tempPainter( &temp );
1317 plP_setpxl( temp.logicalDpiX() / 25.4 / widget->downscale, temp.logicalDpiY() / 25.4 / widget->downscale );
1320 pls->plbuf_write = 1;
1323 pls->dev_gradient = 1;
1335 pls->dev_unicode = 1;
1336 pls->has_string_length = 1;
1338 widget->setVisible(
true );
1339 widget->resize( plsc->xlength, plsc->ylength );
1340 widget->move( plsc->xoffset, plsc->yoffset );
1342 widget->setWindowTitle(
pls->plwindow );
1344 qApp->connect( &handler, SIGNAL( MasterChangedPage() ), widget, SLOT( nextPage() ) );
1345 qApp->connect( &handler, SIGNAL( MasterClosed() ), widget, SLOT( close() ) );
1350 QtPLWidget* widget = ( (QtPLWidget *)
pls->dev );
1358 QtPLWidget* widget = ( (QtPLWidget *)
pls->dev );
1359 int currentPage = widget->pageNumber;
1362 while ( currentPage == widget->pageNumber && handler.isMasterDevice( widget ) )
1364 qApp->processEvents( QEventLoop::WaitForMoreEvents );
1370 QtPLWidget* widget = ( (QtPLWidget *)
pls->dev );
1371 widget->setBackgroundColor(
pls->cmap0[0].r,
pls->cmap0[0].g,
pls->cmap0[0].b,
pls->cmap0[0].a );
1374void plD_line_qtwidget(
PLStream *
pls,
short x1a,
short y1a,
short x2a,
short y2a )
1376 QtPLWidget* widget = (QtPLWidget *)
pls->dev;
1377 if ( widget == NULL )
1380 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1381 widget->drawLine( x1a, y1a, x2a, y2a );
1384void plD_polyline_qtwidget(
PLStream *
pls,
short *xa,
short *ya,
PLINT npts )
1386 QtPLWidget * widget = (QtPLWidget *)
pls->dev;
1387 if ( widget == NULL )
1390 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1391 widget->drawPolyline( xa, ya, npts );
1398 unsigned char *r, *g, *b;
1400 QtPLWidget * widget = (QtPLWidget *)
pls->dev;
1402 if ( widget == NULL )
1408 xa =
new short[
pls->dev_npts];
1409 ya =
new short[
pls->dev_npts];
1411 for ( i = 0; i <
pls->dev_npts; i++ )
1413 xa[i] =
pls->dev_x[i];
1414 ya[i] =
pls->dev_y[i];
1417 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1418 widget->drawPolygon( xa, ya,
pls->dev_npts );
1425 xa =
new short[
pls->dev_npts];
1426 ya =
new short[
pls->dev_npts];
1427 r =
new unsigned char[
pls->ncol1];
1428 g =
new unsigned char[
pls->ncol1];
1429 b =
new unsigned char[
pls->ncol1];
1432 for ( i = 0; i <
pls->ncol1; i++ )
1434 r[i] =
pls->cmap1[i].r;
1435 g[i] =
pls->cmap1[i].g;
1436 b[i] =
pls->cmap1[i].b;
1437 alpha[i] =
pls->cmap1[i].a;
1439 widget->setGradient(
pls->xgradient[0],
pls->xgradient[1],
pls->ygradient[0],
pls->ygradient[1], r, g, b, alpha,
pls->ncol1 );
1441 for ( i = 0; i <
pls->dev_npts; i++ )
1443 xa[i] =
pls->dev_x[i];
1444 ya[i] =
pls->dev_y[i];
1446 widget->drawPolygon( xa, ya,
pls->dev_npts );
1457 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1458 widget->drawText( (
EscText *) ptr );
1462 widget->drawArc( arc_info->
x, arc_info->
y, arc_info->
a, arc_info->
b, arc_info->
angle1, arc_info->
angle2, arc_info->
rotate, arc_info->
fill );
1477 QtPLWidget * widget = (QtPLWidget *)
pls->dev;
1478 if ( widget == NULL )
1484 widget->setWidthF(
pls->width );
1488 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1492 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1502 QtPLWidget * widget = (QtPLWidget *)
pls->dev;
1504 if ( widget != NULL )
1506 handler.DeviceClosed( widget );
1515#if defined ( PLD_extqt )
1518#ifndef ENABLE_DYNDRIVERS
1541 if (
pls->dev == NULL )
1543 printf(
"Error: use plsetqtdev to set up the Qt device before calling plinit()\n" );
1547 QtExtWidget* widget = (QtExtWidget *) (
pls->dev );
1549 if ( widget->m_dWidth > widget->m_dHeight )
1557 QPainter tempPainter( &temp );
1559 plP_setpxl( temp.logicalDpiX() / 25.4 / widget->downscale, temp.logicalDpiY() / 25.4 / widget->downscale );
1562 pls->plbuf_write = 0;
1565 pls->dev_gradient = 1;
1577 pls->dev_unicode = 1;
1578 pls->has_string_length = 1;
1587void plD_line_extqt(
PLStream *
pls,
short x1a,
short y1a,
short x2a,
short y2a )
1589 QtExtWidget * widget = NULL;
1591 widget = (QtExtWidget *)
pls->dev;
1592 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1593 widget->drawLine( x1a, y1a, x2a, y2a );
1598 QtExtWidget * widget = NULL;
1600 widget = (QtExtWidget *)
pls->dev;
1601 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1602 widget->drawPolyline( xa, ya, npts );
1609 unsigned char *r, *g, *b;
1611 QtExtWidget * widget = NULL;
1614 widget = (QtExtWidget *)
pls->dev;
1618 xa =
new short[
pls->dev_npts];
1619 ya =
new short[
pls->dev_npts];
1621 for ( i = 0; i <
pls->dev_npts; i++ )
1623 xa[i] =
pls->dev_x[i];
1624 ya[i] =
pls->dev_y[i];
1626 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1627 widget->drawPolygon( xa, ya,
pls->dev_npts );
1634 xa =
new short[
pls->dev_npts];
1635 ya =
new short[
pls->dev_npts];
1636 r =
new unsigned char[
pls->ncol1];
1637 g =
new unsigned char[
pls->ncol1];
1638 b =
new unsigned char[
pls->ncol1];
1641 for ( i = 0; i <
pls->ncol1; i++ )
1643 r[i] =
pls->cmap1[i].r;
1644 g[i] =
pls->cmap1[i].g;
1645 b[i] =
pls->cmap1[i].b;
1646 alpha[i] =
pls->cmap1[i].a;
1648 widget->setGradient(
pls->xgradient[0],
pls->xgradient[1],
pls->ygradient[0],
pls->ygradient[1], r, g, b, alpha,
pls->ncol1 );
1650 for ( i = 0; i <
pls->dev_npts; i++ )
1652 xa[i] =
pls->dev_x[i];
1653 ya[i] =
pls->dev_y[i];
1655 widget->drawPolygon( xa, ya,
pls->dev_npts );
1668 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1669 widget->drawText( (
EscText *) ptr );
1673 widget->drawArc( arc_info->
x, arc_info->
y, arc_info->
a, arc_info->
b, arc_info->
angle1, arc_info->
angle2, arc_info->
rotate, arc_info->
fill );
1682 QtExtWidget * widget = NULL;
1684 widget = (QtExtWidget *)
pls->dev;
1688 widget->setWidthF(
pls->width );
1692 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1696 widget->setColor(
pls->curcolor.r,
pls->curcolor.g,
pls->curcolor.b,
pls->curcolor.a );
1706 QtExtWidget * widget = NULL;
1708 widget = (QtExtWidget *)
pls->dev;
1709 if ( widget != NULL )
1711 handler.DeviceClosed( widget );
1726 QtExtWidget * widget = NULL;
1727 widget = (QtExtWidget *)
pls->dev;
1728 widget->setBackgroundColor(
pls->cmap0[0].r,
pls->cmap0[0].g,
pls->cmap0[0].b,
pls->cmap0[0].a );
1732#if defined ( PLD_memqt )
1735#ifndef ENABLE_DYNDRIVERS
1755 unsigned char *qt_mem;
1756 unsigned char *input_mem;
1764 pls->plbuf_write = 0;
1767 pls->dev_gradient = 1;
1780 pls->dev_unicode = 1;
1781 pls->has_string_length = 1;
1786 if (
pls->xdpi <= 0. )
1793 pls->xlength =
pls->phyxma;
1794 pls->ylength =
pls->phyyma;
1797 input_mem = (
unsigned char *)
pls->dev;
1800 pls->dev =
new QtRasterDevice(
pls->xlength,
pls->ylength );
1801 ( (QtRasterDevice *)
pls->dev )->setPLStream(
pls );
1802 ( (QtRasterDevice *)
pls->dev )->memory = input_mem;
1805 handler.setMasterDevice( (QtRasterDevice *) (
pls->dev ) );
1807 if (
pls->xlength >
pls->ylength )
1814 plP_setpxl( dpi / 25.4 / ( (QtRasterDevice *) (
pls->dev ) )->downscale, dpi / 25.4 / ( (QtRasterDevice *) (
pls->dev ) )->downscale );
1820 qt_mem = ( (QtRasterDevice *)
pls->dev )->scanLine( 0 );
1822 for ( i = 0; i < (
pls->xlength *
pls->ylength ); i++ )
1824 qt_mem[2] = input_mem[0];
1825 qt_mem[1] = input_mem[1];
1826 qt_mem[0] = input_mem[2];
1827 if (
pls->dev_mem_alpha == 1 )
1829 qt_mem[3] = input_mem[3];
1839 ( (QtRasterDevice *) (
pls->dev ) )->setResolution( dpi );
1853 unsigned char *memory;
1854 unsigned char *qt_mem;
1856 memory = ( (QtRasterDevice *)
pls->dev )->memory;
1857 qt_mem = ( (QtRasterDevice *)
pls->dev )->scanLine( 0 );
1859 for ( i = 0; i < (
pls->xlength *
pls->ylength ); i++ )
1861 memory[0] = qt_mem[2];
1862 memory[1] = qt_mem[1];
1863 memory[2] = qt_mem[0];
1864 if (
pls->dev_mem_alpha == 1 )
1866 memory[3] = qt_mem[3];
static int already_warned
void(* plD_line_fp)(struct PLStream_struct *, short, short, short, short)
void(* plD_tidy_fp)(struct PLStream_struct *)
void(* plD_bop_fp)(struct PLStream_struct *)
void(* plD_wait_fp)(struct PLStream_struct *)
void(* plD_state_fp)(struct PLStream_struct *, PLINT)
void(* plD_eop_fp)(struct PLStream_struct *)
void(* plD_init_fp)(struct PLStream_struct *)
void(* plD_esc_fp)(struct PLStream_struct *, PLINT, void *)
void(* plD_polyline_fp)(struct PLStream_struct *, short *, short *, PLINT)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_ppmqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_pngqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_jpgqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_bmpqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_svgqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_pdfqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_epsqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_tiffqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_extqt(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_qtwidget(PLDispatchTable *pdt)
PLDLLIMPEXP_DRIVER void plD_dispatch_init_memqt(PLDispatchTable *pdt)
int plParseDrvOpts(DrvOpt *acc_opt)
void plP_setpxl(PLFLT xpmm, PLFLT ypmm)
void plP_setphy(PLINT xmin, PLINT xmax, PLINT ymin, PLINT ymax)
static PLStream * pls[PL_NSTREAMS]
void plFamInit(PLStream *pls)
void plwarn(PLCHAR_VECTOR errormsg)
void plCloseFile(PLStream *pls)
void plOpenFile(PLStream *pls)
void plGetFam(PLStream *pls)
#define PLDLLIMPEXP_DRIVER_DATA(type)
static bool internal_qApp
static int qt_family_check(PLStream *pls)
static int internal_qAppCounter
bool initQtApp(bool isGUI)
static DrvOpt qt_options[]
plD_polyline_fp pl_polyline