diff options
Diffstat (limited to 'app/bin/cprint.c')
-rw-r--r-- | app/bin/cprint.c | 251 |
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 ); |