1325 lines
63 KiB
ObjectPascal
1325 lines
63 KiB
ObjectPascal
{******************************************}
|
|
{ }
|
|
{ FastReport FMX v2.0 }
|
|
{ Linux printer classes }
|
|
{ }
|
|
{ Copyright (c) 1998-2021 }
|
|
{ by Fast Reports Inc. }
|
|
{ }
|
|
{******************************************}
|
|
|
|
unit FMX.Linux.frxPrinter;
|
|
|
|
interface
|
|
|
|
{$I fmx.inc}
|
|
{$I frx.inc}
|
|
|
|
uses
|
|
System.Classes, System.SysUtils, System.Types, System.UITypes,
|
|
System.Variants, FMX.Types, FMX.frxPrinter, FMX.Printer.Linux, FMX.Printer
|
|
{$IFDEF DELPHI19}
|
|
, FMX.Graphics
|
|
{$ENDIF};
|
|
|
|
type
|
|
TPGtkPrinter = Pointer;
|
|
TPGtkPrintBackend = Pointer;
|
|
TPGtkPrintJob = Pointer;
|
|
TPGtkPrintSettings = Pointer;
|
|
TPGtkPageSetup = Pointer;
|
|
TPGtkPaperSize = Pointer;
|
|
TPcairo_surface_t = Pointer;
|
|
TPcairo_t = Pointer;
|
|
|
|
TfrxDevUpdateType = (fdtMargins, fdtPageSize, fdtBin, fdtDuplex, fdtOrientation);
|
|
TfrxDevUpdateTypes = set of TfrxDevUpdateType;
|
|
|
|
TfrxPrinter = class(TfrxCustomPrinter)
|
|
private
|
|
FIsFirst: Boolean;
|
|
FPrinterContext: Pointer;
|
|
FPageSet: TPGtkPageSetup;
|
|
FCustomPaper: TPGtkPaperSize;
|
|
FSettings: TPGtkPrintSettings;
|
|
FJob: TPGtkPrintJob;
|
|
FSurf: TPcairo_surface_t;
|
|
FGTKPapers: TStrings;
|
|
FTerminated: Boolean;
|
|
protected
|
|
procedure ClearGTKPapers;
|
|
public
|
|
constructor Create(const AName: String; ADevice: NativeInt); reintroduce;
|
|
destructor Destroy; override;
|
|
procedure Init; override;
|
|
procedure Abort; override;
|
|
procedure BeginDoc; override;
|
|
procedure BeginPage; override;
|
|
procedure BeginRAWDoc; override;
|
|
procedure EndDoc; override;
|
|
procedure EndPage; override;
|
|
procedure EndRAWDoc; override;
|
|
procedure WriteRAWDoc(const buf: AnsiString); override;
|
|
procedure SetViewParams(APaperSize: Integer;
|
|
APaperWidth, APaperHeight: Extended;
|
|
AOrientation: TPrinterOrientation); override;
|
|
procedure SetPrintParams(APaperSize: Integer;
|
|
APaperWidth, APaperHeight: Extended; AOrientation: TPrinterOrientation;
|
|
ABin, ADuplex, ACopies: Integer); override;
|
|
procedure PropertiesDlg; override;
|
|
function ShowPrintDialog: Boolean; override;
|
|
function UpdateFromDeviceCaps: Boolean;
|
|
function UpdateToDeviceCaps(Params: TfrxDevUpdateTypes): Boolean;
|
|
procedure UpdatePageSettings;
|
|
end;
|
|
|
|
TfrxPrinters = class(TfrxCustomPrinters)
|
|
protected
|
|
function GetDefaultPrinter: String; override;
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
procedure FillPrinters; override;
|
|
end;
|
|
|
|
function ActualfrxPrinterClass: TfrxCustomPrintersClass;
|
|
|
|
implementation
|
|
|
|
uses
|
|
FMX.frxUtils, FMX.frxRes, FMX.frxFMX, System.Math.Vectors, System.Math,
|
|
System.AnsiStrings, FMX.Canvas.Linux, FMX.frxCanvas.Linux, FMX.frxClass, FMX.Forms, System.Diagnostics;
|
|
|
|
type
|
|
TPaperInfo = { packed } record
|
|
Typ: Integer;
|
|
Name: String;
|
|
X, Y: Integer;
|
|
end;
|
|
|
|
TGList = record
|
|
pData: Pointer;
|
|
pNext: ^TGList;
|
|
pPrev: ^TGList;
|
|
end;
|
|
|
|
TPGList = ^TGList;
|
|
TPGtkWidget = Pointer;
|
|
TPGtkPrintUnixDialog = Pointer;
|
|
|
|
TGConnectFlags = (G_CONNECT_AFTER, G_CONNECT_SWAPPED);
|
|
TGtkPageOrientation = (GTK_PAGE_ORIENTATION_PORTRAIT,
|
|
GTK_PAGE_ORIENTATION_LANDSCAPE, GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT,
|
|
GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE);
|
|
|
|
TGtkPrintDuplex = (GTK_PRINT_DUPLEX_SIMPLEX, GTK_PRINT_DUPLEX_HORIZONTAL,
|
|
GTK_PRINT_DUPLEX_VERTICAL);
|
|
|
|
TGtkUnit = (GTK_UNIT_NONE, GTK_UNIT_POINTS, GTK_UNIT_INCH, GTK_UNIT_MM);
|
|
|
|
TCairo_surface_type = (
|
|
|
|
CAIRO_SURFACE_TYPE_IMAGE, CAIRO_SURFACE_TYPE_PDF, CAIRO_SURFACE_TYPE_PS,
|
|
CAIRO_SURFACE_TYPE_XLIB, CAIRO_SURFACE_TYPE_XCB, CAIRO_SURFACE_TYPE_GLITZ,
|
|
CAIRO_SURFACE_TYPE_QUARTZ, CAIRO_SURFACE_TYPE_WIN32,
|
|
CAIRO_SURFACE_TYPE_BEOS, CAIRO_SURFACE_TYPE_DIRECTFB,
|
|
CAIRO_SURFACE_TYPE_SVG, CAIRO_SURFACE_TYPE_OS2,
|
|
CAIRO_SURFACE_TYPE_WIN32_PRINTING, CAIRO_SURFACE_TYPE_QUARTZ_IMAGE,
|
|
CAIRO_SURFACE_TYPE_SCRIPT, CAIRO_SURFACE_TYPE_QT,
|
|
CAIRO_SURFACE_TYPE_RECORDING, CAIRO_SURFACE_TYPE_VG, CAIRO_SURFACE_TYPE_GL,
|
|
CAIRO_SURFACE_TYPE_DRM, CAIRO_SURFACE_TYPE_TEE, CAIRO_SURFACE_TYPE_XML,
|
|
CAIRO_SURFACE_TYPE_SKIA, CAIRO_SURFACE_TYPE_SUBSURFACE);
|
|
|
|
TPGtkPrintJobCompleteFunc = procedure(print_job: TPGtkPrintJob;
|
|
user_data: Pointer; error: Pointer); cdecl;
|
|
TPGDestroyNotify = procedure(pData: Pointer); cdecl;
|
|
|
|
TPGtkPrinterFunc = function(printer: TPGtkPrinter; pData: Pointer): LongBool; cdecl;
|
|
TPDetails_acquiredFunc = procedure(printer: TpGtkPrinter; success: LongBool; user_data: Pointer); cdecl;
|
|
|
|
Tfn_g_free = procedure(prt: Pointer); cdecl;
|
|
Tfn_g_list_free = procedure(prt: Pointer); cdecl;
|
|
|
|
Tfn_cairo_surface_finish = procedure(surface: TPcairo_surface_t); cdecl;
|
|
|
|
Tfn_cairo_create = function(target: TPcairo_surface_t): TPcairo_t; cdecl;
|
|
Tfn_cairo_destroy = procedure(cr: TPcairo_t); cdecl;
|
|
Tfn_cairo_show_page = procedure(cr: TPcairo_t); cdecl;
|
|
|
|
Tfn_cairo_surface_get_type = function(surface: TPcairo_surface_t): TCairo_surface_type; cdecl;
|
|
Tfn_cairo_ps_surface_set_size = procedure(surface: TPcairo_surface_t; width_in_points: double; height_in_points: double); cdecl;
|
|
Tfn_cairo_ps_surface_dsc_begin_setup = procedure(surface: TPcairo_surface_t); cdecl;
|
|
Tfn_cairo_ps_surface_dsc_begin_page_setup = procedure(surface: TPcairo_surface_t); cdecl;
|
|
Tfn_cairo_ps_surface_dsc_comment = procedure(surface: TPcairo_surface_t; const comment: PAnsiChar); cdecl;
|
|
Tfn_cairo_pdf_surface_set_size = procedure(surface: TPcairo_surface_t; width_in_points: double; height_in_points: double); cdecl;
|
|
|
|
Tfn_g_signal_connect_data = function(instance: Pointer; const detailed_signal: PAnsiChar; c_handler: Pointer; data: Pointer; destroy_data: Pointer; connect_flags: TGConnectFlags): UInt32; cdecl;
|
|
Tfn_g_object_unref = procedure(obj: Pointer); cdecl;
|
|
Tfn_g_object_ref = function(obj: Pointer): Pointer; cdecl;
|
|
Tfn_gtk_print_job_new = function(const title: PAnsiChar; Printer: TPGtkPrinter; settings: TPGtkPrintSettings; page_setup: TPGtkPageSetup): TPGtkPrintJob; cdecl;
|
|
Tfn_gtk_print_job_get_surface = function(job: TPGtkPrintJob; error: Pointer): TPcairo_surface_t; cdecl;
|
|
Tfn_gtk_print_job_send = procedure(job: TPGtkPrintJob; callback: TPGtkPrintJobCompleteFunc; user_data: Pointer; dnotify: TPGDestroyNotify); cdecl;
|
|
Tfn_gtk_printer_get_default_page_size = function(Printer: TPGtkPrinter): TPGtkPageSetup; cdecl;
|
|
Tfn_gtk_print_job_get_settings = function(job: TPGtkPrintJob): TPGtkPrintSettings; cdecl;
|
|
Tfn_gtk_enumerate_printers = procedure(GtkPrinterFunc: TPGtkPrinterFunc; data: Pointer; destroy: TPGDestroyNotify; wait: LongBool ); cdecl;
|
|
Tfn_gtk_printer_list_papers = function(printer: TPGtkPrinter): TPGList; cdecl;
|
|
Tfn_gtk_printer_has_details = function(printer: TPGtkPrinter): LongBool; cdecl;
|
|
Tfn_gtk_printer_request_details = procedure(printer: TPGtkPrinter); cdecl;
|
|
Tfn_gtk_printer_get_name = function(printer: TPGtkPrinter): PAnsiChar; cdecl;
|
|
Tfn_gtk_printer_is_default = function(printer: TPGtkPrinter): LongBool; cdecl;
|
|
|
|
// Tfn_gtk_print_context_get_page_setup = function(context: TPGtkPrintContext): TPGtkPageSetup;
|
|
|
|
Tfn_gtk_print_unix_dialog_new = function(const title: PAnsiChar; parent: TPGtkWidget): TPGtkPrintUnixDialog; cdecl;
|
|
Tfn_gtk_print_unix_dialog_set_page_setup = procedure(dialog: TPGtkPrintUnixDialog; page_setup: TPGtkPageSetup); cdecl;
|
|
Tfn_gtk_print_unix_dialog_get_page_setup = function(dialog: TPGtkPrintUnixDialog): TPGtkPageSetup; cdecl;
|
|
Tfn_gtk_print_unix_dialog_set_settings = procedure(dialog: TPGtkPrintUnixDialog; settings: TPGtkPrintSettings); cdecl;
|
|
Tfn_gtk_print_unix_dialog_get_settings = function(dialog: TPGtkPrintUnixDialog): TPGtkPrintSettings; cdecl;
|
|
Tfn_gtk_dialog_run = function(dialog: TPGtkPrintUnixDialog): Integer; cdecl;
|
|
|
|
{ page_setup }
|
|
Tfn_gtk_page_setup_new = function: TPGtkPageSetup; cdecl;
|
|
Tfn_gtk_page_setup_copy = function(other: TPGtkPageSetup): TPGtkPageSetup; cdecl;
|
|
|
|
Tfn_gtk_page_setup_get_paper_size = function(setup: TPGtkPageSetup): TPGtkPaperSize; cdecl;
|
|
Tfn_gtk_page_setup_set_paper_size = procedure(setup: TPGtkPageSetup; size: TPGtkPaperSize); cdecl;
|
|
Tfn_gtk_page_setup_get_orientation = function(setup: TPGtkPageSetup): TGtkPageOrientation; cdecl;
|
|
Tfn_gtk_page_setup_set_orientation = procedure(setup: TPGtkPageSetup; orientation: TGtkPageOrientation); cdecl;
|
|
Tfn_gtk_page_setup_get_top_margin = function(setup: TPGtkPageSetup; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_page_setup_set_top_margin = procedure(setup: TPGtkPageSetup; margin: double; units: TGtkUnit); cdecl;
|
|
Tfn_gtk_page_setup_get_bottom_margin = function(setup: TPGtkPageSetup; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_page_setup_set_bottom_margin = procedure(setup: TPGtkPageSetup; margin: double; units: TGtkUnit); cdecl;
|
|
Tfn_gtk_page_setup_get_left_margin = function(setup: TPGtkPageSetup; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_page_setup_set_left_margin = procedure(setup: TPGtkPageSetup; margin: double; units: TGtkUnit); cdecl;
|
|
Tfn_gtk_page_setup_get_right_margin = function(setup: TPGtkPageSetup; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_page_setup_set_right_margin = procedure(setup: TPGtkPageSetup; margin: double; units: TGtkUnit); cdecl;
|
|
Tfn_gtk_page_setup_get_paper_width = function(setup: TPGtkPageSetup; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_page_setup_get_paper_height = function(setup: TPGtkPageSetup; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_page_setup_get_page_width = function(setup: TPGtkPageSetup; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_page_setup_get_page_height = function(setup: TPGtkPageSetup; units: TGtkUnit): double; cdecl;
|
|
{ paper_size }
|
|
Tfn_gtk_paper_size_new = function(const Name: PAnsiChar): TPGtkPaperSize; cdecl;
|
|
Tfn_gtk_paper_size_new_from_ppd = function(const ppd_name: PAnsiChar; const ppd_display_name: PAnsiChar; width: double; height: double) : TPGtkPaperSize; cdecl;
|
|
Tfn_gtk_paper_size_new_from_ipp = function(const ipp_name: PAnsiChar; width: double; height: double): TPGtkPaperSize; cdecl;
|
|
Tfn_gtk_paper_size_new_custom = function(const Name: PAnsiChar; const display_name: PAnsiChar; width: double; height: double; units: TGtkUnit) : TPGtkPaperSize; cdecl;
|
|
Tfn_gtk_paper_size_copy = function(other: TPGtkPaperSize) : TPGtkPaperSize; cdecl;
|
|
Tfn_gtk_paper_size_free = procedure(size: TPGtkPaperSize); cdecl;
|
|
Tfn_gtk_paper_size_is_equal = function(size1: TPGtkPaperSize; size2: TPGtkPaperSize): LongBool; cdecl;
|
|
// GList *Tfn_gtk_paper_size_get_paper_sizes (gboolean include_custom);
|
|
Tfn_gtk_paper_size_get_name = function(size: TPGtkPaperSize): PAnsiChar; cdecl;
|
|
Tfn_gtk_paper_size_get_display_name = function(size: TPGtkPaperSize): PAnsiChar; cdecl;
|
|
Tfn_gtk_paper_size_get_ppd_name = function(size: TPGtkPaperSize): PAnsiChar; cdecl;
|
|
Tfn_gtk_paper_size_get_width = function(size: TPGtkPaperSize; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_paper_size_get_height = function(size: TPGtkPaperSize; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_paper_size_is_custom = function(size: TPGtkPaperSize): LongBool; cdecl;
|
|
Tfn_gtk_paper_size_is_ipp = function(size: TPGtkPaperSize): LongBool; cdecl;
|
|
Tfn_gtk_paper_size_set_size = procedure(size: TPGtkPaperSize; width: double; height: double; units: TGtkUnit); cdecl;
|
|
Tfn_gtk_paper_size_get_default_top_margin = function(size: TPGtkPaperSize; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_paper_size_get_default_bottom_margin = function(size: TPGtkPaperSize; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_paper_size_get_default_left_margin = function(size: TPGtkPaperSize; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_paper_size_get_default_right_margin = function(size: TPGtkPaperSize; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_paper_size_get_default = function: PAnsiChar; cdecl;
|
|
{ print_settings }
|
|
Tfn_gtk_print_settings_new = function: TPGtkPrintSettings; cdecl;
|
|
Tfn_gtk_print_settings_get_printer = function(settings: TPGtkPrintSettings): PAnsiChar; cdecl;
|
|
Tfn_gtk_print_settings_set_printer = procedure(settings: TPGtkPrintSettings; const Printer: PAnsiChar); cdecl;
|
|
Tfn_gtk_print_settings_get_orientation = function(settings: TPGtkPrintSettings): TGtkPageOrientation; cdecl;
|
|
Tfn_gtk_print_settings_set_orientation = procedure(settings: TPGtkPrintSettings; orientation: TGtkPageOrientation); cdecl;
|
|
Tfn_gtk_print_settings_get_paper_size = function(settings: TPGtkPrintSettings): TPGtkPaperSize; cdecl;
|
|
Tfn_gtk_print_settings_set_paper_size = procedure(settings: TPGtkPrintSettings; paper_size: TPGtkPaperSize); cdecl;
|
|
Tfn_gtk_print_settings_get_paper_width = function(settings: TPGtkPrintSettings; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_print_settings_set_paper_width = procedure(settings: TPGtkPrintSettings; width: double; units: TGtkUnit); cdecl;
|
|
Tfn_gtk_print_settings_get_paper_height = function(settings: TPGtkPrintSettings; units: TGtkUnit): double; cdecl;
|
|
Tfn_gtk_print_settings_set_paper_height = procedure(settings: TPGtkPrintSettings; height: double; units: TGtkUnit); cdecl;
|
|
Tfn_gtk_print_settings_get_collate = function(settings: TPGtkPrintSettings): LongBool; cdecl;
|
|
Tfn_gtk_print_settings_set_collate = procedure(settings: TPGtkPrintSettings; collate: LongBool); cdecl;
|
|
Tfn_gtk_print_settings_get_duplex = function(settings: TPGtkPrintSettings): TGtkPrintDuplex; cdecl;
|
|
Tfn_gtk_print_settings_set_duplex = procedure(settings: TPGtkPrintSettings; duplex: TGtkPrintDuplex); cdecl;
|
|
Tfn_gtk_print_settings_get_n_copies = function(settings: TPGtkPrintSettings): Integer; cdecl;
|
|
Tfn_gtk_print_settings_set_n_copies = procedure(settings: TPGtkPrintSettings; num_copies: Integer); cdecl;
|
|
Tfn_gtk_print_settings_get_resolution_x = function(settings: TPGtkPrintSettings): Integer; cdecl;
|
|
Tfn_gtk_print_settings_get_resolution_y = function(settings: TPGtkPrintSettings): Integer; cdecl;
|
|
Tfn_gtk_print_settings_get_default_source = function(settings: TPGtkPrintSettings): PAnsiChar; cdecl;
|
|
Tfn_gtk_print_settings_set_default_source = procedure(settings: TPGtkPrintSettings; const default_source: PAnsiChar); cdecl;
|
|
Tfn_gtk_print_settings_get_media_type = function(settings: TPGtkPrintSettings): PAnsiChar; cdecl;
|
|
Tfn_gtk_print_settings_set_media_type = procedure(settings: TPGtkPrintSettings; const media_type: PAnsiChar); cdecl;
|
|
Tfn_gtk_print_settings_get_output_bin = function(settings: TPGtkPrintSettings): PAnsiChar; cdecl;
|
|
Tfn_gtk_print_settings_set_output_bin = procedure(settings: TPGtkPrintSettings; output_bin: PAnsiChar); cdecl;
|
|
|
|
const
|
|
PAPERCOUNT = 66;
|
|
PaperInfo: array[0..PAPERCOUNT - 1] of TPaperInfo = (
|
|
(Typ:1; Name: ''; X:2159; Y:2794),
|
|
(Typ:2; Name: ''; X:2159; Y:2794),
|
|
(Typ:3; Name: ''; X:2794; Y:4318),
|
|
(Typ:4; Name: ''; X:4318; Y:2794),
|
|
(Typ:5; Name: ''; X:2159; Y:3556),
|
|
(Typ:6; Name: ''; X:1397; Y:2159),
|
|
(Typ:7; Name: ''; X:1842; Y:2667),
|
|
(Typ:8; Name: ''; X:2970; Y:4200),
|
|
(Typ:9; Name: ''; X:2100; Y:2970),
|
|
(Typ:10; Name: ''; X:2100; Y:2970),
|
|
(Typ:11; Name: ''; X:1480; Y:2100),
|
|
(Typ:12; Name: ''; X:2500; Y:3540),
|
|
(Typ:13; Name: ''; X:1820; Y:2570),
|
|
(Typ:14; Name: ''; X:2159; Y:3302),
|
|
(Typ:15; Name: ''; X:2150; Y:2750),
|
|
(Typ:16; Name: ''; X:2540; Y:3556),
|
|
(Typ:17; Name: ''; X:2794; Y:4318),
|
|
(Typ:18; Name: ''; X:2159; Y:2794),
|
|
(Typ:19; Name: ''; X:984; Y:2254),
|
|
(Typ:20; Name: ''; X:1048; Y:2413),
|
|
(Typ:21; Name: ''; X:1143; Y:2635),
|
|
(Typ:22; Name: ''; X:1207; Y:2794),
|
|
(Typ:23; Name: ''; X:1270; Y:2921),
|
|
(Typ:24; Name: ''; X:4318; Y:5588),
|
|
(Typ:25; Name: ''; X:5588; Y:8636),
|
|
(Typ:26; Name: ''; X:8636; Y:11176),
|
|
(Typ:27; Name: ''; X:1100; Y:2200),
|
|
(Typ:28; Name: ''; X:1620; Y:2290),
|
|
(Typ:29; Name: ''; X:3240; Y:4580),
|
|
(Typ:30; Name: ''; X:2290; Y:3240),
|
|
(Typ:31; Name: ''; X:1140; Y:1620),
|
|
(Typ:32; Name: ''; X:1140; Y:2290),
|
|
(Typ:33; Name: ''; X:2500; Y:3530),
|
|
(Typ:34; Name: ''; X:1760; Y:2500),
|
|
(Typ:35; Name: ''; X:1760; Y:1250),
|
|
(Typ:36; Name: ''; X:1100; Y:2300),
|
|
(Typ:37; Name: ''; X:984; Y:1905),
|
|
(Typ:38; Name: ''; X:920; Y:1651),
|
|
(Typ:39; Name: ''; X:3778; Y:2794),
|
|
(Typ:40; Name: ''; X:2159; Y:3048),
|
|
(Typ:41; Name: ''; X:2159; Y:3302),
|
|
(Typ:42; Name: ''; X:2500; Y:3530),
|
|
(Typ:43; Name: ''; X:1000; Y:1480),
|
|
(Typ:44; Name: ''; X:2286; Y:2794),
|
|
(Typ:45; Name: ''; X:2540; Y:2794),
|
|
(Typ:46; Name: ''; X:3810; Y:2794),
|
|
(Typ:47; Name: ''; X:2200; Y:2200),
|
|
(Typ:50; Name: ''; X:2355; Y:3048),
|
|
(Typ:51; Name: ''; X:2355; Y:3810),
|
|
(Typ:52; Name: ''; X:2969; Y:4572),
|
|
(Typ:53; Name: ''; X:2354; Y:3223),
|
|
(Typ:54; Name: ''; X:2101; Y:2794),
|
|
(Typ:55; Name: ''; X:2100; Y:2970),
|
|
(Typ:56; Name: ''; X:2355; Y:3048),
|
|
(Typ:57; Name: ''; X:2270; Y:3560),
|
|
(Typ:58; Name: ''; X:3050; Y:4870),
|
|
(Typ:59; Name: ''; X:2159; Y:3223),
|
|
(Typ:60; Name: ''; X:2100; Y:3300),
|
|
(Typ:61; Name: ''; X:1480; Y:2100),
|
|
(Typ:62; Name: ''; X:1820; Y:2570),
|
|
(Typ:63; Name: ''; X:3220; Y:4450),
|
|
(Typ:64; Name: ''; X:1740; Y:2350),
|
|
(Typ:65; Name: ''; X:2010; Y:2760),
|
|
(Typ:66; Name: ''; X:4200; Y:5940),
|
|
(Typ:67; Name: ''; X:2970; Y:4200),
|
|
(Typ:68; Name: ''; X:3220; Y:4450));
|
|
|
|
type
|
|
TPaperInfoLCL = {packed} record
|
|
Name: String;
|
|
W, H: Extended;
|
|
end;
|
|
|
|
TfrxInfoLinkData = packed record
|
|
Num : Integer;
|
|
Name: AnsiString;
|
|
end;
|
|
|
|
const
|
|
LCLPaperCount = 119;
|
|
CmPrIn = 2.54;
|
|
PtPrCm = frxDefPPIUnits/CmPrIn;
|
|
PtPrmm = PtPrCm/10;
|
|
LCLPaperInfo : array[0..LCLPAPERCOUNT-1] of TPaperInfoLCL =
|
|
((Name: 'Letter 8 1/2 x 11 in'; W: 8.5 * frxDefPPIUnits; H: 11 * frxDefPPIUnits),
|
|
(Name: 'Letter Small 8 1/2 x 11 in'; W: 8.5 * frxDefPPIUnits; H: 11 * frxDefPPIUnits),
|
|
(Name: 'Tabloid 11 x 17 in'; W: 11 * frxDefPPIUnits; H: 17 * frxDefPPIUnits),
|
|
(Name: 'Ledger 17 x 11 in'; W: 17 * frxDefPPIUnits; H: 11 * frxDefPPIUnits),
|
|
(Name: 'Legal 8 1/2 x 14 in'; W: 8.5 * frxDefPPIUnits; H: 14 * frxDefPPIUnits),
|
|
(Name: 'Statement 5 1/2 x 8 1/2 in'; W: 5.5 * frxDefPPIUnits; H: 8.5 * frxDefPPIUnits),
|
|
(Name: 'Executive 7 1/4 x 10 1/2 in'; W: 7.25 * frxDefPPIUnits; H: 10.5 * frxDefPPIUnits),
|
|
(Name: 'A3 297 x 420 mm'; W: 297 * PtPrmm; H: 420 * PtPrmm),
|
|
(Name: 'A4 210 x 297 mm'; W: 210 * PtPrmm; H: 297 * PtPrmm),
|
|
(Name: 'A4 Small 210 x 297 mm'; W: 210 * PtPrmm; H: 297 * PtPrmm),
|
|
(Name: 'A5 148 x 210 mm'; W: 148 * PtPrmm; H: 210 * PtPrmm),
|
|
(Name: 'B4 (JIS) 250 x 354 mm'; W: 250 * PtPrmm; H: 354 * PtPrmm),
|
|
(Name: 'B5 (JIS) 182 x 257 mm'; W: 182 * PtPrmm; H: 257 * PtPrmm),
|
|
(Name: 'Folio 8 1/2 x 13 in'; W: 8.5 * frxDefPPIUnits; H: 13 * frxDefPPIUnits),
|
|
(Name: 'Quarto 215 x 275 mm'; W: 215 * PtPrmm; H: 275 * PtPrmm),
|
|
(Name: '10x14 in'; W: 10 * frxDefPPIUnits; H: 14 * frxDefPPIUnits),
|
|
(Name: '11x17 in'; W: 11 * frxDefPPIUnits; H: 17 * frxDefPPIUnits),
|
|
(Name: 'Note 8 1/2 x 11 in'; W: 8.5 * frxDefPPIUnits; H: 11 * frxDefPPIUnits),
|
|
(Name: 'Envelope #9 3 7/8 x 8 7/8'; W: 3 * 7 / 8 * frxDefPPIUnits; H: 8 * 7 / 8 * frxDefPPIUnits),
|
|
(Name: 'Envelope #10 4 1/8 x 9 1/2'; W: 3 * 1 / 8 * frxDefPPIUnits; H: 9.5 * frxDefPPIUnits),
|
|
(Name: 'Envelope #11 4 1/2 x 10 3/8'; W: 4.5 * frxDefPPIUnits; H: 10 * 3 / 8 * frxDefPPIUnits),
|
|
(Name: 'Envelope #12 4 3/4 x 11'; W: 4.75 * frxDefPPIUnits; H: 11 * frxDefPPIUnits),
|
|
(Name: 'Envelope #14 5 x 11 1/2'; W: 5 * frxDefPPIUnits; H: 11.5 * frxDefPPIUnits),
|
|
(Name: 'C size sheet 17 x 22 in'; W: 17 * frxDefPPIUnits; H: 22 * frxDefPPIUnits),
|
|
(Name: 'D size sheet 22 x 34 in'; W: 22 * frxDefPPIUnits; H: 34 * frxDefPPIUnits),
|
|
(Name: 'E size sheet 34 x 44 in'; W: 34 * frxDefPPIUnits; H: 44 * frxDefPPIUnits),
|
|
(Name: 'Envelope DL 110 x 220mm'; W: 110 * PtPrmm; H: 220 * PtPrmm),
|
|
(Name: 'Envelope C5 162 x 229 mm'; W: 162 * PtPrmm; H: 229 * PtPrmm),
|
|
(Name: 'Envelope C3 324 x 458 mm'; W: 324 * PtPrmm; H: 458 * PtPrmm),
|
|
(Name: 'Envelope C4 229 x 324 mm'; W: 229 * PtPrmm; H: 324 * PtPrmm),
|
|
(Name: 'Envelope C6 114 x 162 mm'; W: 114 * PtPrmm; H: 162 * PtPrmm),
|
|
(Name: 'Envelope C65 114 x 229 mm'; W: 114 * PtPrmm; H: 229 * PtPrmm),
|
|
(Name: 'Envelope B4 250 x 353 mm'; W: 250 * PtPrmm; H: 353 * PtPrmm),
|
|
(Name: 'Envelope B5 176 x 250 mm'; W: 176 * PtPrmm; H: 250 * PtPrmm),
|
|
(Name: 'Envelope B6 176 x 125 mm'; W: 176 * PtPrmm; H: 125 * PtPrmm),
|
|
(Name: 'Envelope 110 x 230 mm'; W: 110 * PtPrmm; H: 230 * PtPrmm),
|
|
(Name: 'Envelope Monarch 3 7/8 x 7 1/2 in'; W: 3 * 7 / 8 * frxDefPPIUnits; H: 7.5 * frxDefPPIUnits),
|
|
(Name: '6 34 Envelope 3 5/8 x 6 1/2 in'; W: 3 * 5 / 8 * frxDefPPIUnits; H: 6.5 * frxDefPPIUnits),
|
|
(Name: 'US Std Fanfold 14 7/8 x 11 in'; W: 14 * 7 / 8 * frxDefPPIUnits; H: 11 * frxDefPPIUnits),
|
|
(Name: 'German Std Fanfold 8 1/2 x 12 in'; W: 8.5 * frxDefPPIUnits; H: 12 * frxDefPPIUnits),
|
|
(Name: 'German Legal Fanfold 8 1/2 x 13 in'; W: 8.5 * frxDefPPIUnits; H: 13 * frxDefPPIUnits),
|
|
(Name: 'B4 (ISO) 250 x 353 mm'; W: 250 * PtPrmm; H: 353 * PtPrmm),
|
|
(Name: 'Japanese Postcard 100 x 148 mm'; W: 100 * PtPrmm; H: 148 * PtPrmm),
|
|
(Name: '9 x 11 in'; W: 9 * frxDefPPIUnits; H: 11 * frxDefPPIUnits),
|
|
(Name: '10 x 11 in'; W: 10 * frxDefPPIUnits; H: 11 * frxDefPPIUnits),
|
|
(Name: '15 x 11 in'; W: 15 * frxDefPPIUnits; H: 11 * frxDefPPIUnits),
|
|
(Name: 'Envelope Invite 220 x 220 mm'; W: 220 * PtPrmm; H: 220 * PtPrmm),
|
|
(Name: 'RESERVED--DO NOT USE'; W: 0; H: 0),
|
|
(Name: 'RESERVED--DO NOT USE'; W: 0; H: 0),
|
|
(Name: 'Letter Extra 9 \275 x 12 in'; W: 9.275 * frxDefPPIUnits; H: 12 * frxDefPPIUnits),
|
|
(Name: 'Legal Extra 9 \275 x 15 in'; W: 9.275 * frxDefPPIUnits; H: 15 * frxDefPPIUnits),
|
|
(Name: 'Tabloid Extra 11.69 x 18 in'; W: 11.69 * frxDefPPIUnits; H: 18 * frxDefPPIUnits),
|
|
(Name: 'A4 Extra 9.27 x 12.69 in'; W: 9.27 * frxDefPPIUnits; H: 12.69 * frxDefPPIUnits),
|
|
(Name: 'Letter Transverse 8 \275 x 11 in'; W: 8.275 * frxDefPPIUnits; H: 11 * frxDefPPIUnits),
|
|
(Name: 'A4 Transverse 210 x 297 mm'; W: 210 * PtPrmm; H: 297 * PtPrmm),
|
|
(Name: 'Letter Extra Transverse 9\275 x 12 in'; W: 9.275 * frxDefPPIUnits; H: 12 * frxDefPPIUnits),
|
|
(Name: 'SuperASuperAA4 227 x 356 mm'; W: 227 * PtPrmm; H: 356 * PtPrmm),
|
|
(Name: 'SuperBSuperBA3 305 x 487 mm'; W: 305 * PtPrmm; H: 487 * PtPrmm),
|
|
(Name: 'Letter Plus 8.5 x 12.69 in'; W: 8.5 * frxDefPPIUnits; H: 12.69 * frxDefPPIUnits),
|
|
(Name: 'A4 Plus 210 x 330 mm'; W: 210 * PtPrmm; H: 330 * PtPrmm),
|
|
(Name: 'A5 Transverse 148 x 210 mm'; W: 148 * PtPrmm; H: 210 * PtPrmm),
|
|
(Name: 'B5 (JIS) Transverse 182 x 257 mm'; W: 182 * PtPrmm; H: 257 * PtPrmm),
|
|
(Name: 'A3 Extra 322 x 445 mm'; W: 322 * PtPrmm; H: 445 * PtPrmm),
|
|
(Name: 'A5 Extra 174 x 235 mm'; W: 174 * PtPrmm; H: 235 * PtPrmm),
|
|
(Name: 'B5 (ISO) Extra 201 x 276 mm'; W: 201 * PtPrmm; H: 276 * PtPrmm),
|
|
(Name: 'A2 420 x 594 mm'; W: 420 * PtPrmm; H: 594 * PtPrmm),
|
|
(Name: 'A3 Transverse 297 x 420 mm'; W: 297 * PtPrmm; H: 420 * PtPrmm),
|
|
(Name: 'A3 Extra Transverse 322 x 445 mm'; W: 322 * PtPrmm; H: 445 * PtPrmm),
|
|
(Name: 'Japanese Double Postcard 200 x 148 mm'; W: 200 * PtPrmm; H: 148 * PtPrmm),
|
|
(Name: 'A6 105 x 148 mm'; W: 105 * PtPrmm; H: 148 * PtPrmm),
|
|
(Name: 'Japanese Envelope Kaku #2'; W: 0; H: 0),
|
|
(Name: 'Japanese Envelope Kaku #3'; W: 0; H: 0),
|
|
(Name: 'Japanese Envelope Chou #3'; W: 0; H: 0),
|
|
(Name: 'Japanese Envelope Chou #4'; W: 0; H: 0),
|
|
(Name: 'Letter Rotated 11 x 8 1/2 11 in'; W: 11 * frxDefPPIUnits; H: 8.5 * frxDefPPIUnits),
|
|
(Name: 'A3 Rotated 420 x 297 mm'; W: 420 * PtPrmm; H: 297 * PtPrmm),
|
|
(Name: 'A4 Rotated 297 x 210 mm'; W: 297 * PtPrmm; H: 210 * PtPrmm),
|
|
(Name: 'A5 Rotated 210 x 148 mm'; W: 210 * PtPrmm; H: 148 * PtPrmm),
|
|
(Name: 'B4 (JIS) Rotated 364 x 257 mm'; W: 364 * PtPrmm; H: 257 * PtPrmm),
|
|
(Name: 'B5 (JIS) Rotated 257 x 182 mm'; W: 257 * PtPrmm; H: 182 * PtPrmm),
|
|
(Name: 'Japanese Postcard Rotated 148 x 100 mm'; W: 148 * PtPrmm; H: 100 * PtPrmm),
|
|
(Name: 'Double Japanese Postcard Rotated 148 x 200 mm'; W: 148 * PtPrmm; H: 200 * PtPrmm),
|
|
(Name: 'A6 Rotated 148 x 105 mm'; W: 148 * PtPrmm; H: 105 * PtPrmm),
|
|
(Name: 'Japanese Envelope Kaku #2 Rotated'; W: 0; H: 0),
|
|
(Name: 'Japanese Envelope Kaku #3 Rotated'; W: 0; H: 0),
|
|
(Name: 'Japanese Envelope Chou #3 Rotated'; W: 0; H: 0),
|
|
(Name: 'Japanese Envelope Chou #4 Rotated'; W: 0; H: 0),
|
|
(Name: 'B6 (JIS) 128 x 182 mm'; W: 128 * PtPrmm; H: 182 * PtPrmm),
|
|
(Name: 'B6 (JIS) Rotated 182 x 128 mm'; W: 182 * PtPrmm; H: 128 * PtPrmm),
|
|
(Name: '12 x 11 in'; W: 12 * frxDefPPIUnits; H: 11 * frxDefPPIUnits),
|
|
(Name: 'Japanese Envelope You #4'; W: 0; H: 0),
|
|
(Name: 'Japanese Envelope You #4 Rotated'; W: 0; H: 0),
|
|
(Name: 'PRC 16K 146 x 215 mm'; W: 146 * PtPrmm; H: 215 * PtPrmm),
|
|
(Name: 'PRC 32K 97 x 151 mm'; W: 97 * PtPrmm; H: 151 * PtPrmm),
|
|
(Name: 'PRC 32K(Big) 97 x 151 mm'; W: 97 * PtPrmm; H: 151 * PtPrmm),
|
|
(Name: 'PRC Envelope #1 102 x 165 mm'; W: 102 * PtPrmm; H: 165 * PtPrmm),
|
|
(Name: 'PRC Envelope #2 102 x 176 mm'; W: 102 * PtPrmm; H: 176 * PtPrmm),
|
|
(Name: 'PRC Envelope #3 125 x 176 mm'; W: 125 * PtPrmm; H: 176 * PtPrmm),
|
|
(Name: 'PRC Envelope #4 110 x 208 mm'; W: 110 * PtPrmm; H: 208 * PtPrmm),
|
|
(Name: 'PRC Envelope #5 110 x 220 mm'; W: 110 * PtPrmm; H: 220 * PtPrmm),
|
|
(Name: 'PRC Envelope #6 120 x 230 mm'; W: 120 * PtPrmm; H: 230 * PtPrmm),
|
|
(Name: 'PRC Envelope #7 160 x 230 mm'; W: 160 * PtPrmm; H: 230 * PtPrmm),
|
|
(Name: 'PRC Envelope #8 120 x 309 mm'; W: 120 * PtPrmm; H: 309 * PtPrmm),
|
|
(Name: 'PRC Envelope #9 229 x 324 mm'; W: 229 * PtPrmm; H: 324 * PtPrmm),
|
|
(Name: 'PRC Envelope #10 324 x 458 mm'; W: 324 * PtPrmm; H: 458 * PtPrmm),
|
|
(Name: 'PRC 16K Rotated 215 x 146 mm'; W: 215 * PtPrmm; H: 146 * PtPrmm),
|
|
(Name: 'PRC 32K Rotated 151 x 97 mm'; W: 151 * PtPrmm; H: 97 * PtPrmm),
|
|
(Name: 'PRC 32K(Big) Rotated 151 x 97 mm'; W: 151 * PtPrmm; H: 97 * PtPrmm),
|
|
(Name: 'PRC Envelope #1 Rotated 165 x 102 mm'; W: 165 * PtPrmm; H: 102 * PtPrmm),
|
|
(Name: 'PRC Envelope #2 Rotated 176 x 102 mm'; W: 176 * PtPrmm; H: 102 * PtPrmm),
|
|
(Name: 'PRC Envelope #3 Rotated 176 x 125 mm'; W: 176 * PtPrmm; H: 125 * PtPrmm),
|
|
(Name: 'PRC Envelope #4 Rotated 208 x 110 mm'; W: 208 * PtPrmm; H: 110 * PtPrmm),
|
|
(Name: 'PRC Envelope #5 Rotated 220 x 110 mm'; W: 220 * PtPrmm; H: 110 * PtPrmm),
|
|
(Name: 'PRC Envelope #6 Rotated 230 x 120 mm'; W: 230 * PtPrmm; H: 120 * PtPrmm),
|
|
(Name: 'PRC Envelope #7 Rotated 230 x 160 mm'; W: 230 * PtPrmm; H: 160 * PtPrmm),
|
|
(Name: 'PRC Envelope #8 Rotated 309 x 120 mm'; W: 309 * PtPrmm; H: 120 * PtPrmm),
|
|
(Name: 'PRC Envelope #9 Rotated 324 x 229 mm'; W: 324 * PtPrmm; H: 229 * PtPrmm),
|
|
(Name: 'PRC Envelope #10 Rotated 458 x 324 mm'; W: 458 * PtPrmm; H: 324 * PtPrmm),
|
|
(Name: 'Custom size'; W: 0; H: 0));
|
|
|
|
DefGtkPapersCount = 63;
|
|
GTKPapers: array[0 .. DefGtkPapersCount - 1] of TfrxInfoLinkData = (
|
|
(Num: DMPAPER_USER; Name: ''),
|
|
(Num: FRX_DMPAPER_LETTER_TRANSVERSE; Name: 'na_letter'),
|
|
(Num: FRX_DMPAPER_LETTER; Name: 'na_letter'),
|
|
(Num: FRX_DMPAPER_LETTERSMALL; Name: 'na_letter'),
|
|
(Num: FRX_DMPAPER_TABLOID; Name: 'na_ledger'),
|
|
(Num: FRX_DMPAPER_LEDGER; Name: 'na_ledger'),
|
|
(Num: FRX_DMPAPER_LEGAL; Name: 'na_legal'),
|
|
(Num: FRX_DMPAPER_STATEMENT; Name: 'na_invoice'),
|
|
(Num: FRX_DMPAPER_EXECUTIVE; Name: 'na_executive'),
|
|
(Num: FRX_DMPAPER_A3; Name: 'iso_a3'),
|
|
(Num: FRX_DMPAPER_A3_TRANSVERSE; Name: 'iso_a3'),
|
|
(Num: FRX_DMPAPER_A4; Name: 'iso_a4'),
|
|
(Num: FRX_DMPAPER_A4SMALL; Name: 'iso_a4'),
|
|
(Num: FRX_DMPAPER_A4_TRANSVERSE; Name: 'iso_a4'),
|
|
(Num: FRX_DMPAPER_A5; Name: 'iso_a5'),
|
|
(Num: FRX_DMPAPER_A5_TRANSVERSE; Name: 'iso_a5'),
|
|
(Num: FRX_DMPAPER_B4; Name: 'jis_b4'),
|
|
(Num: FRX_DMPAPER_B5; Name: 'jis_b5'),
|
|
(Num: FRX_DMPAPER_B5_TRANSVERSE; Name: 'jis_b5'),
|
|
(Num: FRX_DMPAPER_QUARTO; Name: 'na_quarto'),
|
|
(Num: FRX_DMPAPER_10X14; Name: 'na_10x14'),
|
|
(Num: FRX_DMPAPER_11X17; Name: 'na_ledger'),
|
|
(Num: FRX_DMPAPER_NOTE; Name: 'na_letter'),
|
|
(Num: FRX_DMPAPER_ENV_9; Name: 'na_number-9'),
|
|
(Num: FRX_DMPAPER_ENV_10; Name: 'na_number-10'),
|
|
(Num: FRX_DMPAPER_ENV_11; Name: 'na_number-11'),
|
|
(Num: FRX_DMPAPER_ENV_12; Name: 'na_number-12'),
|
|
(Num: FRX_DMPAPER_ENV_14; Name: 'na_number-14'),
|
|
(Num: FRX_DMPAPER_CSHEET; Name: 'na_c'),
|
|
(Num: FRX_DMPAPER_DSHEET; Name: 'na_d'),
|
|
(Num: FRX_DMPAPER_ESHEET; Name: 'na_e'),
|
|
(Num: FRX_DMPAPER_ENV_DL; Name: 'iso_dl'),
|
|
(Num: FRX_DMPAPER_ENV_C5; Name: 'iso_c5'),
|
|
(Num: FRX_DMPAPER_ENV_C3; Name: 'iso_c3'),
|
|
(Num: FRX_DMPAPER_ENV_C4; Name: 'iso_c4'),
|
|
(Num: FRX_DMPAPER_ENV_C6; Name: 'iso_c6'),
|
|
(Num: FRX_DMPAPER_ENV_C65; Name: 'iso_c6c5'),
|
|
(Num: FRX_DMPAPER_ENV_B4; Name: 'iso_b4'),
|
|
(Num: FRX_DMPAPER_ENV_B5; Name: 'iso_b5'),
|
|
(Num: FRX_DMPAPER_ENV_B6; Name: 'iso_b6'),
|
|
(Num: FRX_DMPAPER_ENV_ITALY; Name: 'om_italian'),
|
|
(Num: FRX_DMPAPER_ENV_MONARCH; Name: 'na_monarch'),
|
|
(Num: FRX_DMPAPER_ENV_PERSONAL; Name: 'na_personal'),
|
|
(Num: FRX_DMPAPER_FANFOLD_US; Name: 'na_fanfold-us'),
|
|
(Num: FRX_DMPAPER_FANFOLD_STD_GERMAN; Name: 'na_fanfold-eur'),
|
|
(Num: FRX_DMPAPER_FANFOLD_LGL_GERMAN; Name: 'na_foolscap'),
|
|
(Num: FRX_DMPAPER_ISO_B4; Name: 'iso_b4'),
|
|
(Num: FRX_DMPAPER_JAPANESE_POSTCARD; Name: 'jpn_hagaki'),
|
|
(Num: FRX_DMPAPER_9X11; Name: 'na_9x11'),
|
|
(Num: FRX_DMPAPER_10X11; Name: 'na_10x11'),
|
|
(Num: FRX_DMPAPER_ENV_INVITE; Name: 'om_invite'),
|
|
(Num: FRX_DMPAPER_LETTER_EXTRA; Name: 'na_letter-extra'),
|
|
(Num: FRX_DMPAPER_LETTER_EXTRA_TRANSVERSE; Name: 'na_letter-extra'),
|
|
(Num: FRX_DMPAPER_LEGAL_EXTRA; Name: 'na_legal-extra'),
|
|
(Num: FRX_DMPAPER_TABLOID_EXTRA; Name: 'na_arch'),
|
|
(Num: FRX_DMPAPER_A4_EXTRA; Name: 'iso_a4-extra'),
|
|
(Num: FRX_DMPAPER_B_PLUS; Name: 'na_b-plus'),
|
|
(Num: FRX_DMPAPER_LETTER_PLUS; Name: 'na_letter-plus'),
|
|
(Num: FRX_DMPAPER_A3_EXTRA; Name: 'iso_a3-extra'),
|
|
(Num: FRX_DMPAPER_A3_EXTRA_TRANSVERSE; Name: 'iso_a3-extra'),
|
|
(Num: FRX_DMPAPER_A5_EXTRA; Name: 'iso_a5-extra'),
|
|
(Num: FRX_DMPAPER_B5_EXTRA; Name: 'iso_b5-extra'),
|
|
(Num: FRX_DMPAPER_A2; Name: 'iso_a2'));
|
|
|
|
DefGtkBinsCount = 13;
|
|
GTKBins: array[0 .. DefGtkBinsCount - 1] of TfrxInfoLinkData = (
|
|
(Num: FRX_DMBIN_AUTO; Name: 'auto'),
|
|
(Num: FRX_DMBIN_CASSETTE; Name: 'cassette'),
|
|
(Num: FRX_DMBIN_ENVELOPE; Name: 'envelope'),
|
|
(Num: FRX_DMBIN_ENVMANUAL; Name: 'envelope-manual'),
|
|
(Num: FRX_DMBIN_LOWER; Name: 'lower'),
|
|
(Num: FRX_DMBIN_MANUAL; Name: 'manual'),
|
|
(Num: FRX_DMBIN_MIDDLE; Name: 'middle'),
|
|
(Num: FRX_DMBIN_ONLYONE; Name: 'only-one'),
|
|
(Num: FRX_DMBIN_FORMSOURCE; Name: 'form-source'),
|
|
(Num: FRX_DMBIN_LARGECAPACITY; Name: 'large-capacity'),
|
|
(Num: FRX_DMBIN_LARGEFMT; Name: 'large-format'),
|
|
(Num: FRX_DMBIN_TRACTOR; Name: 'tractor'),
|
|
(Num: FRX_DMBIN_SMALLFMT; Name: 'small-format'));
|
|
|
|
var
|
|
cairo_surface_finish: Tfn_cairo_surface_finish;
|
|
cairo_create: Tfn_cairo_create;
|
|
cairo_destroy: Tfn_cairo_destroy;
|
|
cairo_show_page: Tfn_cairo_show_page;
|
|
|
|
cairo_surface_get_type: Tfn_cairo_surface_get_type;
|
|
cairo_ps_surface_set_size: Tfn_cairo_ps_surface_set_size;
|
|
cairo_ps_surface_dsc_begin_setup: Tfn_cairo_ps_surface_dsc_begin_setup;
|
|
cairo_ps_surface_dsc_begin_page_setup: Tfn_cairo_ps_surface_dsc_begin_page_setup;
|
|
cairo_ps_surface_dsc_comment: Tfn_cairo_ps_surface_dsc_comment;
|
|
cairo_pdf_surface_set_size: Tfn_cairo_pdf_surface_set_size;
|
|
|
|
g_free: Tfn_g_free;
|
|
g_list_free: Tfn_g_list_free;
|
|
|
|
g_signal_connect_data: Tfn_g_signal_connect_data;
|
|
g_object_unref: Tfn_g_object_unref;
|
|
g_object_ref: Tfn_g_object_ref;
|
|
gtk_print_job_new: Tfn_gtk_print_job_new;
|
|
gtk_print_job_get_surface: Tfn_gtk_print_job_get_surface;
|
|
gtk_print_job_send: Tfn_gtk_print_job_send;
|
|
gtk_printer_get_default_page_size: Tfn_gtk_printer_get_default_page_size;
|
|
gtk_print_job_get_settings: Tfn_gtk_print_job_get_settings;
|
|
gtk_enumerate_printers: Tfn_gtk_enumerate_printers;
|
|
gtk_printer_list_papers: Tfn_gtk_printer_list_papers;
|
|
gtk_printer_has_details: Tfn_gtk_printer_has_details;
|
|
gtk_printer_request_details: Tfn_gtk_printer_request_details;
|
|
gtk_printer_get_name: Tfn_gtk_printer_get_name;
|
|
gtk_printer_is_default: Tfn_gtk_printer_is_default;
|
|
|
|
gtk_print_unix_dialog_new: Tfn_gtk_print_unix_dialog_new;
|
|
gtk_print_unix_dialog_set_page_setup: Tfn_gtk_print_unix_dialog_set_page_setup;
|
|
gtk_print_unix_dialog_get_page_setup: Tfn_gtk_print_unix_dialog_get_page_setup;
|
|
gtk_print_unix_dialog_set_settings: Tfn_gtk_print_unix_dialog_set_settings;
|
|
gtk_print_unix_dialog_get_settings: Tfn_gtk_print_unix_dialog_get_settings;
|
|
gtk_dialog_run: Tfn_gtk_dialog_run;
|
|
|
|
{ page_setup }
|
|
gtk_page_setup_new: Tfn_gtk_page_setup_new;
|
|
gtk_page_setup_copy: Tfn_gtk_page_setup_copy;
|
|
gtk_page_setup_get_paper_size: Tfn_gtk_page_setup_get_paper_size;
|
|
gtk_page_setup_set_paper_size: Tfn_gtk_page_setup_set_paper_size;
|
|
gtk_page_setup_get_orientation: Tfn_gtk_page_setup_get_orientation;
|
|
gtk_page_setup_set_orientation: Tfn_gtk_page_setup_set_orientation;
|
|
gtk_page_setup_get_top_margin: Tfn_gtk_page_setup_get_top_margin;
|
|
gtk_page_setup_set_top_margin: Tfn_gtk_page_setup_set_top_margin;
|
|
gtk_page_setup_get_bottom_margin: Tfn_gtk_page_setup_get_bottom_margin;
|
|
gtk_page_setup_set_bottom_margin: Tfn_gtk_page_setup_set_bottom_margin;
|
|
gtk_page_setup_get_left_margin: Tfn_gtk_page_setup_get_left_margin;
|
|
gtk_page_setup_set_left_margin: Tfn_gtk_page_setup_set_left_margin;
|
|
gtk_page_setup_get_right_margin: Tfn_gtk_page_setup_get_right_margin;
|
|
gtk_page_setup_set_right_margin: Tfn_gtk_page_setup_set_right_margin;
|
|
gtk_page_setup_get_paper_width: Tfn_gtk_page_setup_get_paper_width;
|
|
gtk_page_setup_get_paper_height: Tfn_gtk_page_setup_get_paper_height;
|
|
gtk_page_setup_get_page_width: Tfn_gtk_page_setup_get_page_width;
|
|
gtk_page_setup_get_page_height: Tfn_gtk_page_setup_get_page_height;
|
|
{ paper_size }
|
|
gtk_paper_size_new: Tfn_gtk_paper_size_new;
|
|
gtk_paper_size_new_from_ppd: Tfn_gtk_paper_size_new_from_ppd;
|
|
gtk_paper_size_new_from_ipp: Tfn_gtk_paper_size_new_from_ipp;
|
|
gtk_paper_size_new_custom: Tfn_gtk_paper_size_new_custom;
|
|
gtk_paper_size_copy: Tfn_gtk_paper_size_copy;
|
|
gtk_paper_size_free: Tfn_gtk_paper_size_free;
|
|
gtk_paper_size_is_equal: Tfn_gtk_paper_size_is_equal;
|
|
//GList *Tfn_gtk_paper_size_get_paper_sizes (gboolean include_custom);
|
|
gtk_paper_size_get_name: Tfn_gtk_paper_size_get_name;
|
|
gtk_paper_size_get_display_name: Tfn_gtk_paper_size_get_display_name;
|
|
gtk_paper_size_get_ppd_name: Tfn_gtk_paper_size_get_ppd_name;
|
|
gtk_paper_size_get_width: Tfn_gtk_paper_size_get_width;
|
|
gtk_paper_size_get_height: Tfn_gtk_paper_size_get_height;
|
|
gtk_paper_size_is_custom: Tfn_gtk_paper_size_is_custom;
|
|
gtk_paper_size_is_ipp: Tfn_gtk_paper_size_is_ipp;
|
|
gtk_paper_size_set_size: Tfn_gtk_paper_size_set_size;
|
|
gtk_paper_size_get_default_top_margin: Tfn_gtk_paper_size_get_default_top_margin;
|
|
gtk_paper_size_get_default_bottom_margin: Tfn_gtk_paper_size_get_default_bottom_margin;
|
|
gtk_paper_size_get_default_left_margin: Tfn_gtk_paper_size_get_default_left_margin;
|
|
gtk_paper_size_get_default_right_margin: Tfn_gtk_paper_size_get_default_right_margin;
|
|
gtk_paper_size_get_default: Tfn_gtk_paper_size_get_default;
|
|
{ print_settings }
|
|
gtk_print_settings_new: Tfn_gtk_print_settings_new;
|
|
gtk_print_settings_get_printer: Tfn_gtk_print_settings_get_printer;
|
|
gtk_print_settings_set_printer: Tfn_gtk_print_settings_set_printer;
|
|
gtk_print_settings_get_orientation: Tfn_gtk_print_settings_get_orientation;
|
|
gtk_print_settings_set_orientation: Tfn_gtk_print_settings_set_orientation;
|
|
gtk_print_settings_get_paper_size: Tfn_gtk_print_settings_get_paper_size;
|
|
gtk_print_settings_set_paper_size: Tfn_gtk_print_settings_set_paper_size;
|
|
gtk_print_settings_get_paper_width: Tfn_gtk_print_settings_get_paper_width;
|
|
gtk_print_settings_set_paper_width: Tfn_gtk_print_settings_set_paper_width;
|
|
gtk_print_settings_get_paper_height: Tfn_gtk_print_settings_get_paper_height;
|
|
gtk_print_settings_set_paper_height: Tfn_gtk_print_settings_set_paper_height;
|
|
gtk_print_settings_get_collate: Tfn_gtk_print_settings_get_collate;
|
|
gtk_print_settings_set_collate: Tfn_gtk_print_settings_set_collate;
|
|
gtk_print_settings_get_duplex: Tfn_gtk_print_settings_get_duplex;
|
|
gtk_print_settings_set_duplex: Tfn_gtk_print_settings_set_duplex;
|
|
gtk_print_settings_get_n_copies: Tfn_gtk_print_settings_get_n_copies;
|
|
gtk_print_settings_set_n_copies: Tfn_gtk_print_settings_set_n_copies;
|
|
gtk_print_settings_get_resolution_x: Tfn_gtk_print_settings_get_resolution_x;
|
|
gtk_print_settings_get_resolution_y: Tfn_gtk_print_settings_get_resolution_y;
|
|
gtk_print_settings_get_default_source: Tfn_gtk_print_settings_get_default_source;
|
|
gtk_print_settings_set_default_source: Tfn_gtk_print_settings_set_default_source;
|
|
gtk_print_settings_get_media_type: Tfn_gtk_print_settings_get_media_type;
|
|
gtk_print_settings_set_media_type: Tfn_gtk_print_settings_set_media_type;
|
|
gtk_print_settings_get_output_bin: Tfn_gtk_print_settings_get_output_bin;
|
|
gtk_print_settings_set_output_bin: Tfn_gtk_print_settings_set_output_bin;
|
|
|
|
|
|
function frxGtkOrientationToFMX(Orientation: TGtkPageOrientation): TPrinterOrientation; inline;
|
|
begin
|
|
Result := TPrinterOrientation(Byte(Orientation) div 2);
|
|
end;
|
|
|
|
function frxFMXOrientationToGtk(Orientation: TPrinterOrientation): TGtkPageOrientation;
|
|
begin
|
|
Result := TGtkPageOrientation(Byte(Orientation));
|
|
end;
|
|
|
|
function GtkInfoNameFromConst(const InfoArr: array of TfrxInfoLinkData; const aConst: Integer): AnsiString;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
Result := '';
|
|
for I := Low(InfoArr) to High(InfoArr) do
|
|
if InfoArr[i].Num = aConst then
|
|
begin
|
|
Result := InfoArr[i].Name;
|
|
break;
|
|
end;
|
|
end;
|
|
|
|
function InfoConstFromGtkName(const InfoArr: array of TfrxInfoLinkData; const Name: AnsiString): Integer;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
Result := InfoArr[0].Num;
|
|
for I := Low(InfoArr) to High(InfoArr) do
|
|
if SameText(InfoArr[i].Name, Name) then
|
|
begin
|
|
Result := InfoArr[i].Num;
|
|
break;
|
|
end;
|
|
end;
|
|
|
|
function GtkPaperNameFromConst(PaperConst: Integer): AnsiString;
|
|
begin
|
|
Result := GtkInfoNameFromConst(GTKPapers, PaperConst);
|
|
end;
|
|
|
|
function GtkBinNameFromConst(PaperConst: Integer): AnsiString;
|
|
begin
|
|
Result := GtkInfoNameFromConst(GTKBins, PaperConst);
|
|
end;
|
|
|
|
function PaperConstFromGtkName(const PaperName: AnsiString): Integer;
|
|
begin
|
|
Result := InfoConstFromGtkName(GTKPapers, PaperName);
|
|
end;
|
|
|
|
function BinConstFromGtkName(const PBinName: AnsiString): Integer;
|
|
begin
|
|
Result := InfoConstFromGtkName(GTKBins, PBinName);
|
|
end;
|
|
|
|
destructor TfrxPrinter.Destroy;
|
|
begin
|
|
inherited;
|
|
ClearGTKPapers;
|
|
FreeAndNil(FGTKPapers);
|
|
if Assigned(FPageSet) then
|
|
g_object_unref(FPageSet);
|
|
if Assigned(FSettings) then
|
|
g_object_unref(FSettings);
|
|
if Assigned(FCustomPaper) then
|
|
gtk_paper_size_free(FCustomPaper);
|
|
end;
|
|
|
|
procedure TfrxPrinter.Init;
|
|
procedure FillPapers;
|
|
var
|
|
pList, pOrgList: TPGList;
|
|
sName: AnsiString;
|
|
PSize: TPGtkPaperSize;
|
|
begin
|
|
pList := gtk_printer_list_papers(Pointer(Handle));
|
|
pOrgList := pList;
|
|
while pList <> nil do
|
|
begin
|
|
if pList.pData <> nil then
|
|
begin
|
|
PSize := gtk_page_setup_get_paper_size(pList.pData);
|
|
sName := AnsiString(gtk_paper_size_get_name(PSize));
|
|
FPapers.AddObject(String(gtk_paper_size_get_display_name(PSize)), TObject(PaperConstFromGtkName(sName)));
|
|
FGTKPapers.AddObject(String(sName), TObject(pList.pData))
|
|
end;
|
|
pList := TPGList(pList.pNext);
|
|
end;
|
|
g_list_free(pOrgList);
|
|
end;
|
|
|
|
procedure FillBins;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
for i := Low(GTKBins) to High(GTKBins) do
|
|
FBins.AddObject(String(GTKBins[i].Name), Pointer(GTKBins[i].Num));
|
|
end;
|
|
|
|
var
|
|
LPageSetup: TPGtkPageSetup;
|
|
LPaperSize: TPGtkPaperSize;
|
|
WaitTimer: TStopwatch;
|
|
begin
|
|
if FInitialized then Exit;
|
|
FDPI := System.Classes.Point(300, 300);
|
|
gtk_printer_request_details(Pointer(Handle));
|
|
WaitTimer := TStopwatch.StartNew;
|
|
{ wait for paper }
|
|
while not gtk_printer_has_details(Pointer(Handle)) and (WaitTimer.ElapsedMilliseconds < 30000) do Application.ProcessMessages;
|
|
WaitTimer.Stop;
|
|
FCanvas := TfrxLinuxCanvas.CreateFromFrxPrinter(Self);
|
|
FCanvas.Stroke.Kind := TBrushKind.Solid;
|
|
FCanvas.Stroke.Color := TAlphaColors.Black;
|
|
FCanvas.Fill.Kind := TBrushKind.Solid;
|
|
FCanvas.Fill.Color := TAlphaColors.Black;
|
|
FillPapers;
|
|
FillBins;
|
|
LPageSetup := gtk_printer_get_default_page_size(Pointer(FHandle));
|
|
if LPageSetup = nil then
|
|
LPageSetup := gtk_page_setup_new;
|
|
FPageSet := gtk_page_setup_copy(LPageSetup);
|
|
FSettings := gtk_print_settings_new;
|
|
FDefOrientation := frxGtkOrientationToFMX(gtk_page_setup_get_orientation(FPageSet));
|
|
LPaperSize := gtk_page_setup_get_paper_size(FPageSet);
|
|
FPaperHeight := gtk_page_setup_get_paper_height(FPageSet, GTK_UNIT_MM);
|
|
FPaperWidth := gtk_page_setup_get_paper_width(FPageSet, GTK_UNIT_MM);
|
|
FCustomPaper := gtk_paper_size_new_custom (PAnsiChar('frxPaper'), PAnsiChar('frxPaper'), FPaperWidth, FPaperHeight, GTK_UNIT_MM);
|
|
FOrientation := FDefOrientation;
|
|
FDefPaper := PaperConstFromGtkName(AnsiString(gtk_paper_size_get_name(LPaperSize)));
|
|
FDefBin := BinConstFromGtkName(AnsiString(gtk_print_settings_get_default_source(FSettings)));
|
|
FDefDuplex := Integer(gtk_print_settings_get_duplex(FSettings));
|
|
FPaper := FDefPaper;
|
|
FDefPaperWidth := FPaperWidth;
|
|
FDefPaperHeight := FPaperHeight;
|
|
FBin := -1;
|
|
FDuplex := -1;
|
|
FDPI.X := gtk_print_settings_get_resolution_x(FSettings);
|
|
FDPI.Y := gtk_print_settings_get_resolution_y(FSettings);
|
|
FCanvas.SetSize(Round(FPaperWidth * FDPI.X / frxDefDPIUnits * fr01cm), Round(FPaperHeight * FDPI.Y / frxDefDPIUnits * fr01cm));
|
|
FInitialized := True;
|
|
g_object_unref(LPageSetup);
|
|
end;
|
|
|
|
procedure TfrxPrinter.Abort;
|
|
begin
|
|
FTerminated := True;
|
|
end;
|
|
|
|
procedure TfrxPrinter.BeginDoc;
|
|
begin
|
|
if not FInitialized then Exit;
|
|
FTerminated := False;
|
|
FPrinting := True;
|
|
//UpdateFromDeviceCaps;
|
|
gtk_print_settings_set_n_copies(FSettings, 1);
|
|
FJob := gtk_print_job_new(PAnsiChar(AnsiString(FTitle)), Pointer(Handle), FSettings, FPageset);
|
|
FSurf := gtk_print_job_get_surface(FJob, nil);
|
|
FPrinterContext := Pointer(cairo_create(FSurf));
|
|
if Assigned(FPrinterContext) then
|
|
UpdateToDeviceCaps([fdtMargins, fdtPageSize, fdtBin, fdtDuplex, fdtOrientation])
|
|
else
|
|
raise Exception.Create('Can''t create canvas for Printer');
|
|
|
|
FIsFirst := True;
|
|
end;
|
|
|
|
procedure TfrxPrinter.BeginPage;
|
|
begin
|
|
if FTerminated or not FInitialized then Exit;
|
|
FCanvas.BeginScene(nil, NativeInt(FPrinterContext));
|
|
inherited;
|
|
FIsFirst := False;
|
|
end;
|
|
|
|
procedure TfrxPrinter.EndDoc;
|
|
begin
|
|
if not FInitialized then Exit;
|
|
cairo_surface_finish(FSurf);
|
|
FSurf := nil;
|
|
if not FTerminated then
|
|
gtk_print_job_send(FJob, nil, Pointer(Self), nil);
|
|
g_object_unref(FJob);
|
|
FJob := nil;
|
|
FPrinterContext := nil;
|
|
FPrinting := False;
|
|
FBin := -1;
|
|
FDuplex := -1;
|
|
FTerminated := False;
|
|
end;
|
|
|
|
procedure TfrxPrinter.EndPage;
|
|
begin
|
|
if FTerminated or not FInitialized then Exit;
|
|
FCanvas.EndScene;
|
|
cairo_show_page(FPrinterContext);
|
|
end;
|
|
|
|
procedure TfrxPrinter.BeginRAWDoc;
|
|
begin
|
|
//todo
|
|
end;
|
|
|
|
procedure TfrxPrinter.ClearGTKPapers;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
for i := 0 to FGTKPapers.Count - 1 do
|
|
g_object_unref(Pointer(FGTKPapers.Objects[i]));
|
|
FGTKPapers.Clear;
|
|
end;
|
|
|
|
constructor TfrxPrinter.Create(const AName: String; ADevice: NativeInt);
|
|
begin
|
|
inherited Create(AName, '');
|
|
FHandle := ADevice;
|
|
FGTKPapers := TStringList.Create;
|
|
end;
|
|
|
|
procedure TfrxPrinter.EndRAWDoc;
|
|
begin
|
|
//todo
|
|
end;
|
|
|
|
procedure TfrxPrinter.WriteRAWDoc(const buf: AnsiString);
|
|
begin
|
|
//todo
|
|
end;
|
|
|
|
procedure TfrxPrinter.SetViewParams(APaperSize: Integer;
|
|
APaperWidth, APaperHeight: Extended; AOrientation: TPrinterOrientation);
|
|
var
|
|
LPaperSize: TPGtkPaperSize;
|
|
begin
|
|
FPaper := APaperSize;
|
|
FOrientation := AOrientation;
|
|
if not FInitialized then Exit;
|
|
if APaperSize = 256 then
|
|
begin
|
|
// copy the margins from A4 paper
|
|
SetViewParams(DMPAPER_A4, 0, 0, AOrientation);
|
|
FPaperHeight := APaperHeight;
|
|
FPaperWidth := APaperWidth;
|
|
end;
|
|
UpdateToDeviceCaps([fdtMargins, fdtPageSize, fdtOrientation]);
|
|
UpdateFromDeviceCaps;
|
|
FOrientation := AOrientation;
|
|
{ Page setup doesnt change orientation until Job created }
|
|
{ so we need to swap size manually. Used in page dialog }
|
|
LPaperSize := gtk_page_setup_get_paper_size(FPageSet);
|
|
if FOrientation = poPortrait then
|
|
begin
|
|
FPaperWidth := gtk_paper_size_get_width(LPaperSize, GTK_UNIT_MM);
|
|
FPaperHeight := gtk_paper_size_get_height(LPaperSize, GTK_UNIT_MM);
|
|
end
|
|
else
|
|
begin
|
|
FPaperHeight := gtk_paper_size_get_width(LPaperSize, GTK_UNIT_MM);
|
|
FPaperWidth := gtk_paper_size_get_height(LPaperSize, GTK_UNIT_MM);
|
|
end;
|
|
end;
|
|
|
|
function TfrxPrinter.ShowPrintDialog: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
procedure TfrxPrinter.SetPrintParams(APaperSize: Integer;
|
|
APaperWidth, APaperHeight: Extended; AOrientation: TPrinterOrientation;
|
|
ABin, ADuplex, ACopies: Integer);
|
|
var
|
|
ParamsToUpd: TfrxDevUpdateTypes;
|
|
begin
|
|
if not FInitialized then Exit;
|
|
ParamsToUpd := [];
|
|
if FOrientation <> AOrientation then
|
|
Include(ParamsToUpd, fdtOrientation);
|
|
if (APaperSize <> FPaper) or (not SameValue(APaperWidth, FPaperWidth, 0.001) or not SameValue(APaperHeight, FPaperHeight, 0.001)) then
|
|
Include(ParamsToUpd, fdtPageSize);
|
|
if FDuplex <> ADuplex then
|
|
Include(ParamsToUpd, fdtDuplex);
|
|
if FBin <> ABin then
|
|
Include(ParamsToUpd, fdtBin);
|
|
FPaper := APaperSize;
|
|
FPaperHeight := APaperHeight;
|
|
FPaperWidth := APaperWidth;
|
|
FOrientation := AOrientation;
|
|
FBin := ABin;
|
|
FDuplex := ADuplex;
|
|
UpdateToDeviceCaps(ParamsToUpd);
|
|
end;
|
|
|
|
function TfrxPrinter.UpdateFromDeviceCaps: Boolean;
|
|
var
|
|
LPSettings: TPGtkPrintSettings;
|
|
LPaperSize: TPGtkPaperSize;
|
|
begin
|
|
Result := False;
|
|
if not FInitialized then Exit;
|
|
LPSettings := nil;
|
|
if Assigned(FJob) then
|
|
LPSettings := gtk_print_job_get_settings(FJob);
|
|
|
|
if LPSettings = nil then
|
|
LPSettings := FSettings;
|
|
FDPI.X := gtk_print_settings_get_resolution_x(FSettings);
|
|
FDPI.Y := gtk_print_settings_get_resolution_y(FSettings);
|
|
FLeftMargin := gtk_page_setup_get_left_margin(FPageSet, GTK_UNIT_MM);
|
|
FTopMargin := gtk_page_setup_get_top_margin(FPageSet, GTK_UNIT_MM);
|
|
FRightMargin := gtk_page_setup_get_right_margin(FPageSet, GTK_UNIT_MM);
|
|
FBottomMargin := gtk_page_setup_get_bottom_margin(FPageSet, GTK_UNIT_MM);
|
|
|
|
FOrientation := frxGtkOrientationToFMX(gtk_page_setup_get_orientation(FPageSet));
|
|
LPaperSize := gtk_page_setup_get_paper_size(FPageSet);
|
|
|
|
FPaperHeight := gtk_page_setup_get_paper_height(FPageSet, GTK_UNIT_MM);
|
|
FPaperWidth := gtk_page_setup_get_paper_width(FPageSet, GTK_UNIT_MM);
|
|
FPaper := PaperConstFromGtkName(gtk_paper_size_get_name(LPaperSize));
|
|
FBin := BinConstFromGtkName(gtk_print_settings_get_default_source(LPSettings));
|
|
FDuplex := Integer(gtk_print_settings_get_duplex(LPSettings));
|
|
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TfrxPrinter.UpdatePageSettings;
|
|
var
|
|
PaperSize: TPGtkPaperSize;
|
|
SurfType: TCairo_surface_type;
|
|
W, H: Double;
|
|
|
|
procedure SetPSSurfSize;
|
|
begin
|
|
cairo_ps_surface_set_size (FSurf, W, H);
|
|
cairo_ps_surface_dsc_begin_page_setup(FSurf);
|
|
case gtk_page_setup_get_orientation(FPageset) of
|
|
GTK_PAGE_ORIENTATION_PORTRAIT, GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT:
|
|
cairo_ps_surface_dsc_comment(FSurf, '%%PageOrientation: Portrait');
|
|
GTK_PAGE_ORIENTATION_LANDSCAPE, GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE:
|
|
cairo_ps_surface_dsc_comment(FSurf, '%%PageOrientation: Landscape');
|
|
end;
|
|
end;
|
|
begin
|
|
if FSurf = nil then Exit;
|
|
|
|
PaperSize := gtk_page_setup_get_paper_size(FPageset);
|
|
W := gtk_paper_size_get_width(PaperSize, GTK_UNIT_POINTS);
|
|
H := gtk_paper_size_get_height(PaperSize, GTK_UNIT_POINTS);
|
|
SurfType := cairo_surface_get_type(FSurf);
|
|
|
|
case SurfType of
|
|
CAIRO_SURFACE_TYPE_IMAGE: ;
|
|
CAIRO_SURFACE_TYPE_PDF: cairo_pdf_surface_set_size (FSurf, W, H);
|
|
CAIRO_SURFACE_TYPE_PS: SetPSSurfSize;
|
|
end;
|
|
FCanvas.SetSize(Round(FPaperWidth * FDPI.X / frxDefDPIUnits * fr01cm), Round(FPaperHeight * FDPI.Y / frxDefDPIUnits * fr01cm));
|
|
end;
|
|
|
|
function TfrxPrinter.UpdateToDeviceCaps(Params: TfrxDevUpdateTypes): Boolean;
|
|
var
|
|
LPSettings: TPGtkPrintSettings;
|
|
LPaperSize: TPGtkPaperSize;
|
|
sName: AnsiString;
|
|
i: Integer;
|
|
begin
|
|
Result := False;
|
|
if not FInitialized then Exit;
|
|
LPSettings := nil;
|
|
if Assigned(FJob) then
|
|
LPSettings := gtk_print_job_get_settings(FJob);
|
|
|
|
if LPSettings = nil then
|
|
LPSettings := FSettings;
|
|
|
|
if fdtOrientation in Params then
|
|
gtk_page_setup_set_orientation(FPageSet, frxFMXOrientationToGtk(FOrientation));
|
|
|
|
LPaperSize := gtk_page_setup_get_paper_size(FPageSet);
|
|
|
|
if fdtPageSize in Params then
|
|
begin
|
|
if FPaper <> 256 then
|
|
begin
|
|
sName := GtkPaperNameFromConst(FPaper);
|
|
i := FGTKPapers.IndexOf(String(sName));
|
|
if i <> -1 then
|
|
LPaperSize := gtk_page_setup_get_paper_size(FGTKPapers.Objects[i])
|
|
else
|
|
FPaper := 256;
|
|
end;
|
|
if FPaper = 256 then
|
|
begin
|
|
gtk_paper_size_set_size(FCustomPaper, FPaperWidth, FPaperHeight, GTK_UNIT_MM);
|
|
LPaperSize := FCustomPaper;
|
|
end;
|
|
gtk_page_setup_set_paper_size(FPageSet, LPaperSize);
|
|
end;
|
|
{ TODO: Doesnt work. We should start new jobs for each new input slot }
|
|
if fdtBin in Params then
|
|
gtk_print_settings_set_default_source(LPSettings, PAnsiChar(AnsiString(GtkBinNameFromConst(FBin))));
|
|
if fdtDuplex in Params then
|
|
gtk_print_settings_set_duplex(LPSettings, TGtkPrintDuplex(FDuplex));
|
|
|
|
if fdtMargins in Params then
|
|
begin
|
|
gtk_page_setup_set_left_margin(FPageSet, FLeftMargin, GTK_UNIT_MM);
|
|
gtk_page_setup_set_top_margin(FPageSet, FTopMargin, GTK_UNIT_MM);
|
|
gtk_page_setup_set_right_margin(FPageSet, FRightMargin, GTK_UNIT_MM);
|
|
gtk_page_setup_set_bottom_margin(FPageSet, FBottomMargin, GTK_UNIT_MM);
|
|
end;
|
|
if fdtOrientation in Params then
|
|
gtk_page_setup_set_orientation(FPageSet, frxFMXOrientationToGtk(FOrientation));
|
|
if (fdtOrientation in Params) or (fdtPageSize in Params) then
|
|
UpdatePageSettings;
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TfrxPrinter.PropertiesDlg;
|
|
//var
|
|
// Dlg: TPGtkPrintUnixDialog;
|
|
begin
|
|
// TODO need export more functions
|
|
// Dlg := gtk_print_unix_dialog_new(PAnsiChar(AnsiString('Settings')), nil);
|
|
// gtk_print_unix_dialog_set_page_setup(Dlg, FPageSet);
|
|
// gtk_print_unix_dialog_set_settings(Dlg, FSettings);
|
|
// gtk_dialog_run(Dlg);
|
|
end;
|
|
|
|
{ TfrxPrinters }
|
|
|
|
constructor TfrxPrinters.Create;
|
|
begin
|
|
Inherited;
|
|
end;
|
|
|
|
destructor TfrxPrinters.Destroy;
|
|
begin
|
|
inherited;
|
|
end;
|
|
|
|
function TfrxPrinters.GetDefaultPrinter: String;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
Result := '';
|
|
for I := 0 to FPrinterList.Count - 1 do
|
|
if gtk_printer_is_default(Pointer(TfrxPrinter(FPrinterList[i]).Handle)) then
|
|
begin
|
|
Result := TfrxPrinter(FPrinterList[i]).Name;
|
|
Break;
|
|
end;
|
|
end;
|
|
|
|
function PrintersEnum(printer: TPGtkPrinter; pData: Pointer): LongBool; cdecl;
|
|
var
|
|
sName: String;
|
|
pStr: PAnsiChar;
|
|
begin
|
|
Result := False;
|
|
if printer = nil then Exit;
|
|
g_object_ref(printer);
|
|
pStr := gtk_printer_get_name(printer);
|
|
gtk_printer_request_details(printer);
|
|
sName := String(AnsiString(pStr));
|
|
TfrxPrinters(pData).FPrinterList.Add(TfrxPrinter.Create(sName, NativeInt(Printer)));
|
|
TfrxPrinters(pData).FPrinters.Add(sName);
|
|
end;
|
|
|
|
procedure TfrxPrinters.FillPrinters;
|
|
begin
|
|
Clear;
|
|
gtk_enumerate_printers(@PrintersEnum, Pointer(Self), nil, True);
|
|
end;
|
|
|
|
|
|
function ActualfrxPrinterClass : TfrxCustomPrintersClass;
|
|
begin
|
|
Result := TfrxPrinters;
|
|
end;
|
|
|
|
const
|
|
cairoLib: String = 'libcairo.so.2';
|
|
ObjectsLib: String = 'libgobject-2.0.so.0';
|
|
GLIBLib: String = 'libglib-2.0.so.0';
|
|
cairoLoadError: String = 'Could not load libcairo library.';
|
|
GTKLib: String = 'libgtk-3.so.0';
|
|
GTKLoadError: String = 'Could not load GTK 3 library.';
|
|
|
|
procedure InitGtkAPI;
|
|
var
|
|
H: NativeInt;
|
|
begin
|
|
H := LoadLibrary(PChar(cairoLib));
|
|
if H = 0 then raise Exception.Create(cairoLoadError);
|
|
cairo_surface_finish := GetProcAddress(H, 'cairo_surface_finish');
|
|
cairo_create := GetProcAddress(H, 'cairo_create');
|
|
cairo_destroy := GetProcAddress(H, 'cairo_destroy');
|
|
cairo_show_page := GetProcAddress(H, 'cairo_show_page');
|
|
|
|
cairo_surface_get_type := GetProcAddress(H, 'cairo_surface_get_type');
|
|
cairo_ps_surface_set_size := GetProcAddress(H, 'cairo_ps_surface_set_size');
|
|
cairo_ps_surface_dsc_begin_setup := GetProcAddress(H, 'cairo_ps_surface_dsc_begin_setup');
|
|
cairo_ps_surface_dsc_begin_page_setup := GetProcAddress(H, 'cairo_ps_surface_dsc_begin_page_setup');
|
|
|
|
cairo_ps_surface_dsc_comment := GetProcAddress(H, 'cairo_ps_surface_dsc_comment');
|
|
cairo_pdf_surface_set_size := GetProcAddress(H, 'cairo_pdf_surface_set_size');
|
|
|
|
if (@cairo_surface_finish = nil) or (@cairo_create = nil) or (@cairo_destroy = nil) or (@cairo_show_page = nil) or
|
|
(@cairo_surface_get_type = nil) or (@cairo_ps_surface_set_size = nil) or (@cairo_ps_surface_dsc_begin_setup = nil) or (@cairo_ps_surface_dsc_begin_page_setup = nil) or
|
|
(@cairo_ps_surface_dsc_comment = nil) or (@cairo_pdf_surface_set_size = nil) then
|
|
raise Exception.Create(cairoLoadError);
|
|
|
|
H := LoadLibrary(PChar(ObjectsLib));
|
|
if H = 0 then raise Exception.Create(GTKLoadError);
|
|
g_object_unref := GetProcAddress(H, 'g_object_unref');
|
|
g_object_ref := GetProcAddress(H, 'g_object_ref');
|
|
g_signal_connect_data := GetProcAddress(H, 'g_signal_connect_data');
|
|
|
|
H := LoadLibrary(PChar(GLIBLib));
|
|
if H = 0 then raise Exception.Create(GTKLoadError);
|
|
g_free := GetProcAddress(H, 'g_free');
|
|
g_list_free := GetProcAddress(H, 'g_list_free');
|
|
|
|
H := LoadLibrary(PChar(GTKLib));
|
|
if H = 0 then raise Exception.Create(GTKLoadError);
|
|
|
|
gtk_print_job_new := GetProcAddress(H, 'gtk_print_job_new');
|
|
gtk_print_job_get_surface := GetProcAddress(H, 'gtk_print_job_get_surface');
|
|
gtk_print_job_send := GetProcAddress(H, 'gtk_print_job_send');
|
|
|
|
gtk_printer_get_default_page_size := GetProcAddress(H, 'gtk_printer_get_default_page_size');
|
|
gtk_print_job_get_settings := GetProcAddress(H, 'gtk_print_job_get_settings');
|
|
gtk_enumerate_printers := GetProcAddress(H, 'gtk_enumerate_printers');
|
|
gtk_printer_list_papers := GetProcAddress(H, 'gtk_printer_list_papers');
|
|
|
|
gtk_printer_has_details := GetProcAddress(H, 'gtk_printer_has_details');
|
|
gtk_printer_request_details := GetProcAddress(H, 'gtk_printer_request_details');
|
|
gtk_printer_get_name := GetProcAddress(H, 'gtk_printer_get_name');
|
|
gtk_printer_is_default := GetProcAddress(H, 'gtk_printer_is_default');
|
|
|
|
if (@gtk_print_job_new = nil) or (@gtk_print_job_get_surface = nil) or (@gtk_print_job_send = nil) or
|
|
(@g_object_unref = nil) or (@gtk_printer_get_default_page_size = nil) or (@gtk_print_job_get_settings = nil) or
|
|
(@gtk_printer_has_details = nil) or (@g_free = nil) or (@gtk_printer_list_papers = nil) or
|
|
(@gtk_printer_request_details = nil) or (@g_free = nil) or (@gtk_printer_get_name = nil) or
|
|
(@g_object_ref = nil) or (@g_list_free = nil) or (@gtk_printer_is_default = nil) or
|
|
(@g_signal_connect_data = nil) then
|
|
raise Exception.Create(GTKLoadError);
|
|
|
|
gtk_print_unix_dialog_new := GetProcAddress(H, 'gtk_print_unix_dialog_new');
|
|
gtk_print_unix_dialog_set_page_setup := GetProcAddress(H, 'gtk_print_unix_dialog_set_page_setup');
|
|
gtk_print_unix_dialog_get_page_setup := GetProcAddress(H, 'gtk_print_unix_dialog_get_page_setup');
|
|
gtk_print_unix_dialog_set_settings := GetProcAddress(H, 'gtk_print_unix_dialog_set_settings');
|
|
gtk_print_unix_dialog_get_settings := GetProcAddress(H, 'gtk_print_unix_dialog_get_settings');
|
|
gtk_dialog_run := GetProcAddress(H, 'gtk_dialog_run');
|
|
|
|
if (@gtk_print_unix_dialog_new = nil) or (@gtk_print_unix_dialog_set_page_setup = nil) or (@gtk_print_unix_dialog_get_page_setup = nil) or
|
|
(@gtk_print_unix_dialog_set_settings = nil) or (@gtk_print_unix_dialog_get_settings = nil) or (@gtk_dialog_run = nil) then
|
|
raise Exception.Create(GTKLoadError);
|
|
|
|
gtk_page_setup_new := GetProcAddress(H, 'gtk_page_setup_new');
|
|
gtk_page_setup_copy := GetProcAddress(H, 'gtk_page_setup_copy');
|
|
|
|
gtk_page_setup_get_paper_size := GetProcAddress(H, 'gtk_page_setup_get_paper_size');
|
|
gtk_page_setup_set_paper_size := GetProcAddress(H, 'gtk_page_setup_set_paper_size');
|
|
|
|
gtk_page_setup_get_orientation := GetProcAddress(H, 'gtk_page_setup_get_orientation');
|
|
gtk_page_setup_set_orientation := GetProcAddress(H, 'gtk_page_setup_set_orientation');
|
|
gtk_page_setup_get_top_margin := GetProcAddress(H, 'gtk_page_setup_get_top_margin');
|
|
|
|
gtk_page_setup_set_top_margin := GetProcAddress(H, 'gtk_page_setup_set_top_margin');
|
|
gtk_page_setup_get_bottom_margin := GetProcAddress(H, 'gtk_page_setup_get_bottom_margin');
|
|
gtk_page_setup_set_bottom_margin := GetProcAddress(H, 'gtk_page_setup_set_bottom_margin');
|
|
|
|
gtk_page_setup_get_left_margin := GetProcAddress(H, 'gtk_page_setup_get_left_margin');
|
|
gtk_page_setup_set_left_margin := GetProcAddress(H, 'gtk_page_setup_set_left_margin');
|
|
gtk_page_setup_get_right_margin := GetProcAddress(H, 'gtk_page_setup_get_right_margin');
|
|
|
|
gtk_page_setup_set_right_margin := GetProcAddress(H, 'gtk_page_setup_set_right_margin');
|
|
gtk_page_setup_get_paper_width := GetProcAddress(H, 'gtk_page_setup_get_paper_width');
|
|
gtk_page_setup_get_paper_height := GetProcAddress(H, 'gtk_page_setup_get_paper_height');
|
|
|
|
gtk_page_setup_get_page_width := GetProcAddress(H, 'gtk_page_setup_get_page_width');
|
|
gtk_page_setup_get_page_height := GetProcAddress(H, 'gtk_page_setup_get_page_height');
|
|
if (@gtk_page_setup_new = nil) or (@gtk_page_setup_get_paper_size = nil) or (@gtk_page_setup_set_paper_size = nil) or
|
|
(@gtk_page_setup_get_orientation = nil) or (@gtk_page_setup_set_orientation = nil) or (@gtk_page_setup_get_top_margin = nil) or
|
|
(@gtk_page_setup_set_top_margin = nil) or (@gtk_page_setup_get_bottom_margin = nil) or (@gtk_page_setup_set_bottom_margin = nil) or
|
|
(@gtk_page_setup_get_left_margin = nil) or (@gtk_page_setup_set_left_margin = nil) or (@gtk_page_setup_get_right_margin = nil) or
|
|
(@gtk_page_setup_set_right_margin = nil) or (@gtk_page_setup_get_paper_width = nil) or (@gtk_page_setup_get_paper_height = nil) or
|
|
(@gtk_page_setup_get_page_width = nil) or (@gtk_page_setup_get_paper_size = nil) or (@gtk_page_setup_set_paper_size = nil) or
|
|
(@gtk_page_setup_new = nil) or (@gtk_page_setup_get_page_height = nil) or (@gtk_page_setup_copy = nil) then
|
|
raise Exception.Create(GTKLoadError);
|
|
|
|
gtk_paper_size_new := GetProcAddress(H, 'gtk_paper_size_new');
|
|
gtk_paper_size_new_from_ppd := GetProcAddress(H, 'gtk_paper_size_new_from_ppd');
|
|
gtk_paper_size_new_from_ipp := GetProcAddress(H, 'gtk_paper_size_new_from_ipp');
|
|
|
|
gtk_paper_size_new_custom := GetProcAddress(H, 'gtk_paper_size_new_custom');
|
|
gtk_paper_size_copy := GetProcAddress(H, 'gtk_paper_size_copy');
|
|
gtk_paper_size_free := GetProcAddress(H, 'gtk_paper_size_free');
|
|
|
|
gtk_paper_size_is_equal := GetProcAddress(H, 'gtk_paper_size_is_equal');
|
|
gtk_paper_size_get_name := GetProcAddress(H, 'gtk_paper_size_get_name');
|
|
gtk_paper_size_get_display_name := GetProcAddress(H, 'gtk_paper_size_get_display_name');
|
|
|
|
gtk_paper_size_get_ppd_name := GetProcAddress(H, 'gtk_paper_size_get_ppd_name');
|
|
gtk_paper_size_get_width := GetProcAddress(H, 'gtk_paper_size_get_width');
|
|
gtk_paper_size_get_height := GetProcAddress(H, 'gtk_paper_size_get_height');
|
|
|
|
gtk_paper_size_is_custom := GetProcAddress(H, 'gtk_paper_size_is_custom');
|
|
gtk_paper_size_is_ipp := GetProcAddress(H, 'gtk_paper_size_is_ipp');
|
|
gtk_paper_size_set_size := GetProcAddress(H, 'gtk_paper_size_set_size');
|
|
|
|
gtk_paper_size_get_default_top_margin := GetProcAddress(H, 'gtk_paper_size_get_default_top_margin');
|
|
gtk_paper_size_get_default_bottom_margin := GetProcAddress(H, 'gtk_paper_size_get_default_bottom_margin');
|
|
gtk_paper_size_get_default_left_margin := GetProcAddress(H, 'gtk_paper_size_get_default_left_margin');
|
|
|
|
gtk_paper_size_get_default_right_margin := GetProcAddress(H, 'gtk_paper_size_get_default_right_margin');
|
|
gtk_paper_size_get_default := GetProcAddress(H, 'gtk_paper_size_get_default');
|
|
|
|
if (@gtk_paper_size_new = nil) or (@gtk_paper_size_new_from_ppd = nil) or (@gtk_paper_size_new_from_ipp = nil) or
|
|
(@gtk_paper_size_new_custom = nil) or (@gtk_paper_size_copy = nil) or (@gtk_paper_size_free = nil) or
|
|
(@gtk_paper_size_is_equal = nil) or (@gtk_paper_size_get_name = nil) or (@gtk_paper_size_get_display_name = nil) or
|
|
(@gtk_paper_size_get_ppd_name = nil) or (@gtk_paper_size_get_width = nil) or (@gtk_paper_size_get_height = nil) or
|
|
(@gtk_paper_size_is_custom = nil) or (@gtk_paper_size_is_ipp = nil) or (@gtk_paper_size_set_size = nil) or
|
|
(@gtk_paper_size_get_default_top_margin = nil) or (@gtk_paper_size_get_default_bottom_margin = nil) or (@gtk_paper_size_get_default_left_margin = nil) or
|
|
(@gtk_paper_size_get_default_right_margin = nil) or (@gtk_paper_size_get_default = nil) then
|
|
raise Exception.Create(GTKLoadError);
|
|
|
|
gtk_print_settings_new := GetProcAddress(H, 'gtk_print_settings_new');
|
|
gtk_print_settings_get_printer := GetProcAddress(H, 'gtk_print_settings_get_printer');
|
|
gtk_print_settings_set_printer := GetProcAddress(H, 'gtk_print_settings_set_printer');
|
|
|
|
gtk_print_settings_get_orientation := GetProcAddress(H, 'gtk_print_settings_get_orientation');
|
|
gtk_print_settings_set_orientation := GetProcAddress(H, 'gtk_print_settings_set_orientation');
|
|
gtk_print_settings_get_paper_size := GetProcAddress(H, 'gtk_print_settings_get_paper_size');
|
|
|
|
gtk_print_settings_set_paper_size := GetProcAddress(H, 'gtk_print_settings_set_paper_size');
|
|
gtk_print_settings_get_paper_width := GetProcAddress(H, 'gtk_print_settings_get_paper_width');
|
|
gtk_print_settings_set_paper_width := GetProcAddress(H, 'gtk_print_settings_set_paper_width');
|
|
|
|
gtk_print_settings_get_paper_height := GetProcAddress(H, 'gtk_print_settings_get_paper_height');
|
|
gtk_print_settings_set_paper_height := GetProcAddress(H, 'gtk_print_settings_set_paper_height');
|
|
gtk_print_settings_get_collate := GetProcAddress(H, 'gtk_print_settings_get_collate');
|
|
|
|
gtk_print_settings_set_collate := GetProcAddress(H, 'gtk_print_settings_set_collate');
|
|
gtk_print_settings_get_duplex := GetProcAddress(H, 'gtk_print_settings_get_duplex');
|
|
gtk_print_settings_set_duplex := GetProcAddress(H, 'gtk_print_settings_set_duplex');
|
|
|
|
gtk_print_settings_get_n_copies := GetProcAddress(H, 'gtk_print_settings_get_n_copies');
|
|
gtk_print_settings_set_n_copies := GetProcAddress(H, 'gtk_print_settings_set_n_copies');
|
|
gtk_print_settings_get_resolution_x := GetProcAddress(H, 'gtk_print_settings_get_resolution_x');
|
|
|
|
gtk_print_settings_get_resolution_y := GetProcAddress(H, 'gtk_print_settings_get_resolution_y');
|
|
gtk_print_settings_get_default_source := GetProcAddress(H, 'gtk_print_settings_get_default_source');
|
|
gtk_print_settings_set_default_source := GetProcAddress(H, 'gtk_print_settings_set_default_source');
|
|
|
|
gtk_print_settings_get_media_type := GetProcAddress(H, 'gtk_print_settings_get_media_type');
|
|
gtk_print_settings_set_media_type := GetProcAddress(H, 'gtk_print_settings_set_media_type');
|
|
gtk_print_settings_get_output_bin := GetProcAddress(H, 'gtk_print_settings_get_output_bin');
|
|
|
|
gtk_print_settings_set_output_bin := GetProcAddress(H, 'gtk_print_settings_set_output_bin');
|
|
|
|
if (@gtk_print_settings_new = nil) or (@gtk_print_settings_get_printer = nil) or (@gtk_print_settings_set_printer = nil) or
|
|
(@gtk_print_settings_get_orientation = nil) or (@gtk_print_settings_set_orientation = nil) or (@gtk_print_settings_get_paper_size = nil) or
|
|
(@gtk_print_settings_set_paper_size = nil) or (@gtk_print_settings_get_paper_width = nil) or (@gtk_print_settings_set_paper_width = nil) or
|
|
(@gtk_print_settings_get_paper_height = nil) or (@gtk_print_settings_set_paper_height = nil) or (@gtk_print_settings_get_collate = nil) or
|
|
(@gtk_print_settings_set_collate = nil) or (@gtk_print_settings_get_duplex = nil) or (@gtk_print_settings_set_duplex = nil) or
|
|
(@gtk_print_settings_get_n_copies = nil) or (@gtk_print_settings_set_n_copies = nil) or (@gtk_print_settings_get_resolution_x = nil) or
|
|
(@gtk_print_settings_get_resolution_y = nil) or (@gtk_print_settings_get_default_source = nil) or (@gtk_print_settings_set_default_source = nil) or
|
|
(@gtk_print_settings_get_media_type = nil) or (@gtk_print_settings_set_media_type = nil) or (@gtk_print_settings_get_output_bin = nil) or
|
|
(@gtk_print_settings_set_output_bin = nil) then
|
|
raise Exception.Create(GTKLoadError);
|
|
end;
|
|
|
|
initialization
|
|
InitGtkAPI;
|
|
|
|
finalization
|
|
|
|
end.
|