williamr@2: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef PDRSTORE_H williamr@2: #define PDRSTORE_H williamr@2: williamr@4: /** williamr@4: @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@4: class CPdrControl; williamr@2: class CStreamStore; williamr@2: class CBandedDevice; williamr@2: williamr@2: /** williamr@2: Codes used by printer drivers. williamr@2: */ williamr@2: enum TFbsEncoding williamr@2: { williamr@2: /** No code. */ williamr@2: EFbsNone = 0, williamr@2: /** Run length. */ williamr@2: EFbsRunLength = 1, williamr@2: /** TIFF. */ williamr@2: EFbsTIFF = 2, williamr@2: /** Delta row. */ williamr@2: EFbsDeltaRow = 3, williamr@2: /** Reserved. */ williamr@2: EFbsReserved = 4, williamr@2: /** Adaptive. */ williamr@2: EFbsAdaptive = 5 williamr@2: }; williamr@2: williamr@2: /** williamr@2: Determines the raster mode used by printer drivers. williamr@2: */ williamr@2: enum TFbsRasterGraphicsMode williamr@2: { williamr@2: /** Logical page orientation. */ williamr@2: EFbsLogicalPageOrientation = 0, williamr@2: /** Physcial page orientation. */ williamr@2: EFbsPhysicalPageOrientation = 3 williamr@2: }; williamr@2: williamr@2: /** williamr@2: Enumerates resources used by printer drivers. williamr@2: */ williamr@2: enum TPdrResourceId // Corresponds to IdentResource in PDRREADR.H williamr@2: { williamr@2: /** Reset. */ williamr@2: EPdrReset, williamr@2: /** Set page size. */ williamr@2: EPdrSetPageSize, williamr@2: /** Preamble. */ williamr@2: EPdrPreAmble, williamr@2: /** Postamble. */ williamr@2: EPdrPostAmble, williamr@2: /** Set text colour. */ williamr@2: EPdrSetTextColor, williamr@2: /** Bold text. */ williamr@2: EPdrBoldOn, williamr@2: /** Normal text weighting. */ williamr@2: EPdrBoldOff, williamr@2: /** Italic text. */ williamr@2: EPdrItalicOn, williamr@2: /** Normal text slant. */ williamr@2: EPdrItalicOff, williamr@2: /** Underline text. */ williamr@2: EPdrUnderlineOn, williamr@2: /** No text underline. */ williamr@2: EPdrUnderlineOff, williamr@2: /** Strike through text. */ williamr@2: EPdrStrikethroughOn, williamr@2: /** No text strike through. */ williamr@2: EPdrStrikethroughOff, williamr@2: /** New page. */ williamr@2: EPdrNewPage, williamr@2: /** Portrait view. */ williamr@2: EPdrPortrait, williamr@2: /** Landscape view. */ williamr@2: EPdrLandscape, williamr@2: /** Set the x-position of the printer head. */ williamr@2: EPdrSetXPos, williamr@2: /** Set the y-position of the printer head. */ williamr@2: EPdrSetYPos, williamr@2: /** Increment the x-position. */ williamr@2: EPdrIncrementXPos, williamr@2: /** Increment the y-position. */ williamr@2: EPdrIncrementYPos, williamr@2: /** Carriage return. */ williamr@2: EPdrCarriageReturn, williamr@2: /** Set the graphics colour. */ williamr@2: EPdrSetGraphicsColor, williamr@2: /** Starting position of bitmap. */ williamr@2: EPdrBitmapStart, williamr@2: /** End position of bitmap. */ williamr@2: EPdrBitmapEnd, williamr@2: /** Scan line. */ williamr@2: EPdrScanLine, williamr@2: /** End of scan line. */ williamr@2: EPdrEndScanLine, williamr@2: /** Extra resource holder. */ williamr@2: EPdrResource1, williamr@2: /** Extra resource holder. */ williamr@2: EPdrResource2, williamr@2: /** Extra resource holder. */ williamr@2: EPdrResource3, williamr@2: /** Extra resource holder. */ williamr@2: EPdrResource4, williamr@2: /** Extra resource holder. */ williamr@2: EPdrResource5, williamr@2: /** Extra resource holder. */ williamr@2: EPdrResource6, williamr@2: /** Extra resource holder. */ williamr@2: EPdrResource7, williamr@2: /** Extra resource holder. */ williamr@2: EPdrResource8 williamr@2: }; williamr@2: williamr@2: /** williamr@2: Maximum length of a printer command string. williamr@2: */ williamr@2: const TInt KMaxCommandStringLength = 0x40; williamr@2: /** williamr@2: Defines a command string used by printer drivers. williamr@2: */ williamr@2: typedef TBuf8 TCommandString; williamr@2: williamr@4: // Forward declarations williamr@4: class CFontInfo; williamr@4: class CPdrTranslates; williamr@4: class CPdrDevice; williamr@2: williamr@4: /** WARNING: Class for internal use ONLY. Compatibility is not guaranteed in future releases. williamr@4: */ williamr@2: class CInfoFont : public CFont williamr@2: { williamr@2: friend class CPdrTypefaceStore; williamr@2: public: williamr@2: // New functions williamr@2: IMPORT_C HBufC8* TranslateStringL(const TDesC& aString) const; williamr@2: IMPORT_C TPtrC8 CommandString() const; williamr@2: IMPORT_C TBool RepertoireContains(TChar aChar) const; williamr@2: IMPORT_C TBool AllCharsInFontRepertoire(const TDesC& aString, TInt& aFirstCharNotInRepertoire, TInt& aLength) const; williamr@2: inline CFontInfo* FontInfo() const {return iFontInfo;} williamr@2: CFont* RealFont() const; williamr@2: private: williamr@2: CInfoFont(TInt aBaselineOffsetInPixels, const TFontSpec& aFontSpecInTwips, TInt aFontInfoHeightInTwips, TInt aHeightInPixels, CPdrTranslates* aTranslates, const TDesC8& aCommandString, CPdrDevice* aPdrDevice); williamr@2: ~CInfoFont(); williamr@2: TInt Width(TInt aNum) const; williamr@2: TInt Height(TInt aNum) const; williamr@2: void CreateBandedFontIfRequired(); williamr@2: // From CFont williamr@2: IMPORT_C virtual TUid DoTypeUid() const; williamr@2: IMPORT_C virtual TInt DoHeightInPixels() const; williamr@2: IMPORT_C virtual TInt DoAscentInPixels() const; williamr@2: IMPORT_C virtual TInt DoCharWidthInPixels(TChar aChar) const; williamr@2: IMPORT_C virtual TInt DoTextWidthInPixels(const TDesC &aText) const; williamr@2: IMPORT_C virtual TInt DoBaselineOffsetInPixels() const; williamr@2: IMPORT_C virtual TInt DoTextCount(const TDesC &aText, TInt aWidthInPixels) const; williamr@2: IMPORT_C virtual TInt DoTextCount(const TDesC &aText, TInt aWidthInPixels, TInt &aExcessWidthInPixels) const; williamr@2: IMPORT_C virtual TInt DoMaxCharWidthInPixels() const; williamr@2: IMPORT_C virtual TInt DoMaxNormalCharWidthInPixels() const; williamr@2: IMPORT_C virtual TFontSpec DoFontSpecInTwips() const; williamr@2: private: williamr@2: TCommandString iCommandString; williamr@2: TInt iBaselineOffsetInPixels; williamr@2: TFontSpec iFontSpecInTwips; williamr@2: TInt iFontInfoHeightInTwips; williamr@2: TInt iHeightInPixels; williamr@2: CFontInfo* iFontInfo; williamr@2: CPdrTranslates* iTranslates; williamr@2: CPdrDevice* iPdrDevice; williamr@2: CFont* iRealFont; williamr@2: }; williamr@2: williamr@2: williamr@2: class CPageBuffer : public CActive williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CPageBuffer* NewL(CPrinterPort* aPrinterPort); williamr@2: IMPORT_C static CPageBuffer* NewL(CPrinterPort* aPrinterPort, TInt aGranularity); williamr@2: IMPORT_C void StartFlush(TRequestStatus& aRequestStatus); williamr@2: IMPORT_C void AddBytesL(const TDesC8& aDes); williamr@2: IMPORT_C RWriteStream& CreateWriteStreamL(); williamr@2: IMPORT_C void CloseWriteStream(); williamr@2: IMPORT_C ~CPageBuffer(); williamr@2: void DoCancel(); williamr@2: void RunL(); williamr@2: private: williamr@2: void ConstructL(); williamr@2: CPageBuffer(CPrinterPort* aPrinterPort, TInt aGranularity); williamr@2: void Queue(); williamr@2: private: williamr@2: williamr@2: TRequestStatus* iRequestStatus; williamr@2: williamr@2: TInt iWritePos; williamr@2: williamr@2: TInt iGranularity; williamr@2: williamr@2: CBufSeg* iBuffer; williamr@2: williamr@2: TPtr8 iPtr; williamr@2: williamr@2: CPrinterPort* iPrinterPort; williamr@2: williamr@2: RBufWriteStream iWriteStream; williamr@2: williamr@2: CBufSeg* iWriteStreamBuffer; williamr@2: }; williamr@2: williamr@2: williamr@4: /** WARNING: Class for internal use ONLY. Compatibility is not guaranteed in future releases. williamr@4: */ williamr@4: class TTextFormat williamr@2: { williamr@2: public: williamr@2: IMPORT_C TTextFormat(); williamr@2: IMPORT_C TTextFormat(const TFontUnderline anUnderlineStyle, const TFontStrikethrough aStrikethroughStyle, const TRgb& aColor, const TDesC8& aFontString, const TFontStyle& aFontStyle); williamr@2: IMPORT_C TBool operator == (const TTextFormat& aFormat) const; williamr@2: public: williamr@2: williamr@2: TFontUnderline iUnderlineStyle; williamr@2: williamr@2: TFontStrikethrough iStrikethroughStyle; williamr@2: williamr@2: TRgb iColor; williamr@2: williamr@2: TCommandString iFontString; williamr@2: williamr@2: TFontStyle iFontStyle; williamr@2: }; williamr@2: williamr@2: williamr@4: // Forward declarations williamr@4: class CPdrModelInfo; williamr@4: class CPdrTypefaceStore; williamr@2: williamr@2: /** williamr@2: @see CFbsDrvDevice williamr@2: */ williamr@2: class CPdrDevice : public CPrinterDevice williamr@2: { williamr@2: protected: williamr@2: IMPORT_C CPdrDevice(); williamr@2: public: williamr@2: IMPORT_C virtual ~CPdrDevice(); williamr@2: IMPORT_C void SelectPageSpecInTwips(const TPageSpec& aPageSpec); williamr@2: IMPORT_C TDisplayMode DisplayMode() const; williamr@2: IMPORT_C TSize SizeInPixels() const; williamr@2: IMPORT_C TSize SizeInTwips() const; williamr@2: IMPORT_C TRect PrintablePageInPixels() const; williamr@2: IMPORT_C TInt HorizontalTwipsToPixels(TInt aTwips) const; williamr@2: IMPORT_C TInt VerticalTwipsToPixels(TInt aTwips) const; williamr@2: IMPORT_C TInt HorizontalPixelsToTwips(TInt aPixels) const; williamr@2: IMPORT_C TInt VerticalPixelsToTwips(TInt aPixels) const; williamr@2: IMPORT_C TInt GetNearestFontInTwips(CFont*& aFont, const TFontSpec& aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontToDesignHeightInTwips(CFont *&aFont, const TFontSpec &aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontToMaxHeightInTwips(CFont *&aFont, const TFontSpec &aFontSpec, TInt aMaxHeight); williamr@2: IMPORT_C TInt NumTypefaces() const; williamr@2: IMPORT_C void TypefaceSupport(TTypefaceSupport& aTypefaceSupport, TInt aTypefaceIndex) const; williamr@2: IMPORT_C TInt FontHeightInTwips(TInt aTypefaceIndex, TInt aHeightIndex) const; williamr@2: IMPORT_C void PaletteAttributes(TBool& aModifiable, TInt& aNumEntries) const; williamr@2: IMPORT_C void SetPalette(CPalette* aPalette); williamr@2: IMPORT_C TInt GetPalette(CPalette*& aPalette) const; williamr@2: IMPORT_C TPrinterModelEntry Model() const; williamr@2: IMPORT_C TInt Flags() const; williamr@2: IMPORT_C TInt SetModel(const TPrinterModelHeader& aModel, CStreamStore& aStore); williamr@2: IMPORT_C void ReleaseFont(CFont* aFont); williamr@2: IMPORT_C TPoint OffsetInPixels(); williamr@2: williamr@2: protected: williamr@2: IMPORT_C virtual TSize KPixelSizeInTwips() const; williamr@2: private: williamr@2: void DoSetModelL(); williamr@2: protected: williamr@2: williamr@2: CStreamStore* iStore; williamr@2: williamr@2: TPrinterModelHeader iModel; williamr@2: williamr@2: CPdrModelInfo* iModelInfo; williamr@2: williamr@2: CPdrTypefaceStore* iTypefaceStore; williamr@2: }; williamr@2: williamr@2: williamr@4: //Forward declarations williamr@4: class CPdrResources; williamr@4: class CPageText; williamr@4: williamr@2: class CPdrControl : public CPrinterControl williamr@2: { williamr@2: public: williamr@2: IMPORT_C ~CPdrControl(); williamr@2: IMPORT_C TInt CreateContext(CGraphicsContext*& aGC); williamr@2: IMPORT_C TInt BandsPerPage(); williamr@2: IMPORT_C TMoreOnPage QueueGetBand(TRequestStatus& aStatus, TBandAttributes& aBand); // returns affirmative if more to print on current page williamr@2: IMPORT_C void QueueEndPrint(TRequestStatus& aStatus); // Called at finish to flush buffer, tidy up printer etc. williamr@2: IMPORT_C void AbortPrint(); // tidy up synchronously in a short time williamr@2: IMPORT_C virtual void DrawTextL(const TPoint& aPoint, const TFontUnderline aUnderlineStyle, const TFontStrikethrough aStrikethroughStyle, const TRgb& aColor, const CInfoFont* aFont, const TDesC& aString); williamr@2: IMPORT_C TBool IsGraphicsBand() const; williamr@2: inline CBandedDevice* BandedDevice() const {return iBandedDevice;} williamr@2: protected: williamr@2: IMPORT_C CPdrControl(CPdrDevice* aPdrDevice, CPrinterPort* aPrinterPort); williamr@2: IMPORT_C virtual void DoQueueGetBandL(); williamr@2: IMPORT_C virtual void DoQueueEndPrintL(); williamr@2: IMPORT_C void ConstructL(CStreamStore& aStore, TStreamId aStreamId); williamr@2: williamr@2: virtual void OutputBandL() = 0; williamr@2: williamr@2: IMPORT_C virtual void MoveToL(const TPoint& aPoint); williamr@2: IMPORT_C virtual void MoveByL(const TPoint& aVector); williamr@2: IMPORT_C virtual void OutputTextL(const TPoint& aPoint, TInt aWidthInPixels, const TTextFormat& aTextFormat, const TDesC8& aString); williamr@2: williamr@2: IMPORT_C virtual void SetPageSizeL(); williamr@2: IMPORT_C virtual void SetPageOrientationL(); williamr@2: IMPORT_C virtual void SetFontPostureL(const TFontPosture aPosture); williamr@2: IMPORT_C virtual void SetFontStrokeWeightL(const TFontStrokeWeight aStrokeWeight); williamr@2: IMPORT_C virtual void SetTextColorL(const TRgb& aColor); williamr@2: IMPORT_C virtual void CommandL(const TInt anId); williamr@2: williamr@2: IMPORT_C TBool TransformBuffer(); // These two functions are not implemented anywhere williamr@2: IMPORT_C TBool CompressBuffer(); // for this class. Nor do I believe they are defined williamr@2: // for a reason. But since they are part of the williamr@2: // existing interface of a DLL in a ROM I need to williamr@2: // patch. They get to stay there for the moment. CJC williamr@2: williamr@2: protected: williamr@2: williamr@2: CPdrDevice* iPdrDevice; williamr@2: williamr@2: CPageBuffer* iPageBuffer; williamr@2: williamr@2: CPdrResources* iResources; williamr@2: williamr@2: CBandedDevice* iBandedDevice; williamr@2: williamr@2: CPageText* iPageText; williamr@2: williamr@2: TInt iBandIndex; williamr@2: williamr@2: TInt iEntryIndex; williamr@2: williamr@2: TPoint iPosition; williamr@2: williamr@2: TTextFormat iTextFormat; williamr@2: }; williamr@2: williamr@2: williamr@2: class CFbsDrvDevice : public CPdrDevice williamr@2: { williamr@2: public: williamr@2: IMPORT_C CFbsDrvDevice(); williamr@2: IMPORT_C ~CFbsDrvDevice(); williamr@2: williamr@2: IMPORT_C TInt GetNearestFontInTwips(CFont*& aFont, const TFontSpec& aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontToDesignHeightInTwips(CFont *&aFont, const TFontSpec &aFontSpec); williamr@2: IMPORT_C void ReleaseFont(CFont* aFont); williamr@2: IMPORT_C TInt NumTypefaces() const; williamr@2: IMPORT_C void TypefaceSupport(TTypefaceSupport& aTypefaceSupport, TInt aTypefaceIndex) const; williamr@2: IMPORT_C TInt FontHeightInTwips(TInt aTypefaceIndex, TInt aHeightIndex) const; williamr@2: williamr@2: IMPORT_C TInt CreateContext(CGraphicsContext*& aGc); williamr@2: IMPORT_C void CreateControlL(CPrinterPort* aPrinterPort); williamr@2: IMPORT_C TInt SetModel(const TPrinterModelHeader& aModel, CStreamStore& aStore); williamr@2: IMPORT_C void LoadTypeFaceList(); williamr@2: IMPORT_C TSize KPixelSizeInTwips() const; williamr@2: IMPORT_C void LoadTypeFaceListL(); williamr@2: IMPORT_C TInt SetModelL(const TPrinterModelHeader& aModel, CStreamStore& aStore); williamr@2: private: williamr@2: // reserved virtual function space williamr@2: IMPORT_C virtual void Reserved_1(); williamr@2: williamr@2: protected: williamr@2: williamr@2: CFbsTypefaceStore* iFbsTypefaceStore; williamr@2: williamr@2: CArrayFixFlat* iGenTypefaceFontsList; williamr@2: williamr@2: CArrayFixFlat* iGenTypefaceFontsType; williamr@2: williamr@2: TInt iFbsTypefaceCount; williamr@2: williamr@2: TInt iPdrTypefaceCount; williamr@2: williamr@2: private: williamr@2: williamr@2: TAny* iReserved; williamr@2: }; williamr@2: williamr@2: williamr@2: class CFbsDrvControl : public CPdrControl williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CFbsDrvControl* NewL(CPdrDevice* aPdrDevice, CPrinterPort* aPrinterPort, CStreamStore& aStore, TStreamId aResourcesStreamId); williamr@2: IMPORT_C ~CFbsDrvControl(); williamr@2: williamr@2: protected: williamr@2: IMPORT_C virtual void OutputBandL(); williamr@2: williamr@2: IMPORT_C CFbsDrvControl(CPdrDevice* aPdrDevice, CPrinterPort* aPrinterPort); williamr@2: IMPORT_C void ConstructL(CStreamStore& aStore, TStreamId aResourcesStreamId); williamr@2: IMPORT_C void SetPageSizeL(); williamr@2: williamr@2: IMPORT_C TBool TransformBuffer(); williamr@2: IMPORT_C TBool CompressBuffer(); williamr@2: williamr@2: private: williamr@2: // reserved virtual function space williamr@2: IMPORT_C virtual void Reserved_1(); williamr@2: williamr@2: protected: williamr@2: williamr@2: HBufC8* iScanLine; williamr@2: williamr@2: HBufC8* iCompressedScanLine; williamr@2: williamr@2: private: williamr@2: williamr@2: TAny* iReserved; williamr@2: }; williamr@2: williamr@2: #endif