150 lines
3.8 KiB
Text
150 lines
3.8 KiB
Text
|
CLASS:: QPenPrinter
|
||
|
summary:: QPen PDF export and printing of vector graphics
|
||
|
categories:: GUI>Accessories
|
||
|
related:: Classes/Pen
|
||
|
|
||
|
DESCRIPTION::
|
||
|
QPenPrinter allows Pen to operate on a printer device. The graphics can be exported to PDF by using "print to file" as printer device.
|
||
|
|
||
|
CLASSMETHODS::
|
||
|
private:: qtClass
|
||
|
|
||
|
|
||
|
METHOD:: new
|
||
|
Create a new QPenPrinter object.
|
||
|
|
||
|
returns:: an instance of QPenPrinter
|
||
|
|
||
|
METHOD:: print
|
||
|
Convenience function to show a print dialog and print.
|
||
|
|
||
|
argument:: printFunc
|
||
|
A link::Classes/Function:: to be evaluated when the user presses "Print", with the printer object as Pen painter target.
|
||
|
See strong::aPrintFunc:: in link::#-print:: below.
|
||
|
|
||
|
argument:: cancelFunc
|
||
|
An optional link::Classes/Function:: to be evaluated if the user presses "Cancel".
|
||
|
|
||
|
|
||
|
INSTANCEMETHODS::
|
||
|
private:: init
|
||
|
|
||
|
subsection:: Printing
|
||
|
|
||
|
METHOD:: showDialog
|
||
|
Shows a Print Dialog to allow the user to configure the printer object. This is asynchronous and the method will return immediately.
|
||
|
When the user presses the "Print" button, strong::aOkFunc:: is called with this QPenPrinter object as argument.
|
||
|
|
||
|
argument:: aOkFunc
|
||
|
A link::Classes/Function:: to be evaluated when the user presses "Print".
|
||
|
|
||
|
argument:: aCancelFunc
|
||
|
An optional link::Classes/Function:: to be evaluated if the user presses "Cancel".
|
||
|
|
||
|
|
||
|
METHOD:: print
|
||
|
This method does the actual printing or PDF export. It evaluates strong::aPrintFunc:: with the printer object as Pen painter target. This QPenPrinter object is passed as the argument.
|
||
|
|
||
|
All the ordinary link::Classes/Pen:: commands can be used inside the function.
|
||
|
|
||
|
argument:: aPrintFunc
|
||
|
A link::Classes/Function:: to be evaluated to draw the graphics.
|
||
|
|
||
|
discussion::
|
||
|
If this method is called without configuring the printer object first, it will print on the default printer with default settings.
|
||
|
|
||
|
This method is typically called from within the strong::aOkFunc:: of link::#-showDialog:: above. After showDialog has configured the printer once, this method can be called multiple times to reuse the last printer configuration.
|
||
|
|
||
|
The point at (0@0) will coincide with the origin of link::#-pageRect::, which is offset by the page margins. So you don't need to translate the Pen.
|
||
|
|
||
|
|
||
|
METHOD:: newPage
|
||
|
Starts a new page. Typically called within the strong::aPrintFunc:: of link::#-print::.
|
||
|
|
||
|
|
||
|
subsection:: Properties
|
||
|
|
||
|
METHOD:: paperRect
|
||
|
Get the paper bounds.
|
||
|
|
||
|
returns:: a link::Classes/Rect::
|
||
|
|
||
|
|
||
|
METHOD:: pageRect
|
||
|
Get the page bounds, which is the printable area and usually smaller than link::#-paperRect:: due to margins.
|
||
|
|
||
|
returns:: a link::Classes/Rect::
|
||
|
|
||
|
discussion::
|
||
|
The strong::origin:: of the Rect is relative to the paper, and will be non-zero due to margins.
|
||
|
|
||
|
|
||
|
METHOD:: pageSize
|
||
|
Get the page size as a Size.
|
||
|
|
||
|
returns:: a link::Classes/Size::
|
||
|
|
||
|
discussion::
|
||
|
This can be used to scale the graphics to fit the page if the bounds of the graphics is known:
|
||
|
code::
|
||
|
x = penPrinter.pageSize.width / bounds.width;
|
||
|
Pen.scale(x,x);
|
||
|
// ... draw stuff here ...
|
||
|
::
|
||
|
|
||
|
subsection:: Page range
|
||
|
The methods below returns the page range selected by the user. Page number starts at 1. When both methods returns 0 it means "print all pages".
|
||
|
|
||
|
METHOD:: fromPage
|
||
|
Get the start page.
|
||
|
|
||
|
returns:: an link::Classes/Integer::
|
||
|
|
||
|
METHOD:: toPage
|
||
|
Get the end page.
|
||
|
|
||
|
returns:: an link::Classes/Integer::
|
||
|
|
||
|
|
||
|
|
||
|
EXAMPLES::
|
||
|
|
||
|
Simple usage:
|
||
|
code::
|
||
|
QPenPrinter.print {
|
||
|
// first page
|
||
|
Pen.moveTo(100@100);
|
||
|
Pen.lineTo(300@300);
|
||
|
Pen.stroke;
|
||
|
|
||
|
// second page
|
||
|
p.newPage;
|
||
|
Pen.addRect(p.pageSize.asRect);
|
||
|
Pen.stroke;
|
||
|
}
|
||
|
::
|
||
|
|
||
|
Keep the QPenPrinter object to save configuration state:
|
||
|
code::
|
||
|
p = QPenPrinter();
|
||
|
::
|
||
|
The code below can then be called multiple times:
|
||
|
code::
|
||
|
p.showDialog {
|
||
|
p.print {
|
||
|
// first page
|
||
|
Pen.moveTo(100@100);
|
||
|
Pen.lineTo(300@300);
|
||
|
Pen.stroke;
|
||
|
|
||
|
// second page
|
||
|
p.newPage;
|
||
|
Pen.addRect(p.pageSize.asRect);
|
||
|
Pen.stroke;
|
||
|
}
|
||
|
} {
|
||
|
"Printing cancelled!".postln;
|
||
|
};
|
||
|
::
|
||
|
|