~yves-piguet/npw/trunk

« back to all changes in this revision

Viewing changes to Src/NPWBase.c

  • Committer: Yves Piguet
  • Date: 2014-07-13 17:06:06 UTC
  • Revision ID: launchpad@nyctergatis.com-20140713170606-o27zup50i9emcsoj
Better tracking of page context

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
 *      @file NPWBase.c
3
3
 *      @brief NPW (base functions to write PDF files)
4
4
 *      @author Yves Piguet.
5
 
 *      @copyright 2008-2013, Yves Piguet.
 
5
 *      @copyright 2008-2014, Yves Piguet
6
6
 */
7
7
 
8
8
/* License: new BSD license (see header file) */
46
46
{
47
47
        pdf->fonts = kNPWFontAll;
48
48
        pdf->offset = 0;
 
49
        pdf->inPage = FALSE;
49
50
        pdf->writingObject = FALSE;
50
51
        pdf->alloc = NULL;
51
52
        pdf->write = NULL;
820
821
        if (pdf->offset == 0)
821
822
                Chk(writeHeader(pdf));
822
823
        
 
824
        // end current page if not done
 
825
        if (pdf->inPage)
 
826
                Chk(NPWEndPage(pdf));
 
827
        
823
828
        // keep track of page
824
829
        page.width = width;
825
830
        page.height = height;
836
841
        Chk(NPWDataAlloc(pdf, kDataKeyPage, sizeof(NPWPage), (void **)&pageAddr));
837
842
        *pageAddr = page;
838
843
        
 
844
        pdf->inPage = TRUE;
839
845
        pdf->pageCount++;
840
846
        
841
847
        return kNPWErrOk;
847
853
        NPWInt length;
848
854
        NPWInt err;
849
855
        
 
856
        // check that a page has been begun
 
857
        if (!pdf->inPage)
 
858
                return kNPWErrUnexpectedEndPage;
 
859
        
850
860
        // end stream
851
861
        Chk(NPWDataGetNth(pdf, kDataKeyPage, pdf->pageCount - 1, (void **)&page));
852
862
        length = pdf->offset - page->streamOffset;
861
871
        return kNPWErrOk;
862
872
}
863
873
 
 
874
NPWBoolean NPWIsWritingPage(NPW *pdf)
 
875
{
 
876
        return pdf->inPage;
 
877
}
 
878
 
864
879
NPWErr NPWAddResourceCB(NPW *pdf, NPWActionCB cb, void *userData)
865
880
{
866
881
        NPWActionCBData *d;
896
911
        if (pdf->offset == 0)
897
912
                ChkG(writeHeader(pdf));
898
913
        
 
914
        // end page if not done
 
915
        if (pdf->inPage)
 
916
                ChkG(NPWEndPage(pdf));
 
917
        
899
918
        // process delayed actions
900
919
        delayedActionCBData = NULL;
901
920
        for (;;)
902
921
        {
903
922
                if (NPWDataGetNext(pdf, kDataKeyDelayedActionCB, (void **)&delayedActionCBData) != kNPWErrOk)
904
923
                        break;
905
 
                Chk(delayedActionCBData->cb(pdf, delayedActionCBData->userData));
 
924
                ChkG(delayedActionCBData->cb(pdf, delayedActionCBData->userData));
906
925
        }
907
926
        
908
927
        // write Pages object