@@ -391,6 +391,12 @@ const QPrinterInfo* MapPrinter::imageTarget()
391391 return &image_target;
392392}
393393
394+ const QPrinterInfo* MapPrinter::kmzTarget ()
395+ {
396+ static QPrinterInfo kmz_target; // TODO: set name and features?
397+ return &kmz_target;
398+ }
399+
394400
395401// QPageSize (::key(), ::name()) made this list mostly obsolete.
396402// But we keep it in v0.9 for loading maps where we used names
@@ -454,14 +460,17 @@ void MapPrinter::setTarget(const QPrinterInfo* new_target)
454460 target = new_target;
455461 else if (new_target == imageTarget ())
456462 target = new_target;
463+ else if (new_target == kmzTarget ())
464+ target = new_target;
457465 else
458466 {
459467 // We don't own this target, so we need to make a copy.
460468 target_copy = *new_target;
461469 target = &target_copy;
462470 }
463471
464- if (old_target == imageTarget () || new_target == imageTarget ())
472+ if (old_target == imageTarget () || new_target == imageTarget ()
473+ || old_target == kmzTarget () || new_target == kmzTarget ())
465474 {
466475 // No page margins. Will emit pageFormatChanged( ).
467476 setCustomPageSize (page_format.page_rect .size ());
@@ -536,7 +545,8 @@ bool MapPrinter::isPrinter() const
536545{
537546 bool is_printer = target
538547 && target != imageTarget ()
539- && target != pdfTarget ();
548+ && target != pdfTarget ()
549+ && target != kmzTarget ();
540550 return is_printer;
541551}
542552
@@ -547,7 +557,7 @@ void MapPrinter::setPrintArea(const QRectF& area)
547557 {
548558 print_area = area;
549559
550- if (target == imageTarget () && print_area.size () != page_format.paper_dimensions )
560+ if (( target == imageTarget () || target == kmzTarget () ) && print_area.size () != page_format.paper_dimensions )
551561 setCustomPageSize (print_area.size () * scale_adjustment);
552562
553563 updatePageBreaks ();
@@ -627,7 +637,7 @@ void MapPrinter::setOverlap(qreal h_overlap, qreal v_overlap)
627637
628638void MapPrinter::updatePaperDimensions ()
629639{
630- if (target == imageTarget () && page_format.page_size == QPageSize::Custom)
640+ if (( target == imageTarget () || target == kmzTarget () ) && page_format.page_size == QPageSize::Custom)
631641 {
632642 // No margins, no need to query QPrinter.
633643 page_format.page_rect = QRectF (QPointF (0.0 , 0.0 ), page_format.paper_dimensions );
@@ -639,7 +649,7 @@ void MapPrinter::updatePaperDimensions()
639649
640650 QPrinter* printer = target ? new QPrinter (*target, QPrinter::HighResolution)
641651 : new QPrinter (QPrinter::HighResolution);
642- if (!printer->isValid () || target == imageTarget () || target == pdfTarget ())
652+ if (!printer->isValid () || target == imageTarget () || target == kmzTarget () || target == pdfTarget ())
643653 printer->setOutputFormat (QPrinter::PdfFormat);
644654
645655 if (page_format.page_size == QPageSize::Custom)
@@ -657,7 +667,7 @@ void MapPrinter::updatePaperDimensions()
657667 page_format.page_rect = printer->paperRect (QPrinter::Millimeter);
658668 page_format.paper_dimensions = page_format.page_rect .size ();
659669
660- if ( target != imageTarget () && target != pdfTarget () &&
670+ if ( target != imageTarget () && target != kmzTarget () && target != pdfTarget () &&
661671 page_format.page_size != QPageSize::Custom )
662672 {
663673 page_format.page_rect = printer->pageRect (QPrinter::Millimeter);
@@ -896,7 +906,7 @@ void MapPrinter::takePrinterSettings(const QPrinter* printer)
896906 if (!printer) return ;
897907
898908 MapPrinterPageFormat f (*printer);
899- if (target == pdfTarget () || target == imageTarget ())
909+ if (target == pdfTarget () || target == imageTarget () || target == kmzTarget () )
900910 {
901911 f.page_rect = QRectF (QPointF (0.0 , 0.0 ), f.paper_dimensions );
902912 }
@@ -966,7 +976,7 @@ void MapPrinter::drawPage(QPainter* device_painter, const QRectF& page_extent, c
966976 * When the target is an image, use the temporary image to enforce the given
967977 * resolution.
968978 */
969- const bool use_buffer_for_map = rasterModeSelected () || target == imageTarget () || engineWillRasterize ();
979+ const bool use_buffer_for_map = rasterModeSelected () || target == imageTarget () || target == kmzTarget () || engineWillRasterize ();
970980 bool use_page_buffer = use_buffer_for_map;
971981
972982 auto first_front_template = map.getFirstFrontTemplate ();
@@ -1234,7 +1244,7 @@ void MapPrinter::drawSeparationPages(QPrinter* printer, QPainter* device_painter
12341244
12351245 // Translate and clip for margins and print area
12361246 device_painter->translate (-page_extent.left (), -page_extent.top ());
1237- device_painter->setClipRect (page_extent.intersected (print_area), Qt::ReplaceClip);
1247+ device_painter->setClipRect (page_extent.intersected (print_area). adjusted (- 10 , 10 , 10 , 10 ) , Qt::ReplaceClip);
12381248
12391249 bool need_new_page = false ;
12401250 for (int i = map.getNumColors () - 1 ; i >= 0 ; --i)
0 commit comments