summaryrefslogtreecommitdiff
path: root/app/bin/cprint.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/bin/cprint.c')
-rw-r--r--app/bin/cprint.c251
1 files changed, 133 insertions, 118 deletions
diff --git a/app/bin/cprint.c b/app/bin/cprint.c
index 066e649..a8ae0c1 100644
--- a/app/bin/cprint.c
+++ b/app/bin/cprint.c
@@ -20,22 +20,13 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <sys/types.h>
-#include <time.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include <stdbool.h>
-
#include "custom.h"
#include "dynstring.h"
#include "fileio.h"
-#include "i18n.h"
#include "layout.h"
-#include "messages.h"
#include "param.h"
#include "track.h"
-#include "utility.h"
+#include "common-ui.h"
#define PRINT_GAUDY (0)
#define PRINT_PLAIN (1)
@@ -57,13 +48,20 @@ static bitmap_t bm, bm0;
#define BITMAP( BM, X, Y ) \
(BM).bm[ (X)-(BM).x0 + ((Y)-(BM).y0) * ((BM).x1-(BM).x0) ]
-struct {
+static struct {
coOrd size;
coOrd orig;
ANGLE_T angle;
} currPrintGrid, newPrintGrid;
+EXPORT coOrd GetPrintOrig() {
+ return currPrintGrid.orig;
+}
+
+EXPORT ANGLE_T GetPrintAngle() {
+ return currPrintGrid.angle;
+}
/*
* GUI VARS
*/
@@ -104,7 +102,7 @@ static void PrintClear( void );
static void PrintMaxPageSize( void );
static void SelectAllPages(void);
static void DoPrintMargin(void);
-static bool PrintPageNumber( wPos_t x, wPos_t y, DIST_T width, DIST_T height );
+static bool PrintPageNumber( int x, int y, DIST_T width, DIST_T height );
static bool PrintNextPageNumbers(int x, int y, DIST_T pageW, DIST_T pageH);
static char * printFormatLabels[] = { N_("Portrait"), N_("Landscape"), NULL };
@@ -114,25 +112,26 @@ static char * printRegistrationMarksLabels[] = { N_("Registration Marks (in 1:1
static char * printPageNumberLabels[] = { N_("Page Numbers"), NULL };
static char * printPhysSizeLabels[] = { N_("Ignore Page Margins"), NULL };
static char * printGridLabels[] = { N_("Snap Grid"), NULL };
-static char * printRulerLabels[] = { N_("Rulers"), NULL };
+static char * printRulerLabels[] = { N_("Layout Edge"), N_("Every Page"), N_("None"), NULL };
static char * printRoadbedLabels[] = { N_("Roadbed Outline"), NULL };
static char * printCenterLineLabels[] = { N_("Centerline below Scale 1:1"), NULL };
static paramIntegerRange_t rminScale_999 = { 1, 999, 0, PDO_NORANGECHECK_HIGH };
static paramFloatRange_t r0_ = { 0, 0, 0, PDO_NORANGECHECK_HIGH };
-static paramFloatRange_t r1_ = { 1, 0, 0, PDO_NORANGECHECK_HIGH };
-static paramFloatRange_t r_10_99999 = { -10, 99999, 0, PDO_NORANGECHECK_HIGH };
+static paramFloatRange_t r1_pgsz_x = { 1, 0, 0, 0 };
+static paramFloatRange_t r1_pgsz_y = { 1, 0, 0, 0 };
+static paramFloatRange_t r_100_99999 = { -100, 99999, 0, PDO_NORANGECHECK_HIGH };
static paramFloatRange_t r0_360 = { 0, 360 };
static paramData_t printPLs[] = {
-/*0*/ { PD_LONG, &iPrintScale, "scale", 0, &rminScale_999, N_("Print Scale"), 0, (void*)1 },
-/*1*/ { PD_FLOAT, &newPrintGrid.size.x, "pagew", PDO_DIM|PDO_SMALLDIM|PDO_NORECORD|PDO_NOPREF, &r1_, N_("Page Width"), 0, (void*)2 },
-/*2*/ { PD_BUTTON, (void*)PrintMaxPageSize, "max", PDO_DLGHORZ, NULL, N_("Max") },
-/*3*/ { PD_FLOAT, &newPrintGrid.size.y, "pageh", PDO_DIM|PDO_SMALLDIM|PDO_NORECORD|PDO_NOPREF, &r1_, N_("Height"), 0, (void*)2 },
-/*4*/ { PD_BUTTON, (void*)PrintSnapShot, "snapshot", PDO_DLGHORZ, NULL, N_("Snap Shot") },
-/*5*/ { PD_RADIO, &printFormat, "format", 0, printFormatLabels, N_("Page Format"), BC_HORZ|BC_NOBORDER, (void*)1 },
+/*0*/ { PD_LONG, &iPrintScale, "scale", 0, &rminScale_999, N_("Print Scale"), 0, I2VP(1) },
+/*1*/ { PD_FLOAT, &newPrintGrid.size.x, "pagew", PDO_DIM|PDO_SMALLDIM|PDO_NORECORD|PDO_NOPREF, &r1_pgsz_x, N_("Page Width"), 0, I2VP(2) },
+/*2*/ { PD_BUTTON, PrintMaxPageSize, "max", PDO_DLGHORZ, NULL, N_("Max") },
+/*3*/ { PD_FLOAT, &newPrintGrid.size.y, "pageh", PDO_DIM|PDO_SMALLDIM|PDO_NORECORD|PDO_NOPREF, &r1_pgsz_y, N_("Height"), 0, I2VP(2) },
+/*4*/ { PD_BUTTON, PrintSnapShot, "snapshot", PDO_DLGHORZ, NULL, N_("Snap Shot") },
+/*5*/ { PD_RADIO, &printFormat, "format", 0, printFormatLabels, N_("Page Format"), BC_HORZ|BC_NOBORDER, I2VP(1) },
/*6*/ { PD_RADIO, &printOrder, "order", PDO_DLGBOXEND, printOrderLabels, N_("Print Order"), BC_HORZ|BC_NOBORDER },
-/*7*/ { PD_MESSAGE, N_("Print "), NULL, PDO_DLGRESETMARGIN| PDO_DLGNOLABELALIGN, (void*)0 },
-/*8*/ { PD_TOGGLE, &printGaudy, "style", PDO_DLGNOLABELALIGN, printGaudyLabels, NULL, BC_HORZ|BC_NOBORDER, (void*)1 },
+/*7*/ { PD_MESSAGE, N_("Print "), NULL, PDO_DLGRESETMARGIN| PDO_DLGNOLABELALIGN, I2VP(0) },
+/*8*/ { PD_TOGGLE, &printGaudy, "style", PDO_DLGNOLABELALIGN, printGaudyLabels, NULL, BC_HORZ|BC_NOBORDER, I2VP(1) },
#define I_REGMARKS (9)
/*9*/ { PD_TOGGLE, &printRegistrationMarks, "registrationMarks", PDO_DLGNOLABELALIGN, printRegistrationMarksLabels, NULL, BC_HORZ|BC_NOBORDER },
#define I_PAGENUMBERS (10)
@@ -140,28 +139,28 @@ static paramData_t printPLs[] = {
#define I_GRID (11)
/*11*/ { PD_TOGGLE, &printGrid, "grid", PDO_DLGNOLABELALIGN, printGridLabels, NULL, BC_HORZ|BC_NOBORDER },
#define I_RULER (12)
-/*12*/ { PD_TOGGLE, &printRuler, "ruler", PDO_DLGNOLABELALIGN, printRulerLabels, NULL, BC_HORZ|BC_NOBORDER },
+/*12*/ { PD_RADIO, &printRuler, "ruler", 0, printRulerLabels, N_("Rulers:"), BC_HORZ|BC_NOBORDER },
#define I_CENTERLINE (13)
/*13*/ { PD_TOGGLE, &printCenterLine, "centerLine", PDO_DLGNOLABELALIGN, printCenterLineLabels, NULL, BC_HORZ|BC_NOBORDER },
#define I_ROADBED (14)
/*14*/{ PD_TOGGLE, &printRoadbed, "roadbed", PDO_DLGNOLABELALIGN, printRoadbedLabels, NULL, BC_HORZ|BC_NOBORDER },
#define I_ROADBEDWIDTH (15)
/*15*/{ PD_FLOAT, &printRoadbedWidth, "roadbedWidth", PDO_DIM , &r0_, N_(" Width") },
-/*16*/ { PD_TOGGLE, &printPhysSize, "physsize", PDO_DLGNOLABELALIGN, printPhysSizeLabels, NULL, BC_HORZ | BC_NOBORDER, (void*)1 },
-/*17*/ { PD_BUTTON, (void*)DoPrintMargin, "margin", PDO_DLGHORZ|PDO_DLGBOXEND, NULL, N_("Margins") },
-/*18*/{ PD_FLOAT, &newPrintGrid.orig.x, "origx", PDO_DIM|PDO_DLGRESETMARGIN, &r_10_99999, N_("Origin: X"), 0, (void*)2 },
-/*19*/ { PD_FLOAT, &newPrintGrid.orig.y, "origy", PDO_DIM, &r_10_99999, N_("Y"), 0, (void*)2 },
-/*20*/ { PD_BUTTON, (void*)DoResetGrid, "reset", PDO_DLGHORZ, NULL, N_("Reset") },
-/*21*/ { PD_FLOAT, &newPrintGrid.angle, "origa", PDO_ANGLE|PDO_DLGBOXEND, &r0_360, N_("Angle"), 0, (void*)2 },
-/*22*/ { PD_BUTTON, (void*)DoPrintSetup, "setup", PDO_DLGCMDBUTTON, NULL, N_("Setup") },
-/*23*/ { PD_BUTTON, (void*)SelectAllPages, "selall", 0, NULL, N_("Select All") },
-/*24*/ { PD_BUTTON, (void*)PrintClear, "clear", 0, NULL, N_("Clear") },
+/*16*/ { PD_TOGGLE, &printPhysSize, "physsize", PDO_DLGNOLABELALIGN, printPhysSizeLabels, NULL, BC_HORZ | BC_NOBORDER, I2VP(1) },
+/*17*/ { PD_BUTTON, DoPrintMargin, "margin", PDO_DLGHORZ|PDO_DLGBOXEND, NULL, N_("Margins") },
+/*18*/{ PD_FLOAT, &newPrintGrid.orig.x, "origx", PDO_DIM|PDO_DLGRESETMARGIN, &r_100_99999, N_("Origin: X"), 0, I2VP(2) },
+/*19*/ { PD_FLOAT, &newPrintGrid.orig.y, "origy", PDO_DIM, &r_100_99999, N_("Y"), 0, I2VP(2) },
+/*20*/ { PD_BUTTON, DoResetGrid, "reset", PDO_DLGHORZ, NULL, N_("Reset") },
+/*21*/ { PD_FLOAT, &newPrintGrid.angle, "origa", PDO_ANGLE|PDO_DLGBOXEND, &r0_360, N_("Angle"), 0, I2VP(2) },
+/*22*/ { PD_BUTTON, DoPrintSetup, "setup", PDO_DLGCMDBUTTON, NULL, N_("Setup") },
+/*23*/ { PD_BUTTON, SelectAllPages, "selall", 0, NULL, N_("Select All") },
+/*24*/ { PD_BUTTON, PrintClear, "clear", 0, NULL, N_("Clear") },
#define I_PAGECNT (25)
-/*25*/ { PD_MESSAGE, N_("0 pages"), NULL, 0, (void*)80 },
-/*26*/ { PD_MESSAGE, N_("selected"), NULL, 0, (void*)80 }
+/*25*/ { PD_MESSAGE, N_("0 pages"), NULL, 0, I2VP(80) },
+/*26*/ { PD_MESSAGE, N_("selected"), NULL, 0, I2VP(80) }
};
-static paramGroup_t printPG = { "print", PGO_PREFMISCGROUP, printPLs, sizeof printPLs/sizeof printPLs[0] };
+static paramGroup_t printPG = { "print", PGO_PREFMISCGROUP, printPLs, COUNT( printPLs ) };
static struct {
double top, right, bottom, left;
@@ -416,8 +415,8 @@ static void PrintGaudyBox(
static void PrintPlainBox(
- wPos_t x,
- wPos_t y,
+ int x,
+ int y,
coOrd *corners )
{
coOrd p00, p01, p10, p11;
@@ -507,11 +506,6 @@ static void PrintUpdate( int inx0 )
ParamLoadData( &printPG );
- if (newPrintGrid.size.x > maxPageSize.x+0.01 ||
- newPrintGrid.size.y > maxPageSize.y+0.01) {
- NoticeMessage( MSG_PRINT_MAX_SIZE, _("Ok"), NULL,
- FormatSmallDistance(maxPageSize.x), FormatSmallDistance(maxPageSize.y) );
- }
if (newPrintGrid.size.x > maxPageSize.x) {
newPrintGrid.size.x = maxPageSize.x;
ParamLoadControl( &printPG, 1 );
@@ -521,8 +515,8 @@ static void PrintUpdate( int inx0 )
ParamLoadControl( &printPG, 3 );
}
currPrintGrid = newPrintGrid;
- for ( inx = 0; inx < sizeof printPLs/sizeof printPLs[0]; inx++ ) {
- if ( inx != inx0 && printPLs[inx].context == (void*)2 )
+ for ( inx = 0; inx < COUNT( printPLs ); inx++ ) {
+ if ( inx != inx0 && printPLs[inx].context == I2VP(2) )
ParamLoadControl( &printPG, inx );
}
ChangeDim();
@@ -554,6 +548,8 @@ static void SetPageSize( BOOL_T doScale )
maxPageSize.x *= printScale;
maxPageSize.y *= printScale;
}
+ r1_pgsz_x.high = maxPageSize.x+0.0001;
+ r1_pgsz_y.high = maxPageSize.y+0.0001;
}
/**
@@ -617,8 +613,8 @@ static paramData_t printMarginPLs[] = {
#define I_PM_MESSAGE (4)
{ PD_MESSAGE, NULL, NULL, 0, NULL },
#define I_PM_RESET (5)
- { PD_BUTTON, (void*) PrintMarginReset, "marginReset", PDO_DLGCMDBUTTON, NULL, N_("Reset") } };
-static paramGroup_t printMarginPG = { "printMargin", PGO_PREFMISCGROUP|PGO_NODEFAULTPROC, printMarginPLs, sizeof printMarginPLs/sizeof printMarginPLs[0] };
+ { PD_BUTTON, PrintMarginReset, "marginReset", PDO_DLGCMDBUTTON, NULL, N_("Reset") } };
+static paramGroup_t printMarginPG = { "printMargin", PGO_PREFMISCGROUP|PGO_NODEFAULTPROC, printMarginPLs, COUNT( printMarginPLs ) };
static wLines_t aPmLines[] = {
{ 1, 25, 11, 94, 11 },
@@ -631,9 +627,9 @@ static int pmyoff=5;
static void PrintMarginLayout(
paramData_t * pd,
int index,
- wPos_t colX,
- wPos_t * w,
- wPos_t * h )
+ wWinPix_t colX,
+ wWinPix_t * w,
+ wWinPix_t * h )
{
if ( index < I_PM_FIRST || index > (I_PM_MESSAGE) )
return;
@@ -641,7 +637,7 @@ static void PrintMarginLayout(
*h = wControlGetPosY( printMarginPLs[I_PM_FIRST+2].control ) + wControlGetHeight( printMarginPLs[I_PM_FIRST+2].control );
return;
}
- wPos_t x0, y0;
+ wWinPix_t x0, y0;
x0 = (aPmLines[index-I_PM_FIRST].x0+aPmLines[index-I_PM_FIRST].x1)/2;
y0 = (aPmLines[index-I_PM_FIRST].y0+aPmLines[index-I_PM_FIRST].y1)/2;
x0 -= pmxoff;
@@ -690,8 +686,8 @@ static void DoPrintMarginOk( void * context )
sprintf( message, "%s-marginL", sPrinterName );
wPrefSetFloat( "printer", message, printMargin.left );
SetPageSize( TRUE );
- for ( int inx = 0; inx < sizeof printPLs/sizeof printPLs[0]; inx++ ) {
- if ( printPLs[inx].context == (void*)2 )
+ for ( int inx = 0; inx < COUNT( printPLs ); inx++ ) {
+ if ( printPLs[inx].context == I2VP(2) )
ParamLoadControl( &printPG, inx );
}
DoPrintScale();
@@ -719,17 +715,17 @@ static void DoPrintMargin( void )
DoPrintSetup();
}
if ( printMarginWin == NULL ) {
- wPos_t x=10, y=10;
+ int x=10, y=10;
printMarginWin = ParamCreateDialog( &printMarginPG, MakeWindowTitle(_("Print Margins")), _("Ok"), DoPrintMarginOk, NULL, TRUE, PrintMarginLayout, F_BLOCK, PrintMarginDlgUpdate );
if ( printMarginWin == NULL )
return;
- for ( int i=0; i<sizeof aPmLines / sizeof aPmLines[0]; i++ ) {
+ for ( int i=0; i<COUNT( aPmLines ); i++ ) {
aPmLines[i].x0 += x;
aPmLines[i].x1 += x;
aPmLines[i].y0 += y;
aPmLines[i].y1 += y;
}
- wLineCreate( printMarginWin, NULL, sizeof aPmLines / sizeof aPmLines[0], aPmLines );
+ wLineCreate( printMarginWin, NULL, COUNT( aPmLines ), aPmLines );
}
wMessageSetValue( (wMessage_p)printMarginPLs[I_PM_MESSAGE].control, sPrinterName );
// Enable Reset button if we've changed anything
@@ -794,8 +790,8 @@ static void PrintSnapShot( void )
scaleH = 1;
for (i=0;i<3;i++) {
size = mapD.size;
- size.x += 0.75*scaleH;
- size.y += 0.75*scaleH;
+ size.x += 2*0.5*scaleH;
+ size.y += 2*0.5*scaleH;
if (printGaudy)
size.y += 1.0*scaleH;
scaleX = size.x/pageSize.x;
@@ -806,8 +802,8 @@ static void PrintSnapShot( void )
scaleV = 1;
for (i=0;i<3;i++) {
size = mapD.size;
- size.x += 0.75*scaleV;
- size.y += 0.75*scaleV;
+ size.x += 2*0.5*scaleV;
+ size.y += 2*0.5*scaleV;
if (printGaudy)
size.y += 1.0*scaleV;
scaleX = size.x/pageSize.y;
@@ -830,8 +826,8 @@ static void PrintSnapShot( void )
currPrintGrid.orig.y = maxPageSize.x-0.5*printScale;
currPrintGrid.angle = 90.0;
} else {*/
- currPrintGrid.orig.x = -0.5*printScale;
- currPrintGrid.orig.y = -0.5*printScale;
+ currPrintGrid.orig.x = -0.5*printScale; //Bigger rulers
+ currPrintGrid.orig.y = -0.5*printScale; //Bigger rules
currPrintGrid.angle = 0.0;
/* }*/
currPrintGrid.size = maxPageSize;
@@ -854,7 +850,7 @@ static void DrawRegistrationMarks( drawCmd_p d )
long x, y, delta, divisor;
coOrd p0, p1, qq, q0, q1;
POS_T len;
- char msg[10];
+ char msg[STR_SIZE];
wFont_p fp;
wFontSize_t fs;
fp = wStandardFont( F_TIMES, FALSE, FALSE );
@@ -921,7 +917,9 @@ FormatPageNumber(int x, int y)
char *result;
DynStringMalloc(&formatted, 16);
- if (x > 0 && x <= bm.x1 && y > 0 && y <= bm.y1) {
+ x -= bm.x0-1;
+ y -= bm.y0-1;
+ if (x > 0 && x <= bm.x1-bm.x0 && y > 0 && y <= bm.y1-bm.y0) {
DynStringPrintf(&formatted, "(%d/%d)", x, y);
} else {
DynStringCatCStr(&formatted, "(-/-)");
@@ -944,7 +942,7 @@ FormatPageNumber(int x, int y)
*/
static bool
-PrintPageNumber(wPos_t x, wPos_t y, DIST_T width, DIST_T height)
+PrintPageNumber(int x, int y, DIST_T width, DIST_T height)
{
coOrd printPosition;
coOrd textSize;
@@ -953,23 +951,26 @@ PrintPageNumber(wPos_t x, wPos_t y, DIST_T width, DIST_T height)
wFont_p fp = wStandardFont(F_HELV, TRUE, FALSE);
wFontSize_t fs = 64.0;
- positionText = FormatPageNumber(x + 1, y + 1);
+ positionText = FormatPageNumber(x, y);
- // even though we're printing into page_d, mainD must be used here
- DrawTextSize(&mainD, positionText, fp, fs, TRUE, &textSize);
+ if (strcmp(positionText,"(-/-)") != 0) {
+ // even though we're printing into page_d, mainD must be used here
+ DrawTextSize(&mainD, positionText, fp, fs, TRUE, &textSize);
- if (printFormat == PORTRAIT) {
- printPosition.x = (width - textSize.x) / 2;
- printPosition.y = (height - textSize.y) / 2;
- } else {
- printPosition.x = (height - textSize.x) / 2;
- printPosition.y = (width - textSize.y) / 2;
- }
+ if (printFormat == PORTRAIT) {
+ printPosition.x = (width - textSize.x) / 2;
+ printPosition.y = (height - textSize.y) / 2;
+ } else {
+ printPosition.x = (height - textSize.x) / 2;
+ printPosition.y = (width - textSize.y) / 2;
+ }
- page_d.funcs->options |= wDrawOutlineFont;
- DrawString(&page_d, printPosition, 0.0, positionText, fp, fs,
- wDrawColorGray(70));
- page_d.funcs->options &= ~wDrawOutlineFont;
+ unsigned long options = page_d.options;
+ page_d.options |= DC_OUTLINE;
+ DrawString(&page_d, printPosition, 0.0, positionText, fp, fs,
+ wDrawColorGray(70));
+ page_d.options = options;
+ }
free(positionText);
@@ -992,7 +993,9 @@ PrintNextPageNumberAt(int x, int y, coOrd position)
wFontSize_t fs = 8.0;
pageNumber = FormatPageNumber(x, y);
- DrawString(&page_d, position, 0.0, pageNumber, fp, fs, wDrawColorBlack);
+ //Suppress garbage page numbers
+ if (strcmp(pageNumber,"(-/-)") != 0)
+ DrawString(&page_d, position, 0.0, pageNumber, fp, fs, wDrawColorBlack);
free(pageNumber);
}
@@ -1020,7 +1023,7 @@ PrintNextPageNumbers(int x, int y, DIST_T pageW, DIST_T pageH)
p00.x = pageH / 2.0 - 20.0 / 72.0;
p00.y = pageW - 10.0 / 72.0;
}
- PrintNextPageNumberAt(x + 1, y + 2, p00);
+ PrintNextPageNumberAt(x, y + 1, p00);
// below
if (printFormat == PORTRAIT) {
@@ -1028,7 +1031,7 @@ PrintNextPageNumbers(int x, int y, DIST_T pageW, DIST_T pageH)
} else {
p00.y = 10.0 / 72.0;
}
- PrintNextPageNumberAt(x + 1, y, p00);
+ PrintNextPageNumberAt(x, y-1, p00);
// right
if (printFormat == PORTRAIT) {
@@ -1038,7 +1041,7 @@ PrintNextPageNumbers(int x, int y, DIST_T pageW, DIST_T pageH)
p00.y = pageW / 2 + 10.0 / 72.0;
p00.x = pageH - 20.0 / 72.0;
}
- PrintNextPageNumberAt(x + 2, y + 1, p00);
+ PrintNextPageNumberAt(x+1, y, p00);
// left
if (printFormat == PORTRAIT) {
@@ -1046,7 +1049,7 @@ PrintNextPageNumbers(int x, int y, DIST_T pageW, DIST_T pageH)
} else {
p00.x = 10.0 / 72.0;
}
- PrintNextPageNumberAt(x, y + 1, p00);
+ PrintNextPageNumberAt(x-1, y, p00);
return (TRUE);
}
@@ -1142,22 +1145,31 @@ static BOOL_T PrintPage(
}
}
if (printRotate) {
- wPrintClip( (wPos_t)(clipOrig.y*print_d.dpi), (wPos_t)(clipOrig.x*print_d.dpi),
- (wPos_t)(clipSize.y*print_d.dpi), (wPos_t)(clipSize.x*print_d.dpi) );
+ wPrintClip( (clipOrig.y*print_d.dpi), (clipOrig.x*print_d.dpi),
+ (clipSize.y*print_d.dpi), (clipSize.x*print_d.dpi) );
} else {
- wPrintClip( (wPos_t)(clipOrig.x*print_d.dpi), (wPos_t)(clipOrig.y*print_d.dpi),
- (wPos_t)(clipSize.x*print_d.dpi), (wPos_t)(clipSize.y*print_d.dpi) );
+ wPrintClip( (clipOrig.x*print_d.dpi), (clipOrig.y*print_d.dpi),
+ (clipSize.x*print_d.dpi), (clipSize.y*print_d.dpi) );
}
p[0].x = p[3].x = 0.0;
p[1].x = p[2].x = roomSize.x;
p[0].y = p[1].y = 0.0;
p[2].y = p[3].y = roomSize.y;
- DrawRuler( &print_d, p[0], p[1], 0.0, TRUE, FALSE, wDrawColorBlack );
- DrawRuler( &print_d, p[0], p[3], 0.0, TRUE, TRUE, wDrawColorBlack );
- DrawRuler( &print_d, p[1], p[2], 0.0, FALSE, FALSE, wDrawColorBlack );
- DrawRuler( &print_d, p[3], p[2], 0.0, FALSE, TRUE, wDrawColorBlack );
- if ( printRuler && currPrintGrid.angle == 0 ) {
+ BOOL_T left_clear = FALSE, right_clear = FALSE, base_clear = FALSE, top_clear = FALSE;
+
+ if (currPrintGrid.orig.x <= -0.5*printScale) left_clear = TRUE;
+ if (currPrintGrid.orig.y <= -0.5*printScale) base_clear = TRUE;
+ if (clipOrig.x + clipSize.x > roomSize.x + 0.5*printScale) right_clear = TRUE;
+ if (clipOrig.y + clipSize.y > roomSize.y + 0.5*printScale) top_clear = TRUE;
+
+ if (printRuler != 2) { /* Not None so Edge or Every */
+ DrawRuler( &print_d, p[0], p[1], 0.0, TRUE, !base_clear, wDrawColorBlack );
+ DrawRuler( &print_d, p[0], p[3], 0.0, TRUE, left_clear, wDrawColorBlack );
+ DrawRuler( &print_d, p[1], p[2], 0.0, TRUE, right_clear, wDrawColorBlack );
+ DrawRuler( &print_d, p[3], p[2], 0.0, TRUE, !top_clear, wDrawColorBlack );
+ }
+ if ( printRuler==1 && currPrintGrid.angle == 0 ) { /* Every Page and not rotated origin */
if ( !printRotate ) {
p[2] = p[3] = print_d.orig;
p[3].x += print_d.size.x;
@@ -1174,47 +1186,51 @@ static BOOL_T PrintPage(
p[3].y = print_d.orig.y;
}
if ( p[2].x > 0 )
- minP.x = p[2].x + 0.4 * print_d.scale;
+ minP.x = p[2].x + 0.5 * print_d.scale;
else
minP.x = 0.0;
if ( p[3].x < roomSize.x )
- maxP.x = p[3].x - 0.2 * print_d.scale;
+ maxP.x = p[3].x - 0.5 * print_d.scale;
else
maxP.x = roomSize.x;
- if ( p[2].y > 0 )
- minP.y = p[2].y + 0.4 * print_d.scale;
+ if ( p[2].y > 0 )
+ minP.y = p[2].y + 0.5 * print_d.scale;
else
minP.y = 0.0;
if ( p[3].y < roomSize.y )
- maxP.y = p[3].y - 0.2 * print_d.scale;
+ maxP.y = p[3].y - 0.5 * print_d.scale;
else
maxP.y = roomSize.y;
p[0].y = 0.0;
p[1].y = maxP.y - minP.y;
- if ( p[2].x > 0 ) {
- p[0].x = p[1].x = p[2].x + 0.4 * print_d.scale;
+ if ( p[2].x > 0.5* print_d.scale ) {
+ p[0].x = p[1].x = p[2].x + 0.5* print_d.scale;
DrawRuler( &print_d, p[0], p[1], minP.y, TRUE, TRUE, wDrawColorBlack );
}
- if ( p[3].x < roomSize.x ) {
- p[0].x = p[1].x = p[3].x - 0.2 * print_d.scale;
- DrawRuler( &print_d, p[0], p[1], minP.y, FALSE, FALSE, wDrawColorBlack );
+ if ( p[3].x < roomSize.x - 0.5 * print_d.scale ) {
+ p[0].x = p[1].x = p[3].x - 0.5 * print_d.scale;
+ DrawRuler( &print_d, p[0], p[1], minP.y, TRUE, FALSE, wDrawColorBlack );
}
p[0].x = 0;
p[1].x = maxP.x - minP.x;
- if ( p[2].y > 0 ) {
- p[0].y = p[1].y = p[2].y + 0.4 * print_d.scale;
+ if ( p[2].y > 0.5 * print_d.scale ) {
+ p[0].y = p[1].y = p[2].y + 0.5 * print_d.scale;
DrawRuler( &print_d, p[0], p[1], minP.x, TRUE, FALSE, wDrawColorBlack );
}
- if ( p[3].y < roomSize.y ) {
- p[0].y = p[1].y = p[3].y - 0.2 * print_d.scale;
- DrawRuler( &print_d, p[0], p[1], minP.x, FALSE, TRUE, wDrawColorBlack );
+ if ( p[3].y < roomSize.y - 0.5 * print_d.scale) {
+ p[0].y = p[1].y = p[3].y - 0.5 * print_d.scale;
+ DrawRuler( &print_d, p[0], p[1], minP.x, TRUE, TRUE, wDrawColorBlack );
}
}
if (printGrid)
DrawSnapGrid( &print_d, mapD.size, FALSE );
roadbedWidth = printRoadbed?printRoadbedWidth:0.0;
- printCenterLines = printCenterLine;
+ if (printCenterLine) {
+ print_d.options |= DC_CENTERLINE;
+ } else {
+ print_d.options &= ~DC_CENTERLINE;
+ }
DrawTracks( &print_d, print_d.scale, minP, maxP );
if (printRegistrationMarks && printScale == 1)
DrawRegistrationMarks( &print_d );
@@ -1296,7 +1312,7 @@ static void DoResetGrid( void )
static void PrintGridRotate( void * pangle )
{
- ANGLE_T angle = (ANGLE_T)(long)pangle;
+ ANGLE_T angle = (ANGLE_T)VP2L(pangle);
currPrintGrid.orig = cmdMenuPos;
currPrintGrid.angle += angle/1000;
newPrintGrid = currPrintGrid;
@@ -1330,9 +1346,9 @@ static void PrintDlgUpdate(
void * valueP )
{
if ( inx < 0 ) return;
- if ( pg->paramPtr[inx].context == (void*)1 )
+ if ( pg->paramPtr[inx].context == I2VP(1) )
DoPrintScale();
- else if ( pg->paramPtr[inx].context == (void*)2 )
+ else if ( pg->paramPtr[inx].context == I2VP(2) )
PrintUpdate( inx );
ParamControlActive( &printPG, I_RULER, currPrintGrid.angle == 0 );
TempRedraw(); // PrintDlgUpdate
@@ -1474,6 +1490,9 @@ LOG( log_print, 2, ( "Page size = %0.3f %0.3f\n", currPrintGrid.size.x, currPrin
}
}
+
+#include "bitmaps/doc-print.xpm"
+
EXPORT wIndex_t InitCmdPrint( wMenu_p menu )
{
ParamRegister( &printPG );
@@ -1483,7 +1502,7 @@ EXPORT wIndex_t InitCmdPrint( wMenu_p menu )
printGridPopupM = MenuRegister( "Print Grid Rotate" );
AddRotateMenu( printGridPopupM, PrintGridRotate );
ParamRegister( &printMarginPG );
- return InitCommand( menu, CmdPrint, N_("Print..."), NULL, LEVEL0, IC_LCLICK|IC_POPUP3|IC_CMDMENU, ACCL_PRINT );
+ return AddMenuButton( menu, CmdPrint, "cmdPrint", N_("Print..."), wIconCreatePixMap(doc_print_xpm[iconSize]), LEVEL0, IC_LCLICK|IC_POPUP3|IC_CMDMENU, ACCL_PRINT, NULL );
}
/*****************************************************************************
@@ -1495,10 +1514,6 @@ EXPORT wIndex_t InitCmdPrint( wMenu_p menu )
wDrawable_t printD, mainD;
-void wDrawHilight( void * d, coOrd orig, coOrd size )
-{
- lprintf( "wDrawHilight (%0.3f %0.3f) (%0.3f %0.3f)\n", orig.x, orig.y, size.x, size.y );
-}
void PrintPage( void * d, wIndex_t mode , wIndex_t x, wIndex_t y )
{
lprintf( "printPage %dx%d at (%0.3f %0.3f)\n", x, y, orig.x, orig.y );
@@ -1563,7 +1578,7 @@ main( INT_T argc, char * argv[] )
mapD.size.x = 4*12;
mapD.size.y = 3*12;
printD.scale = 1.0;
- for (i=0; i<(sizeof cmds)/(sizeof cmds[0]); i++) {
+ for (i=0; i<COUNT( cmds ); i++) {
switch (cmds[i].cmd) {
case C_START:
CmdPrint( cmds[i].cmd );