Update contrib.
1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
19 const TInt KPageBufferSegmentSize=2048;
21 EXPORT_C CPageBuffer* CPageBuffer::NewL(CPrinterPort* aPrinterPort)
23 return NewL(aPrinterPort,KPageBufferSegmentSize);
26 EXPORT_C CPageBuffer* CPageBuffer::NewL(CPrinterPort* aPrinterPort,TInt aGranularity)
28 CPageBuffer* pagebuffer=new(ELeave) CPageBuffer(aPrinterPort,aGranularity);
29 CleanupStack::PushL(pagebuffer);
30 pagebuffer->ConstructL();
35 EXPORT_C void CPageBuffer::StartFlush(TRequestStatus& aRequestStatus)
37 iRequestStatus=&aRequestStatus;
38 aRequestStatus=KRequestPending;
43 EXPORT_C void CPageBuffer::AddBytesL(const TDesC8& aDes)
45 iBuffer->InsertL(iBuffer->Size(),aDes);
48 EXPORT_C RWriteStream& CPageBuffer::CreateWriteStreamL()
50 if (!iWriteStreamBuffer)
52 iWriteStreamBuffer=CBufSeg::NewL(iGranularity);
53 iWriteStream.Open(*iWriteStreamBuffer,0);
57 iWriteStream.Truncate(*iWriteStreamBuffer,0);
62 EXPORT_C void CPageBuffer::CloseWriteStream()
66 iBuffer=iWriteStreamBuffer;
67 iWriteStreamBuffer=buf;
70 EXPORT_C CPageBuffer::~CPageBuffer()
74 if (iWriteStreamBuffer)
77 delete iWriteStreamBuffer;
81 void CPageBuffer::DoCancel()
83 iPrinterPort->Cancel(); // clears my request
84 if (iRequestStatus!=NULL)
85 User::RequestComplete(iRequestStatus,KErrCancel); // clears my callers request
88 void CPageBuffer::RunL() // Shouldn't leave in practice
90 if ((iWritePos>=iBuffer->Size()) || (iStatus!=KErrNone))
93 if (iRequestStatus!=NULL)
94 User::RequestComplete(iRequestStatus,iStatus.Int()); // clears my callers request
95 } // Reports back error if iStatus!=KErrNone
102 void CPageBuffer::ConstructL()
104 iBuffer=CBufSeg::NewL(iGranularity);
105 CActiveScheduler::Add(this);
108 CPageBuffer::CPageBuffer(CPrinterPort* aPrinterPort,TInt aGranularity):
109 CActive(CActive::EPriorityLow),
110 iRequestStatus(NULL),
112 iGranularity(aGranularity),
115 iPrinterPort(aPrinterPort),
117 iWriteStreamBuffer(NULL)
119 __DECLARE_NAME(_S("CPageBuffer"));
122 void CPageBuffer::Queue()
124 TPtr8 ptr=iBuffer->Ptr(iWritePos);
126 iPrinterPort->WriteRequest(iPtr,iStatus);
127 iWritePos+=iPtr.Length();
132 This function is internal only, and is not intended for use.
135 EXPORT_C TTextFormat::TTextFormat():
136 iUnderlineStyle(EUnderlineOff),
137 iStrikethroughStyle(EStrikethroughOff),
139 iFontString(_L8("")),
144 EXPORT_C TTextFormat::TTextFormat(const TFontUnderline anUnderlineStyle,const TFontStrikethrough aStrikethroughStyle,const TRgb& aColor,const TDesC8& aFontString,const TFontStyle& aFontStyle):
145 iUnderlineStyle(anUnderlineStyle),
146 iStrikethroughStyle(aStrikethroughStyle),
148 iFontString(aFontString),
149 iFontStyle(aFontStyle)
153 EXPORT_C TBool TTextFormat::operator == (const TTextFormat& aFormat) const
155 return (iUnderlineStyle==aFormat.iUnderlineStyle) &&
156 (iStrikethroughStyle==aFormat.iStrikethroughStyle) &&
157 (!iFontString.Compare(aFormat.iFontString)) &&
158 (iFontStyle==aFormat.iFontStyle) && (iColor==aFormat.iColor);
161 EXPORT_C CPageTextEntry::CPageTextEntry(const TPoint& aDrawPos,TInt aHeightInPixels,TInt aTextWidthInPixels,HBufC8* aText,TTextFormat* aTextFormat):
163 iHeightInPixels(aHeightInPixels),
164 iTextWidthInPixels(aTextWidthInPixels),
166 iTextFormat(aTextFormat)
168 __DECLARE_NAME(_S("CPageTextEntry"));
171 EXPORT_C CPageTextEntry::~CPageTextEntry()
176 EXPORT_C TPoint CPageTextEntry::TopTextPos()
178 return iDrawPos-TPoint(0,iHeightInPixels);
181 CPageText::CPageText()
185 void CPageText::ConstructL()
187 iTextFormatList = new(ELeave) CArrayPtrFlat<TTextFormat>(8);
188 iPageTextEntryList = new(ELeave) CArrayPtrFlat<CPageTextEntry>(8);
191 EXPORT_C CPageText* CPageText::NewL()
193 CPageText* pagetext = new(ELeave) CPageText;
194 CleanupStack::PushL(pagetext);
195 pagetext->ConstructL();
200 EXPORT_C CPageText::~CPageText()
203 delete iPageTextEntryList;
204 delete iTextFormatList;
207 EXPORT_C void CPageText::Reset()
209 if (iPageTextEntryList)
210 iPageTextEntryList->ResetAndDestroy();
212 iTextFormatList->ResetAndDestroy();
215 EXPORT_C void CPageText::AddEntryL(const TPoint& aPoint,const TFontUnderline aUnderlineStyle,const TFontStrikethrough aStrikethroughStyle,const TRgb& aColor,const CInfoFont* aFont,const TDesC& aString)
217 TTextFormat textformat(aUnderlineStyle,aStrikethroughStyle,aColor,aFont->CommandString(),aFont->FontSpecInTwips().iFontStyle);
218 TInt count=iTextFormatList->Count();
225 tf=new(ELeave) TTextFormat(textformat);
226 CleanupStack::PushL(tf);
227 iTextFormatList->AppendL(tf);
231 tf=(*iTextFormatList)[i];
235 HBufC8* text=aFont->TranslateStringL(aString);
236 CleanupStack::PushL(text);
237 CPageTextEntry* textentry=new(ELeave) CPageTextEntry(aPoint+TPoint(0,aFont->BaselineOffsetInPixels()),aFont->HeightInPixels(),aFont->MeasureText(aString),text,tf);
240 i=0,count=iPageTextEntryList->Count();
241 for (; (i<count) && (textentry->iDrawPos.iY>(*iPageTextEntryList)[i]->iDrawPos.iY); i++ )
244 for (; (i<count) && (textentry->iDrawPos.iY==(*iPageTextEntryList)[i]->iDrawPos.iY) &&
245 (textentry->iDrawPos.iX>(*iPageTextEntryList)[i]->iDrawPos.iX); i++)
248 CleanupStack::PushL(textentry);
249 iPageTextEntryList->InsertL(i,textentry);
251 if (textentry->iHeightInPixels>iMaxFontHeightInPixels)
252 iMaxFontHeightInPixels=textentry->iHeightInPixels;
255 EXPORT_C TInt CPageText::NumEntries()
257 return iPageTextEntryList->Count();
260 EXPORT_C CPageTextEntry* CPageText::operator [] (TInt anIndex)
262 return (*iPageTextEntryList)[anIndex];