Changeset 91 for trunk/Lucide/SOURCE


Ignore:
Timestamp:
Aug 2, 2006, 3:02:52 PM (15 years ago)
Author:
Eugene Romanenko
Message:

bitmap printing, preliminary postscript printing, export to PS for djvu plugin, other improvements

Location:
trunk/Lucide/SOURCE
Files:
28 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/SOURCE/gui/aboutDlg.cpp

    r66 r91  
    4141#include <malloc.h>
    4242
    43 #include "lucide.h"
     43#include "globals.h"
    4444#include "luutils.h"
    4545#include "lucide_res.h"
  • trunk/Lucide/SOURCE/gui/docViewer.cpp

    r86 r91  
    6868
    6969// DocumentViewer constructor
    70 DocumentViewer::DocumentViewer( HAB _hab, HWND hWndFrame )
    71 {
    72     hab         = _hab;
     70DocumentViewer::DocumentViewer( HWND hWndFrame )
     71{
    7372    hMainFrame  = hWndFrame;
    7473    sHscrollMax = 0;
     
    9493    realzoom    = 1.0;
    9594    rotation    = 0;
    96     ev          = somGetGlobalEnvironment();
    9795    pixbuf      = NULL;
    9896    spos_x      = 0;
     
    179177
    180178// static, registration of a window class
    181 void DocumentViewer::registerClass( HAB hab )
     179void DocumentViewer::registerClass()
    182180{
    183181    WinRegisterClass( hab, "er.docview", docViewProc, CS_SIZEREDRAW, sizeof( ULONG ) * 2 );
     
    524522        delete buf;
    525523
    526         _this->foundrects[ i ] = _this->doc->searchText( _this->ev, i,
     524        _this->foundrects[ i ] = _this->doc->searchText( ev, i,
    527525                                        (char *)_this->searchString, _this->caseSensitive );
    528526        if ( _this->foundrects[ i ] != NULL )
     
    815813        pbmi.cPlanes = 1;
    816814        pbmi.cBitCount = _this->bpp * 8;
    817         GpiDrawBits( hps, _this->pixbuf->getDataPtr( _this->ev ), &pbmi, 4L,
     815        GpiDrawBits( hps, _this->pixbuf->getDataPtr( ev ), &pbmi, 4L,
    818816                     aptlPoints, lRop, BBO_IGNORE );
    819817
     
    851849                LONG rclx = pda->drawrect.xRight - pda->drawrect.xLeft;
    852850                LONG rcly = pda->drawrect.yTop - pda->drawrect.yBottom;
    853                 _this->pixbuf = new LuPixbuf( _this->ev, rclx, rcly, _this->bpp );
    854                 _this->doc->renderPageToPixbufAsynch( _this->ev, pda->pagenum,
     851                _this->pixbuf = new LuPixbuf( ev, rclx, rcly, _this->bpp );
     852                _this->doc->renderPageToPixbufAsynch( ev, pda->pagenum,
    855853                       pda->startpos.x, pda->startpos.y, rclx, rcly, _this->realzoom,
    856854                       _this->rotation, _this->pixbuf,
     
    877875                    WinReleasePS( hps );
    878876                }
    879                 WinSetRectEmpty( _this->hab, &_this->savedRcl );
     877                WinSetRectEmpty( thab, &_this->savedRcl );
    880878                delete _this->drawareas;
    881879                _this->drawareas = NULL;
  • trunk/Lucide/SOURCE/gui/docViewer.h

    r87 r91  
    5757{
    5858    public:
    59         DocumentViewer( HAB _hab, HWND hWndFrame );
     59        DocumentViewer( HWND hWndFrame );
    6060        virtual ~DocumentViewer();
    6161
     
    8181        void setFullscreen( bool _fullscreen );
    8282
    83         static void registerClass( HAB hab );
     83        static void registerClass();
    8484
    8585        // Internal stuffs
     
    129129
    130130        LuDocument *doc;
    131         HAB hab;
    132131        HWND hMainFrame;
    133132        HWND hWndDocFrame;
     
    149148        HPS hpsBuffer;
    150149        HDC hdcBuffer;
    151         Environment *ev;
    152150        LuPixbuf *pixbuf;
    153151        short bpp;
  • trunk/Lucide/SOURCE/gui/fontsInfoDlg.cpp

    r35 r91  
    4040#include <ludoc.xh>
    4141
     42#include "globals.h"
    4243#include "luutils.h"
    4344#include "fontsInfoDlg.h"
     
    8283void FontsInfoDlg::loadList()
    8384{
    84     Environment *ev = somGetGlobalEnvironment();
    8585    LuDocument_LuFontInfoSequence *fonts = doc->getFontInfo( ev );
    8686
  • trunk/Lucide/SOURCE/gui/indexWindow.cpp

    r85 r91  
    5050
    5151// IndexWindow constructor
    52 IndexWindow::IndexWindow( HAB _hab, HWND hWndFrame )
    53 {
    54     hab         = _hab;
     52IndexWindow::IndexWindow( HWND hWndFrame )
     53{
    5554    hMainFrame  = hWndFrame;
    5655    hWndIndex   = NULLHANDLE;
    5756    doc         = NULL;
    5857    totalpages  = 0;
    59     ev          = somGetGlobalEnvironment();
    6058
    6159    hWndPanel = WinCreateWindow( hWndFrame, WC_ER_SPLITTER, "",
  • trunk/Lucide/SOURCE/gui/indexWindow.h

    r35 r91  
    4949{
    5050    public:
    51         IndexWindow( HAB _hab, HWND hWndFrame );
     51        IndexWindow( HWND hWndFrame );
    5252        virtual ~IndexWindow();
    5353
     
    7070       
    7171        LuDocument *doc;
    72         HAB hab;
    7372        HWND hMainFrame;
    7473        HWND hWndPanel;
    7574        HWND hWndBar;
    7675        HWND hWndIndex;
    77                 Environment *ev;
    7876                long totalpages;
    7977};
  • trunk/Lucide/SOURCE/gui/intern.cpp

    r35 r91  
    4747#include <io.h>
    4848
    49 #include "lucide.h"
     49#include "globals.h"
    5050#include "wwbtn.h"
    5151#include "luutils.h"
  • trunk/Lucide/SOURCE/gui/lucide.cpp

    r90 r91  
    9494
    9595
    96 bool  Lucide::dontSwitchPage = false;
    97 SHORT Lucide::splitterPos    = 100;
    98 bool  Lucide::showIndex      = true;
    99 bool  Lucide::isMaxview      = false;
    100 bool  Lucide::isFullscreen   = false;
    101 LuWindowPos Lucide::winPos   = {0};
     96bool         Lucide::dontSwitchPage                = false;
     97SHORT        Lucide::splitterPos                   = 100;
     98bool         Lucide::showIndex                     = true;
     99bool         Lucide::isMaxview                     = false;
     100bool         Lucide::isFullscreen                  = false;
     101LuWindowPos  Lucide::winPos                        = {0};
     102char         Lucide::docFullName[ CCHMAXPATH ]     = "";
     103char         Lucide::docFileName[ CCHMAXPATHCOMP ] = "";
     104// static data for asynch loading document
     105ProgressDlg *Lucide::loadProgressDlg               = NULL;
     106bool         Lucide::docLoaded                     = false;;
     107char        *Lucide::loadError                     = NULL;
    102108
    103109
     
    328334
    329335
    330 // static data for asynch loading document
    331 ProgressDlg *Lucide::loadProgressDlg       = NULL;
    332 char         Lucide::docName[ CCHMAXPATH ] = "";
    333 bool         Lucide::docLoaded             = false;;
    334 char        *Lucide::loadError             = NULL;
    335 
    336336void Lucide::loadthread( void *p )
    337337{
     
    339339    HMQ thmq = WinCreateMsgQueue( thab, 0 );
    340340
    341     docLoaded = doc->loadFile( ev, docName, NULL, &loadError );
     341    docLoaded = doc->loadFile( ev, docFullName, NULL, &loadError );
    342342    loadProgressDlg->hide();
    343343
     
    379379            else
    380380            {
    381                 strcpy( docName, fn );
     381                strcpy( docFullName, fn );
    382382                docLoaded = false;;
    383383                loadError = NULL;
     
    397397                    char _ex[ _MAX_EXT ];
    398398                    _splitpath( fn, NULL, NULL, _fn, _ex );
    399                     snprintf( t, 2048, "%s%s - %s", _fn, _ex, title );
     399                    strcpy( docFileName, _fn );
     400                    strcat( docFileName, _ex );
     401                    snprintf( t, 2048, "%s - %s", docFileName, title );
    400402                    WinSetWindowText( hWndFrame, t );
    401403                    delete t;
     
    466468    char fil[ _MAX_FNAME ] = "";
    467469    char ext[ _MAX_EXT ] = "";
    468     _splitpath( docName, NULL, NULL, fil, ext );
     470    _splitpath( docFullName, NULL, NULL, fil, ext );
    469471    snprintf( fd->szFullFile, sizeof( fd->szFullFile ),
    470472                "%s%s%s", dirbuf, fil, ext );
     
    642644                    if ( d->showDialog() == DID_OK ) {
    643645                        // print
    644                         //printDocument( doc, d->getCurrentQInfo() );
     646                        PrintSetup *p = new PrintSetup;
     647                        memset( p, 0, sizeof( PrintSetup ) );
     648                        d->getPrintSetup( p );
     649                        printDocument( hWndFrame, doc, Lucide::docFileName, p );
     650                        delete p;
    645651                    }
    646652                    delete d;
     
    842848                                     ID_SPLITTER, NULL, NULL );
    843849
    844     indexWin = new IndexWindow( hab, hWndFrame );
    845 
    846     DocumentViewer::registerClass( hab );
    847 
    848     docViewer = new DocumentViewer( hab, hWndFrame );
     850    indexWin = new IndexWindow( hWndFrame );
     851
     852    DocumentViewer::registerClass();
     853
     854    docViewer = new DocumentViewer( hWndFrame );
    849855
    850856    WinSendMsg( hVertSplitter, SBM_SETWINDOWS,
  • trunk/Lucide/SOURCE/gui/lucide.h

    r89 r91  
    3636#define __LUCIDE_H
    3737
    38 extern const char *appName;
    39 extern const char *appVersion;
    40 extern HAB hab;
    41 extern char deffont[];
    42 extern int deffontlen;
     38#include "globals.h"
     39
    4340
    4441class LuDocument;
     
    6360   
    6461                static ProgressDlg *loadProgressDlg;
    65                 static char docName[ CCHMAXPATH ];
     62                static char docFullName[ CCHMAXPATH ];
    6663                static bool docLoaded;
    6764                static char *loadError;
     
    7673
    7774    public:
     75                static char docFileName[ CCHMAXPATHCOMP ];
    7876        static bool dontSwitchPage;
    7977        static SHORT splitterPos;
  • trunk/Lucide/SOURCE/gui/makefile

    r90 r91  
    11.autodepend
    22
    3 TEST=1
     3TEST=0
    44VERSION=Beta 2.1
    55
  • trunk/Lucide/SOURCE/gui/messages.cpp

    r88 r91  
    3636
    3737
    38 // Some menu item, which used not only in menu
    39 const char *MENU_SINGLE_PAGE = "MENU_SINGLE_PAGE";
    40 const char *MENU_CONTINUOUS  = "MENU_CONTINUOUS";
    41 
    42 
    4338// Toolbar hints
    4439const char *TBHINT_OPEN          = "TBHINT_OPEN";
     
    6661const char *MSGS_OVERWRITE_FILE   = "MSGS_OVERWRITE_FILE";
    6762const char *MSGS_FILE_SAVE_ERROR  = "MSGS_FILE_SAVE_ERROR";
     63
     64// Settings dialog
     65const char *SD_SINGLE_PAGE = "SD_SINGLE_PAGE";
     66const char *SD_CONTINUOUS  = "SD_CONTINUOUS";
    6867
    6968// Plugins List columns titles
     
    9594// 'Go to page' dialog
    9695const char *GTP_OF = "GTP_OF";
     96
     97// Printing, other 'print'-related messages
     98const char *PRINT_PRINTING_PAGE_OF      = "PRINT_PRINTING_PAGE_OF";
     99const char *PRINT_GENERATING_POSTSCRIPT = "PRINT_GENERATING_POSTSCRIPT";
     100const char *PRINT_SPOOLING_POSTSCRIPT   = "PRINT_SPOOLING_POSTSCRIPT";
     101const char *PRINT_FAILED                = "PRINT_FAILED";
     102
  • trunk/Lucide/SOURCE/gui/messages.h

    r88 r91  
    3737
    3838
    39 // Some menu item, which used not only in menu
    40 extern const char *MENU_SINGLE_PAGE;
    41 extern const char *MENU_CONTINUOUS;
    42 
    4339// Toolbar hints
    4440extern const char *TBHINT_OPEN;
     
    6561extern const char *MSGS_OVERWRITE_FILE;
    6662extern const char *MSGS_FILE_SAVE_ERROR;
     63
     64// Settings dialog
     65extern const char *SD_SINGLE_PAGE;
     66extern const char *SD_CONTINUOUS;
    6767
    6868// Plugins List columns titles
     
    9595extern const char *GTP_OF;
    9696
     97// Printing, other 'print'-related messages
     98extern const char *PRINT_PRINTING_PAGE_OF;
     99extern const char *PRINT_GENERATING_POSTSCRIPT;
     100extern const char *PRINT_SPOOLING_POSTSCRIPT;
     101extern const char *PRINT_FAILED;
     102
    97103
    98104#endif // __MESSAGES_H
  • trunk/Lucide/SOURCE/gui/print.cpp

    r90 r91  
    3535#define INCL_WIN
    3636#define INCL_GPI
     37#define INCL_DOS
    3738#define INCL_DEV
    3839#define INCL_ERRORS
     
    4445
    4546#include <string.h>
    46 
     47#include <process.h>
     48#include <stdio.h>
     49#include <io.h>
     50
     51#include "globals.h"
     52#include "progressDlg.h"
    4753#include "print.h"
     54#include "luutils.h"
     55#include "messages.h"
    4856
    4957// OpenWatcom headers doesn't have GpiDrawBits() declaration
     
    5462
    5563#define UNITS_MULTIPLIER    100
    56 
     64#define STD_IMAGE_ZOOM      2.0
     65#define HIGH_IMAGE_ZOOM     3.0
     66#define PS_PRINT_BUF_SIZE   32768
    5767#define TEST_MARGIN         10
    5868
    59 void printPage( LuDocument *doc, long page, HPS hpsPrinter, PHCINFO pcurForm );
    60 void queryCurrentForm( HDC hdcPrinter, PHCINFO pcurForm );
    61 
    62 void printDocument( LuDocument *doc, void *q )
    63 {
    64     PPRQINFO3    pQueueInfo = (PPRQINFO3)q;
     69
     70class LucidePrinting
     71{
     72    public:
     73        LucidePrinting( HWND hWndFrame, LuDocument *_doc,
     74                        const char *_title, PrintSetup *_psetup );
     75        ~LucidePrinting();
     76        void doPrint();
     77
     78    private:
     79        bool queryCurrentForm( HAB lhab, PHCINFO pcurForm );
     80        void printPagePm( long page, HPS hpsPrinter, PHCINFO pcurForm );
     81        bool doPmPrint( HAB lhab );
     82        bool doPsPrint( HAB lhab );
     83
     84        HWND hFrame;
     85        LuDocument *doc;
     86        char *title;
     87        PrintSetup *psetup;
     88        bool abortPrinting;
     89        ProgressDlg *progressDlg;
     90
     91        static void printabort( void *data );
     92        static void printthread( void *data );
     93};
     94
     95
     96void printDocument( HWND hWndFrame, LuDocument *doc, const char *title, PrintSetup *psetup )
     97{
     98    LucidePrinting *p = new LucidePrinting( hWndFrame, doc, title, psetup );
     99    p->doPrint();
     100}
     101
     102
     103LucidePrinting::LucidePrinting( HWND hWndFrame, LuDocument *_doc,
     104                                const char *_title, PrintSetup *_psetup )
     105{
     106    hFrame = hWndFrame;
     107    doc    = _doc;
     108    title  = newstrdup( _title );
     109    psetup = new PrintSetup;
     110    memcpy( psetup, _psetup, sizeof( PrintSetup ) );
     111    abortPrinting = false;
     112    progressDlg = new ProgressDlg( hWndFrame );
     113}
     114
     115LucidePrinting::~LucidePrinting()
     116{
     117    delete title;
     118    delete psetup;
     119    delete progressDlg;
     120}
     121
     122void LucidePrinting::doPrint()
     123{
     124    progressDlg->setBreakFunc( printabort, this );
     125    progressDlg->setText( "" );
     126    progressDlg->show( printthread, this );
     127}
     128
     129bool LucidePrinting::doPmPrint( HAB lhab )
     130{
    65131    CHAR         achDriverName[ DRIVERNAME_LENGTH ] = "";
     132    DEVOPENSTRUC dos   = { 0 };
    66133    SIZEL        sizel = { 0 };
    67     DEVOPENSTRUC dos   = { 0 };
     134
     135    HCINFO curForm = { 0 };
     136    if ( !queryCurrentForm( lhab, &curForm ) ) {
     137        return false;
     138    }
    68139
    69140    // build a devopenstruct for the call to DevOpenDC
    70     dos.pszLogAddress = pQueueInfo->pszName;
    71     strcpy( achDriverName, pQueueInfo->pszDriverName );
     141    dos.pszLogAddress = psetup->QueueInfo.pszName;              // 1
     142    strcpy( achDriverName, psetup->QueueInfo.pszDriverName );
    72143    achDriverName[ strcspn( achDriverName, "." ) ] = '\0';
    73     dos.pszDriverName = achDriverName;
    74     dos.pdriv = pQueueInfo->pDriverData;
    75 
    76     HDC hdcPrinter = DevOpenDC( hab, OD_QUEUED, "*", 3L, (PDEVOPENDATA)&dos, NULLHANDLE );
     144    dos.pszDriverName = achDriverName;                          // 2
     145    dos.pdriv         = psetup->QueueInfo.pDriverData;          // 3
     146    dos.pszDataType   = "PM_Q_STD";                             // 4
     147
     148    HDC hdcPrinter = DevOpenDC( lhab, OD_QUEUED, "*", 4L, (PDEVOPENDATA)&dos, NULLHANDLE );
    77149    if ( hdcPrinter == DEV_ERROR ) {
    78         somPrintf( "DevOpenDC error\n" );
    79         return;
     150        return false;
    80151    }
    81152
    82153    // PS in HiMetric, 0.01 mm
    83     HPS hpsPrinter = GpiCreatePS( hab, hdcPrinter, &sizel, PU_HIMETRIC | GPIA_ASSOC );
     154    HPS hpsPrinter = GpiCreatePS( lhab, hdcPrinter, &sizel, PU_HIMETRIC | GPIA_ASSOC );
    84155    if ( hpsPrinter == DEV_ERROR ) {
    85156        DevCloseDC( hdcPrinter );
    86         somPrintf( "GpiCreatePS error\n" );
    87         return;
    88     }
    89 
    90     HCINFO curForm = { 0 };
    91     queryCurrentForm( hdcPrinter, &curForm );
    92     char *psz = "test";
     157        return false;
     158    }
     159
    93160    // Issue STARTDOC to begin printing
    94     DevEscape( hdcPrinter, DEVESC_STARTDOC, (LONG)strlen(psz), (PBYTE)psz, NULL, NULL );
    95 
    96     somPrintf( "begin!\n" );
    97 
    98     printPage( doc, 0, hpsPrinter, &curForm );
    99 
    100     somPrintf( "end!\n" );
    101 
    102     DevEscape( hdcPrinter, DEVESC_ENDDOC, 0L, NULL, NULL, NULL );
     161    DevEscape( hdcPrinter, DEVESC_STARTDOC, strlen(title), (PBYTE)title, NULL, NULL );
     162
     163    long totalpages = psetup->pgto - psetup->pgfrom + 1;
     164    for ( long pg = psetup->pgfrom; pg <= psetup->pgto; pg++ )
     165    {
     166        char *fmt = newstrdupL( PRINT_PRINTING_PAGE_OF );
     167        char *buf = new char[ 255 ];
     168        snprintf( buf, 255, fmt, pg, totalpages );
     169        progressDlg->setText( buf );
     170        delete fmt;
     171        delete buf;
     172
     173        printPagePm( pg - 1, hpsPrinter, &curForm );
     174
     175        if ( pg != psetup->pgto ) {
     176            DevEscape( hdcPrinter, DEVESC_NEWFRAME, 0L, NULL, NULL, NULL );
     177        }
     178
     179        if ( abortPrinting ) {
     180            break;
     181        }
     182    }
     183
     184    // Issue DEVESC_ENDDOC, or DEVESC_ABORTDOC if printing was aborted
     185    DevEscape( hdcPrinter, abortPrinting ? DEVESC_ABORTDOC : DEVESC_ENDDOC,
     186               0L, NULL, NULL, NULL );
    103187
    104188    // Release PS and DC
     
    106190    GpiDestroyPS( hpsPrinter );
    107191    DevCloseDC( hdcPrinter );
    108 }
    109 
    110 
    111 static void printPage( LuDocument *doc, long page, HPS hpsPrinter, PHCINFO pcurForm )
     192    return true;
     193}
     194
     195
     196void LucidePrinting::printPagePm( long page, HPS hpsPrinter, PHCINFO pcurForm )
    112197{
    113198    long bpp = doc->getBpp( ev );
     
    125210    LONG pheight = ( pcurForm->cy - mTop - mBottom ) * UNITS_MULTIPLIER;
    126211
    127     double zoom = __min( (double)pwidth / w, (double)pheight / h );
    128     if ( zoom > 2.0 ) {
    129         zoom = 2.0;
    130     }
    131 
    132     somPrintf( "Doc pgsz: %g/%g  zoom: %g\n", w, h, zoom );
    133     somPrintf( "Paper %s, pgsz: %d/%d\n", pcurForm->szFormname, pcurForm->cx, pcurForm->cy );
    134     somPrintf( "pw/ph %d/%d\n", pwidth, pheight );
     212    double zoom = 1.0;
     213    if ( doc->isScalable( ev ) )
     214    {
     215        double maxcoeff = psetup->higherQuality ? HIGH_IMAGE_ZOOM : STD_IMAGE_ZOOM;
     216        zoom = __min( (double)pwidth / w, (double)pheight / h );
     217        if ( zoom > maxcoeff ) {
     218            zoom = maxcoeff;
     219        }
     220    }
     221
     222    //somPrintf( "Doc pgsz: %g/%g  zoom: %g\n", w, h, zoom );
     223    //somPrintf( "Paper %s, pgsz: %d/%d\n", pcurForm->szFormname, pcurForm->cx, pcurForm->cy );
     224    //somPrintf( "pw/ph %d/%d\n", pwidth, pheight );
     225
    135226    w *= zoom;
    136227    h *= zoom;
     
    149240    LONG rclx = w;
    150241    LONG rcly = h;
    151     LuPixbuf *pixbuf = new LuPixbuf( ev, rclx, rcly, bpp );
    152     POINTL aptlPoints[4]={ rclDraw.xLeft, rclDraw.yBottom,
    153                            rclDraw.xRight-1, rclDraw.yTop-1,
    154                            0, 0, rclx, rcly };
    155 
    156     doc->renderPageToPixbuf( ev, page, 0, 0, rclx, rcly, zoom, 0, pixbuf );
    157 
    158     LONG lRop = ROP_SRCCOPY;
    159     BITMAPINFO2 pbmi;
    160     pbmi.cbFix = 16L;
    161     pbmi.cx = rclx;
    162     pbmi.cy = rcly;
    163     pbmi.cPlanes = 1;
    164     pbmi.cBitCount = bpp * 8;
    165     GpiDrawBits( hpsPrinter, pixbuf->getDataPtr( ev ), &pbmi, 4L,
    166                  aptlPoints, lRop, BBO_IGNORE );
    167     delete pixbuf;
    168 }
    169 
    170 
    171 static void queryCurrentForm( HDC hdcPrinter, PHCINFO pcurForm )
    172 {
    173     LONG lForms = DevQueryHardcopyCaps( hdcPrinter, 0, 0, NULL );
     242    if ( doc->isRenderIntoPS( ev ) )
     243    {
     244        doc->renderPageToPS( ev, page, 0, 0, rclx, rcly, zoom, 0, hpsPrinter, &rclDraw );
     245    }
     246    else
     247    {
     248        LuPixbuf *pixbuf = new LuPixbuf( ev, rclx, rcly, bpp );
     249        POINTL aptlPoints[4]={ rclDraw.xLeft, rclDraw.yBottom,
     250                               rclDraw.xRight-1, rclDraw.yTop-1,
     251                               0, 0, rclx, rcly };
     252
     253        doc->renderPageToPixbuf( ev, page, 0, 0, rclx, rcly, zoom, 0, pixbuf );
     254
     255        LONG lRop = ROP_SRCCOPY;
     256        BITMAPINFO2 pbmi;
     257        pbmi.cbFix = 16L;
     258        pbmi.cx = rclx;
     259        pbmi.cy = rcly;
     260        pbmi.cPlanes = 1;
     261        pbmi.cBitCount = bpp * 8;
     262        GpiDrawBits( hpsPrinter, pixbuf->getDataPtr( ev ), &pbmi, 4L,
     263                     aptlPoints, lRop, BBO_IGNORE );
     264        delete pixbuf;
     265    }
     266}
     267
     268
     269
     270bool LucidePrinting::doPsPrint( HAB lhab )
     271{
     272    CHAR         achDriverName[ DRIVERNAME_LENGTH ] = "";
     273    DEVOPENSTRUC dos   = { 0 };
     274    SIZEL        sizel = { 0 };
     275
     276    HCINFO curForm = { 0 };
     277    if ( !queryCurrentForm( lhab, &curForm ) ) {
     278        return false;
     279    }
     280
     281    char *generating_ps = newstrdupL( PRINT_GENERATING_POSTSCRIPT );
     282    progressDlg->setText( generating_ps );
     283    delete generating_ps;
     284
     285    // Magrins
     286    LONG mLeft   = __max( TEST_MARGIN, curForm.xLeftClip );
     287    LONG mBottom = __max( TEST_MARGIN, curForm.yBottomClip );
     288    LONG mRight  = __max( TEST_MARGIN, curForm.cx - curForm.xRightClip );
     289    LONG mTop    = __max( TEST_MARGIN, curForm.cy - curForm.yTopClip );
     290
     291    // Count paper page size in 1/72 inches
     292    double pwidth = ( (double)( curForm.cx - mLeft - mRight ) / 25.4 ) * 72.0;
     293    double pheight = ( (double)( curForm.cy - mTop - mBottom ) / 25.4 ) * 72.0;
     294
     295    char *tmpps = "TMPLUCID.PS";
     296    BOOL rc = doc->exportToPostScript( ev, tmpps, psetup->pgfrom-1, psetup->pgto-1,
     297                                       pwidth, pheight, false );
     298    if ( !rc ) {
     299        unlink( tmpps );
     300        return false;
     301    }
     302    if ( abortPrinting ) {
     303        unlink( tmpps );
     304        return true;
     305    }
     306
     307    char *spooling_ps = newstrdupL( PRINT_SPOOLING_POSTSCRIPT );
     308    progressDlg->setText( spooling_ps );
     309    delete spooling_ps;
     310
     311    // build a devopenstruct for the call to SplQmOpen
     312    dos.pszLogAddress = psetup->QueueInfo.pszName;              // 1
     313    strcpy( achDriverName, psetup->QueueInfo.pszDriverName );
     314    achDriverName[ strcspn( achDriverName, "." ) ] = '\0';
     315    dos.pszDriverName = achDriverName;                          // 2
     316    dos.pdriv         = psetup->QueueInfo.pDriverData;          // 3
     317    dos.pszDataType   = "PM_Q_RAW";                             // 4
     318
     319    HSPL hspl = SplQmOpen( "*", 4L, (PQMOPENDATA)&dos );
     320    if ( hspl == SPL_ERROR ) {
     321        unlink( tmpps );
     322        return false;
     323    }
     324
     325    rc = SplQmStartDoc( hspl, title );
     326    if ( !rc ) {
     327        SplQmAbort( hspl );
     328        unlink( tmpps );
     329        return false;
     330    }
     331
     332    FILE *f = fopen( tmpps, "rb" );
     333    if ( f == NULL ) {
     334        SplQmAbort( hspl );
     335        unlink( tmpps );
     336        return false;
     337    }
     338
     339    bool splerr = false;
     340    void *buf = malloc( PS_PRINT_BUF_SIZE );
     341    int rd = 0;
     342    while ( rc && ( rd = fread( buf, 1, PS_PRINT_BUF_SIZE, f ) ) != 0 ) {
     343        rc = SplQmWrite( hspl, rd, buf );
     344        if ( !rc || abortPrinting ) {
     345            splerr = true;
     346            break;
     347        }
     348    }
     349    free( buf );
     350    fclose( f );
     351    unlink( tmpps );
     352
     353    if ( splerr ) {
     354        SplQmAbort( hspl );
     355        if ( !abortPrinting ) {
     356            return false;
     357        }
     358    }
     359    else {
     360        SplQmEndDoc( hspl );
     361        SplQmClose( hspl );
     362    }
     363
     364    return true;
     365}
     366
     367bool LucidePrinting::queryCurrentForm( HAB lhab, PHCINFO pcurForm )
     368{
     369    CHAR         achDriverName[ DRIVERNAME_LENGTH ] = "";
     370    DEVOPENSTRUC dos   = { 0 };
     371    // build a devopenstruct for the call to DevOpenDC
     372    dos.pszLogAddress = psetup->QueueInfo.pszName;              // 1
     373    strcpy( achDriverName, psetup->QueueInfo.pszDriverName );
     374    achDriverName[ strcspn( achDriverName, "." ) ] = '\0';
     375    dos.pszDriverName = achDriverName;                          // 2
     376    dos.pdriv = psetup->QueueInfo.pDriverData;                  // 3
     377
     378    HDC hdcPrinterInfo = DevOpenDC( lhab, OD_INFO, "*", 3L, (PDEVOPENDATA)&dos, NULLHANDLE );
     379    if ( hdcPrinterInfo == DEV_ERROR ) {
     380        return false;
     381    }
     382
     383    //long lTech = 0;
     384    //DevQueryCaps( hdcPrinterInfo, CAPS_TECHNOLOGY, sizeof(long), &lTech );
     385    //somPrintf( "lTech: 0x%x\n", lTech );
     386
     387    LONG lForms = DevQueryHardcopyCaps( hdcPrinterInfo, 0, 0, NULL );
    174388    if ( lForms == DQHC_ERROR ) {
    175         return;
     389        DevCloseDC( hdcPrinterInfo );
     390        return false;
    176391    }
    177392
    178393    HCINFO *forms = new HCINFO[ lForms ];
    179394    memset( forms, 0, sizeof( HCINFO ) * lForms );
    180     lForms = DevQueryHardcopyCaps( hdcPrinter, 0, lForms, forms );
     395    lForms = DevQueryHardcopyCaps( hdcPrinterInfo, 0, lForms, forms );
    181396    if ( lForms == DQHC_ERROR ) {
    182397        delete forms;
    183         return;
     398        DevCloseDC( hdcPrinterInfo );
     399        return false;
    184400    }
    185401
     
    190406        }
    191407    }
     408
    192409    delete forms;
    193 }
    194 
     410    DevCloseDC( hdcPrinterInfo );
     411    return true;
     412}
     413
     414// static method
     415void LucidePrinting::printabort( void *data )
     416{
     417    ((LucidePrinting *)data)->abortPrinting = true;
     418}
     419
     420// static method, thread for asynchronous printing
     421void LucidePrinting::printthread( void *p )
     422{
     423    DosSetPriority( PRTYS_THREAD, PRTYC_IDLETIME, PRTYD_MAXIMUM, 0 );
     424    LucidePrinting *_this = (LucidePrinting *)p;
     425
     426    HAB thab = WinInitialize( 0 );
     427    HMQ thmq = WinCreateMsgQueue( thab, 0 );
     428
     429    bool printOk = false;
     430    if ( _this->psetup->ptype == TypePostScript ) {
     431        printOk = _this->doPsPrint( thab );
     432    }
     433    else {
     434        printOk = _this->doPmPrint( thab );
     435    }
     436    _this->progressDlg->hide();
     437
     438    if ( !printOk )
     439    {
     440        char *printfailed = newstrdupL( PRINT_FAILED );
     441        WinMessageBox( HWND_DESKTOP, _this->hFrame, printfailed, NULL,
     442                       1, MB_OK | MB_ERROR | MB_MOVEABLE );
     443        delete printfailed;
     444    }
     445
     446    WinDestroyMsgQueue( thmq );
     447    WinTerminate( thab );
     448    _endthread();
     449
     450    delete _this;
     451}
     452
  • trunk/Lucide/SOURCE/gui/print.h

    r90 r91  
    3636#define __PRINT_H
    3737
    38 extern HAB hab;
    39 extern Environment *ev;
    4038
    4139#define DEVICENAME_LENGTH   32
     
    5654
    5755class LuDocument;
    58 void printDocument( LuDocument *doc, PrintSetup *psetup );
     56void printDocument( HWND hWndFrame, LuDocument *doc,
     57                    const char *title, PrintSetup *psetup );
    5958
    6059#endif // __PRINT_H
  • trunk/Lucide/SOURCE/gui/printDlg.cpp

    r90 r91  
    4242#include <ludoc.xh>
    4343
     44#include "globals.h"
    4445#include "printDlg.h"
    4546#include "Lucide_res.h"
     
    5152    hFrame      = hWndFrame;
    5253    doc         = _doc;
     54    scalable    = _doc->isScalable( ev );
    5355    currentpage = _currentpage;
    5456    psetup      = new PrintSetup;
     
    243245                case IDC_TYPE_ASIMAGE:
    244246                {
     247                    BOOL asimg = WinQueryButtonCheckstate( hwnd, IDC_TYPE_ASIMAGE );
    245248                    WinEnableControl( hwnd, IDC_HIGHER_IMAGE_QUALITY,
    246                                 WinQueryButtonCheckstate( hwnd, IDC_TYPE_ASIMAGE ) );
     249                                      asimg && _this->scalable );
    247250                }
    248251                break;
     
    283286                                _this->psetup->pgto = tmpVal;
    284287                            }
     288                            if ( _this->psetup->pgfrom > _this->psetup->pgto ) {
     289                                long tmp = _this->psetup->pgfrom;
     290                                _this->psetup->pgfrom = _this->psetup->pgto;
     291                                _this->psetup->pgto = tmp;
     292                            }
    285293                        }
    286294
  • trunk/Lucide/SOURCE/gui/printDlg.h

    r90 r91  
    6060        HWND hFrame;
    6161        LuDocument *doc;
     62        bool scalable;
    6263        long currentpage;
    6364        PPRQINFO3 pQueueInfo;
  • trunk/Lucide/SOURCE/gui/settingsDlg.cpp

    r63 r91  
    104104            // layout
    105105            HWND hLayout = WinWindowFromID( hwnd, IDC_DEFPGLAYOUT );
    106             std::string spage = getLocalizedString( MENU_SINGLE_PAGE );
    107             std::string cont = getLocalizedString( MENU_CONTINUOUS );
     106            std::string spage = getLocalizedString( SD_SINGLE_PAGE );
     107            std::string cont = getLocalizedString( SD_CONTINUOUS );
    108108            WinSendMsg( hLayout, LM_INSERTITEM, MPFROMSHORT(LIT_END),
    109109                        MPFROMP( spage.c_str() ) );
  • trunk/Lucide/SOURCE/plugins/ludjvu/ludjvu.cpp

    r88 r91  
    55 *     SOM incremental update: 2.24
    66 */
     7
    78
    89/*
     
    105106}
    106107
     108
    107109SOM_Scope boolean  SOMLINK loadFile(LuDjvuDocument *somSelf,
    108110                                     Environment *ev, string filename,
     
    132134}
    133135
     136
    134137SOM_Scope short  SOMLINK getBpp(LuDjvuDocument *somSelf,  Environment *ev)
    135138{
    136139    return 3;
    137140}
     141
    138142
    139143SOM_Scope boolean  SOMLINK isScalable(LuDjvuDocument *somSelf,
     
    143147}
    144148
     149
    145150SOM_Scope long  SOMLINK getPageCount(LuDjvuDocument *somSelf,
    146151                                      Environment *ev)
     
    150155    return ddjvu_document_get_pagenum( d->d_document );
    151156}
     157
    152158
    153159SOM_Scope void  SOMLINK getPageSize(LuDjvuDocument *somSelf,
     
    171177    }
    172178}
     179
    173180
    174181SOM_Scope void  SOMLINK renderPageToPixbuf(LuDjvuDocument *somSelf,
     
    235242}
    236243
     244
    237245SOM_Scope boolean  SOMLINK getThumbnailSize(LuDjvuDocument *somSelf,
    238246                                             Environment *ev,
     
    253261    return TRUE;
    254262}
     263
    255264
    256265SOM_Scope LuPixbuf*  SOMLINK getThumbnail(LuDjvuDocument *somSelf,
     
    294303}
    295304
     305
    296306SOM_Scope boolean  SOMLINK isSaveable(LuDjvuDocument *somSelf,
    297307                                       Environment *ev)
     
    303313#endif
    304314}
     315
    305316
    306317SOM_Scope boolean  SOMLINK saveAs(LuDjvuDocument *somSelf,  Environment *ev,
     
    327338#endif
    328339}
     340
     341
     342SOM_Scope boolean  SOMLINK isPostScriptExportable(LuDjvuDocument *somSelf,
     343                                                   Environment *ev)
     344{
     345#ifdef __GNUC__
     346    return TRUE;
     347#else
     348    return FALSE;
     349#endif
     350}
     351
     352
     353SOM_Scope boolean  SOMLINK exportToPostScript(LuDjvuDocument *somSelf,
     354                                               Environment *ev,
     355                                              string filename,
     356                                              long first_page,
     357                                              long last_page,
     358                                              double width, double height,
     359                                              boolean duplex)
     360{
     361#ifdef __GNUC__
     362    LuDjvuDocumentData *somThis = LuDjvuDocumentGetData(somSelf);
     363    DjvuDocument *d = (DjvuDocument *)somThis->data;
     364
     365    FILE *f = NULL;
     366    if ( ( f = fopen( filename, "wb" ) ) == NULL ) {
     367        return FALSE;
     368    }
     369
     370    char pgbuf[ 20 ];
     371    snprintf( pgbuf, 20, "-page=%d-%d", first_page + 1, last_page + 1 );
     372    const char *optv[] = { pgbuf };
     373
     374    ddjvu_job_t *job = ddjvu_document_print( d->d_document, f, 1, optv );
     375    while ( !ddjvu_job_done( job ) ) {
     376        djvu_handle_events( d->d_context );
     377    }
     378    fclose( f );
     379
     380    return TRUE;
     381#else
     382    return FALSE;
     383#endif
     384}
     385
    329386
    330387SOM_Scope void SOMLINK somDefaultInit(LuDjvuDocument *somSelf,
  • trunk/Lucide/SOURCE/plugins/ludjvu/ludjvu.idl

    r88 r91  
    3030        isSaveable: override;
    3131        saveAs: override;
     32        isPostScriptExportable: override;
     33        exportToPostScript: override;
    3234
    3335        somDefaultInit: override, init;
  • trunk/Lucide/SOURCE/plugins/ludjvu/ludjvu.xh

    r88 r91  
    151151typedef boolean   SOMLINK somTP_LuDjvuDocument_isPostScriptExportable(LuDjvuDocument *somSelf, Environment *ev);
    152152typedef somTP_LuDjvuDocument_isPostScriptExportable *somTD_LuDjvuDocument_isPostScriptExportable;
    153 typedef void   SOMLINK somTP_LuDjvuDocument_exportToPostScript(LuDjvuDocument *somSelf, Environment *ev,
     153typedef boolean   SOMLINK somTP_LuDjvuDocument_exportToPostScript(LuDjvuDocument *somSelf, Environment *ev,
    154154                string filename,
    155155                long first_page,
     
    587587
    588588/* method: exportToPostScript */
    589 void   exportToPostScript(Environment *ev,
     589boolean   exportToPostScript(Environment *ev,
    590590                string filename,
    591591                long first_page,
     
    595595                boolean duplex)
    596596{
    597    SOM_ResolveD(this,LuDjvuDocument,LuDocument,exportToPostScript)
     597   return SOM_ResolveD(this,LuDjvuDocument,LuDocument,exportToPostScript)
    598598        (this, ev,filename,first_page,last_page,width,height,duplex);
    599599}
  • trunk/Lucide/SOURCE/plugins/ludjvu/ludjvu.xih

    r88 r91  
    149149  #define _isSaveable somSelf->isSaveable
    150150  #define _saveAs somSelf->saveAs
     151  #define _isPostScriptExportable somSelf->isPostScriptExportable
     152  #define _exportToPostScript somSelf->exportToPostScript
    151153  #define _somDefaultInit somSelf->somDefaultInit
    152154  #define _somDestruct somSelf->somDestruct
     
    596598#define LuDjvuDocument_parents_saveAs(somSelf,ev,filename) (\
    597599   LuDjvuDocument_parent_LuDocument_saveAs(somSelf,ev,filename))
     600
     601/*
     602 * Overridden method: isPostScriptExportable
     603 */
     604SOM_Scope boolean  SOMLINK isPostScriptExportable(LuDjvuDocument *somSelf, Environment *ev);
     605static char *somMN_LuDjvuDocumentisPostScriptExportable = "LuDocument::isPostScriptExportable";
     606static somId somId_LuDjvuDocumentisPostScriptExportable = &somMN_LuDjvuDocumentisPostScriptExportable;
     607#ifdef somId_isPostScriptExportable
     608#undef somId_isPostScriptExportable
     609#else
     610#define somId_isPostScriptExportable somId_LuDjvuDocumentisPostScriptExportable
     611#endif
     612typedef boolean   SOMLINK somTP_xih_LuDjvuDocument_isPostScriptExportable(LuDjvuDocument *somSelf, Environment *ev);
     613typedef somTP_xih_LuDjvuDocument_isPostScriptExportable *somTD_xih_LuDjvuDocument_isPostScriptExportable;
     614/* define the parent method call macro */
     615static somMethodProc* LuDjvuDocument_parent_LuDocument_isPostScriptExportable_resolved;
     616#define LuDjvuDocument_parent_LuDocument_isPostScriptExportable(somSelf,ev) \
     617  ((( somTD_xih_LuDjvuDocument_isPostScriptExportable ) \
     618      LuDjvuDocument_parent_LuDocument_isPostScriptExportable_resolved) \
     619        (somSelf,ev))
     620/* define a variety of (possibly ambiguous) short forms */
     621#ifndef SOMGD_pmc_parent_isPostScriptExportable
     622  #ifdef parent_isPostScriptExportable
     623    #define SOMGD_pmc_parent_isPostScriptExportable
     624    #undef parent_isPostScriptExportable
     625  #else
     626#define parent_isPostScriptExportable LuDjvuDocument_parent_LuDocument_isPostScriptExportable
     627  #endif
     628#endif
     629#ifndef SOMGD_pmc_parent_LuDocument_isPostScriptExportable
     630  #ifdef parent_LuDocument_isPostScriptExportable
     631    #define SOMGD_pmc_parent_LuDocument_isPostScriptExportable
     632    #undef parent_LuDocument_isPostScriptExportable
     633  #else
     634    #define parent_LuDocument_isPostScriptExportable LuDjvuDocument_parent_LuDocument_isPostScriptExportable
     635  #endif
     636#endif
     637#define LuDjvuDocument_parents_isPostScriptExportable(somSelf,ev) (\
     638   LuDjvuDocument_parent_LuDocument_isPostScriptExportable(somSelf,ev))
     639
     640/*
     641 * Overridden method: exportToPostScript
     642 */
     643SOM_Scope boolean  SOMLINK exportToPostScript(LuDjvuDocument *somSelf, Environment *ev,
     644                string filename,
     645                long first_page,
     646                long last_page,
     647                double width,
     648                double height,
     649                boolean duplex);
     650static char *somMN_LuDjvuDocumentexportToPostScript = "LuDocument::exportToPostScript";
     651static somId somId_LuDjvuDocumentexportToPostScript = &somMN_LuDjvuDocumentexportToPostScript;
     652#ifdef somId_exportToPostScript
     653#undef somId_exportToPostScript
     654#else
     655#define somId_exportToPostScript somId_LuDjvuDocumentexportToPostScript
     656#endif
     657typedef boolean   SOMLINK somTP_xih_LuDjvuDocument_exportToPostScript(LuDjvuDocument *somSelf, Environment *ev,
     658                string filename,
     659                long first_page,
     660                long last_page,
     661                double width,
     662                double height,
     663                boolean duplex);
     664typedef somTP_xih_LuDjvuDocument_exportToPostScript *somTD_xih_LuDjvuDocument_exportToPostScript;
     665/* define the parent method call macro */
     666static somMethodProc* LuDjvuDocument_parent_LuDocument_exportToPostScript_resolved;
     667#define LuDjvuDocument_parent_LuDocument_exportToPostScript(somSelf,ev,filename,first_page,last_page,width,height,duplex) \
     668  ((( somTD_xih_LuDjvuDocument_exportToPostScript ) \
     669      LuDjvuDocument_parent_LuDocument_exportToPostScript_resolved) \
     670        (somSelf,ev,filename,first_page,last_page,width,height,duplex))
     671/* define a variety of (possibly ambiguous) short forms */
     672#ifndef SOMGD_pmc_parent_exportToPostScript
     673  #ifdef parent_exportToPostScript
     674    #define SOMGD_pmc_parent_exportToPostScript
     675    #undef parent_exportToPostScript
     676  #else
     677#define parent_exportToPostScript LuDjvuDocument_parent_LuDocument_exportToPostScript
     678  #endif
     679#endif
     680#ifndef SOMGD_pmc_parent_LuDocument_exportToPostScript
     681  #ifdef parent_LuDocument_exportToPostScript
     682    #define SOMGD_pmc_parent_LuDocument_exportToPostScript
     683    #undef parent_LuDocument_exportToPostScript
     684  #else
     685    #define parent_LuDocument_exportToPostScript LuDjvuDocument_parent_LuDocument_exportToPostScript
     686  #endif
     687#endif
     688#define LuDjvuDocument_parents_exportToPostScript(somSelf,ev,filename,first_page,last_page,width,height,duplex) (\
     689   LuDjvuDocument_parent_LuDocument_exportToPostScript(somSelf,ev,filename,first_page,last_page,width,height,duplex))
    598690
    599691/*
     
    653745    {    &somId_LuDjvuDocumentsaveAs,
    654746         (somMethodProc *) saveAs  },
     747    {    &somId_LuDjvuDocumentisPostScriptExportable,
     748         (somMethodProc *) isPostScriptExportable  },
     749    {    &somId_LuDjvuDocumentexportToPostScript,
     750         (somMethodProc *) exportToPostScript  },
    655751    {    &somId_LuDjvuDocumentsomDefaultInit,
    656752         (somMethodProc *) somDefaultInit  },
     
    671767
    672768static somStaticClassInfo LuDjvuDocumentSCI = {
    673     4, 0, 12, 0, 0, 0, /* layout version 4 */
     769    4, 0, 14, 0, 0, 0, /* layout version 4 */
    674770    LuDjvuDocument_MajorVersion, LuDjvuDocument_MinorVersion,
    675771    sizeof(LuDjvuDocumentData), LuDjvuDocument_MaxNoMethods, 1,
     
    717813    LuDocumentNewClass(LuDocument_MajorVersion,LuDocument_MinorVersion);        /* static reference */
    718814    result = (SOMClass*)((void*)somBuildClass(0xFFFFFFFF,&LuDjvuDocumentSCI, somtmajorVersion, somtminorVersion));
     815    LuDjvuDocument_parent_LuDocument_exportToPostScript_resolved =
     816        somParentNumResolve(LuDjvuDocumentCClassData.parentMtab, 1, LuDocumentClassData.exportToPostScript);
     817    LuDjvuDocument_parent_LuDocument_isPostScriptExportable_resolved =
     818        somParentNumResolve(LuDjvuDocumentCClassData.parentMtab, 1, LuDocumentClassData.isPostScriptExportable);
    719819    LuDjvuDocument_parent_LuDocument_saveAs_resolved =
    720820        somParentNumResolve(LuDjvuDocumentCClassData.parentMtab, 1, LuDocumentClassData.saveAs);
  • trunk/Lucide/SOURCE/plugins/ludoc/ludoc.cpp

    r61 r91  
    278278
    279279
    280 SOM_Scope void  SOMLINK exportToPostScript(LuDocument *somSelf, 
     280SOM_Scope boolean SOMLINK exportToPostScript(LuDocument *somSelf,
    281281                                   Environment *ev,
    282282                                   string filename, long first_page,
     
    285285{
    286286    // Abstract method does nothing
     287    return FALSE;
    287288}
    288289
  • trunk/Lucide/SOURCE/plugins/ludoc/ludoc.idl

    r61 r91  
    1313#include <lutypes.h>
    1414
     15/**
     16 * Note: all page numbers is zero-based.
     17 */
    1518
    1619interface LuDocument : SOMObject
     
    308311     *
    309312     * Create a new postscript file and render document to.
    310      **/
    311     void exportToPostScript( in string filename,
     313     * Return value: TRUE if PS document was generated successfully.
     314     **/
     315    boolean exportToPostScript( in string filename,
    312316                     in long first_page, in long last_page,
    313317                     in double width, in double height, in boolean duplex );
  • trunk/Lucide/SOURCE/plugins/ludoc/ludoc.xh

    r88 r91  
    271271typedef boolean   SOMLINK somTP_LuDocument_isPostScriptExportable(LuDocument *somSelf, Environment *ev);
    272272typedef somTP_LuDocument_isPostScriptExportable *somTD_LuDocument_isPostScriptExportable;
    273 typedef void   SOMLINK somTP_LuDocument_exportToPostScript(LuDocument *somSelf, Environment *ev,
     273typedef boolean   SOMLINK somTP_LuDocument_exportToPostScript(LuDocument *somSelf, Environment *ev,
    274274                string filename,
    275275                long first_page,
     
    707707
    708708/* method: exportToPostScript */
    709 void   exportToPostScript(Environment *ev,
     709boolean   exportToPostScript(Environment *ev,
    710710                string filename,
    711711                long first_page,
     
    715715                boolean duplex)
    716716{
    717    SOM_ResolveD(this,LuDocument,LuDocument,exportToPostScript)
     717   return SOM_ResolveD(this,LuDocument,LuDocument,exportToPostScript)
    718718        (this, ev,filename,first_page,last_page,width,height,duplex);
    719719}
  • trunk/Lucide/SOURCE/plugins/ludoc/ludoc.xih

    r61 r91  
    549549 * New Method: exportToPostScript
    550550 */
    551 SOM_Scope void  SOMLINK exportToPostScript(LuDocument *somSelf, Environment *ev,
     551SOM_Scope boolean  SOMLINK exportToPostScript(LuDocument *somSelf, Environment *ev,
    552552                string filename,
    553553                long first_page,
     
    57057020, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
    571571
    572 static somMethodInfo exportToPostScriptMethodInfo = {1, 40, &exportToPostScriptFloatMap};
     572static somMethodInfo exportToPostScriptMethodInfo = {11, 40, &exportToPostScriptFloatMap};
    573573
    574574static somApRdInfo exportToPostScriptStubs = {0, 0, &exportToPostScriptMethodInfo};
  • trunk/Lucide/SOURCE/plugins/lupoppler/lupoppler.cpp

    r71 r91  
    678678
    679679
    680 SOM_Scope void SOMLINK exportToPostScript(LuPopplerDocument *somSelf,
     680SOM_Scope boolean SOMLINK exportToPostScript(LuPopplerDocument *somSelf,
    681681                                    Environment *ev, string filename,
    682                                    long first_page, long last_page,
    683                                    double width, double height,
    684                                    boolean duplex)
     682                                    long first_page, long last_page,
     683                                    double width, double height,
     684                                    boolean duplex)
    685685{
    686686    if ( filename == NULL ) {
    687         return;
     687        return FALSE;
    688688    }
    689689    if ( last_page < first_page ) {
    690         return;
     690        return FALSE;
    691691    }
    692692
    693693    LuPopplerDocumentData *somThis = LuPopplerDocumentGetData(somSelf);
    694694    PDFDoc *doc = ((PopplerDocument *)somThis->data)->doc;
    695 
    696695
    697696    PSOutputDev *out = new PSOutputDev( filename, doc->getXRef(),
     
    701700                                        duplex, 0, 0, 0, 0, gFalse );
    702701
    703 
    704     for ( long i = first_page; i < last_page; i++ ) {
     702        if ( !out->isOk() ) {
     703                delete out;
     704        return FALSE;
     705        }
     706
     707    for ( long i = first_page; i <= last_page; i++ ) {
    705708        doc->displayPage( out, i + 1, 72.0, 72.0, 0, gFalse, gTrue, gFalse );
    706709    }
    707710
    708711    delete out;
     712    return TRUE;
    709713}
    710714
  • trunk/Lucide/SOURCE/plugins/lupoppler/lupoppler.xh

    r88 r91  
    151151typedef boolean   SOMLINK somTP_LuPopplerDocument_isPostScriptExportable(LuPopplerDocument *somSelf, Environment *ev);
    152152typedef somTP_LuPopplerDocument_isPostScriptExportable *somTD_LuPopplerDocument_isPostScriptExportable;
    153 typedef void   SOMLINK somTP_LuPopplerDocument_exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
     153typedef boolean   SOMLINK somTP_LuPopplerDocument_exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
    154154                string filename,
    155155                long first_page,
     
    587587
    588588/* method: exportToPostScript */
    589 void   exportToPostScript(Environment *ev,
     589boolean   exportToPostScript(Environment *ev,
    590590                string filename,
    591591                long first_page,
     
    595595                boolean duplex)
    596596{
    597    SOM_ResolveD(this,LuPopplerDocument,LuDocument,exportToPostScript)
     597   return SOM_ResolveD(this,LuPopplerDocument,LuDocument,exportToPostScript)
    598598        (this, ev,filename,first_page,last_page,width,height,duplex);
    599599}
  • trunk/Lucide/SOURCE/plugins/lupoppler/lupoppler.xih

    r61 r91  
    909909 * Overridden method: exportToPostScript
    910910 */
    911 SOM_Scope void  SOMLINK exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
     911SOM_Scope boolean  SOMLINK exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
    912912                string filename,
    913913                long first_page,
     
    923923#define somId_exportToPostScript somId_LuPopplerDocumentexportToPostScript
    924924#endif
    925 typedef void   SOMLINK somTP_xih_LuPopplerDocument_exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
     925typedef boolean   SOMLINK somTP_xih_LuPopplerDocument_exportToPostScript(LuPopplerDocument *somSelf, Environment *ev,
    926926                string filename,
    927927                long first_page,
Note: See TracChangeset for help on using the changeset viewer.