meos-2024/code/Printer.h
erikmelin a13eef041a MeOS version 3.5.785.
Use AGPL instead of GPL
2017-08-30 13:31:32 +02:00

117 lines
3.0 KiB
C

// printer.h: printing utilities.
#pragma once
/************************************************************************
MeOS - Orienteering Software
Copyright (C) 2009-2017 Melin Software HB
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Melin Software HB - software@melin.nu - www.melin.nu
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
************************************************************************/
#include "gdistructures.h"
/** Data structure describing text to print.*/
struct PrintTextInfo {
float xp;
float yp;
float width;
TextInfo ti;
PrintTextInfo(const TextInfo &ti_) : xp(0), yp(0), width(0), ti(ti_) {};
PrintTextInfo() : xp(0), yp(0), width(0) {};
};
/** Data structure describing page to print*/
struct PageInfo {
float topMargin;
float bottomMargin;
float pageY;
float leftMargin;
float scaleX;
float scaleY;
bool printHeader;
bool noPrintMargin;
int nPagesTotal; //Total number of pages to print
// Transfer mm to local printing coordinates: cLocalX = cx + m, cLocalX = cy + m.
double xMM2PrintC;
double xMM2PrintK;
double yMM2PrintC;
double yMM2PrintK;
void renderPages(const list<TextInfo> &tl,
const list<RectangleInfo> &rects,
bool invertHeightY,
vector<RenderedPage> &pages);
wstring pageInfo(const RenderedPage &page) const;
};
/** A rendered page ready to print. */
struct RenderedPage {
int nPage; // This page number
wstring info;
vector<PrintTextInfo> text;
vector<RectangleInfo> rectangles;
__int64 checkSum;
RenderedPage() : checkSum(0) {}
void calculateCS(const TextInfo &text);
};
struct PrinterObject {
//Printing
HDC hDC;
HGLOBAL hDevMode;
HGLOBAL hDevNames;
void freePrinter();
wstring Device;
wstring Driver;
DEVMODE DevMode;
set<__int64> printedPages;
int nPagesPrinted;
int nPagesPrintedTotal;
bool onlyChanged;
struct DATASET {
int pWidth_mm;
int pHeight_mm;
double pMgBottom;
double pMgTop;
double pMgRight;
double pMgLeft;
int MarginX;
int MarginY;
int PageX;
int PageY;
double Scale;
bool LastPage;
} ds;
void operator=(const PrinterObject &po);
PrinterObject();
~PrinterObject();
PrinterObject(const PrinterObject &po);
};