|
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". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // |
|
15 |
|
16 #include <fntstore.h> |
|
17 #include <bitmap.h> |
|
18 #include <bitstd.h> |
|
19 #include <bitdev.h> |
|
20 #include "BITPANIC.H" |
|
21 #include <bitdraw.h> |
|
22 #include <graphics/fbsrasterizer.h> |
|
23 #include "bitgcextradata.h" |
|
24 |
|
25 |
|
26 /** Clears a rectangular area. |
|
27 |
|
28 The cleared area is filled with the current brush colour.The function |
|
29 provides a concrete implementation of the pure virtual function |
|
30 CBitmapContext::Clear(const TRect& aRect). The function |
|
31 behaviour is the same as documented in that class. */ |
|
32 EXPORT_C void CFbsBitGc::Clear(const TRect& aRect) |
|
33 { |
|
34 if (CheckDevice(aRect)) |
|
35 return; |
|
36 |
|
37 TRect rcpy(aRect); |
|
38 rcpy.Move(iOrigin); |
|
39 if (UserClipRect(rcpy)) |
|
40 return; |
|
41 |
|
42 TBrushStyle tempbrushstyle = iBrushStyle; |
|
43 iBrushStyle = ESolidBrush; |
|
44 |
|
45 SetupDevice(); |
|
46 iDevice->DrawingBegin(); |
|
47 RectFill(rcpy); |
|
48 iDevice->DrawingEnd(); |
|
49 |
|
50 iBrushStyle = tempbrushstyle; |
|
51 } |
|
52 |
|
53 |
|
54 |
|
55 /** Clears the whole bitmap or a rectangular area of a bitmap. |
|
56 |
|
57 The cleared area is filled with the current brush colour. |
|
58 |
|
59 The function provides a concrete implementation of the pure virtual function |
|
60 CBitmapContext::Clear(). The function behaviour is the same as documented |
|
61 in that class. |
|
62 |
|
63 @see CBitmapContext::Clear() */ |
|
64 EXPORT_C void CFbsBitGc::Clear() |
|
65 { |
|
66 TRect deviceRect; |
|
67 iDevice->iDrawDevice->GetDrawRect(deviceRect); |
|
68 if ((iOrigin.iX!=0) || (iOrigin.iY!=0)) |
|
69 { |
|
70 deviceRect.Move(-iOrigin); |
|
71 } |
|
72 Clear(deviceRect); |
|
73 } |
|
74 |
|
75 /** Draws a single point. |
|
76 |
|
77 The point is drawn with the current pen settings using the current |
|
78 drawing mode.The function provides a concrete implementation of the |
|
79 pure virtual function CGraphicsContext::Plot(). The |
|
80 function behaviour is the same as documented in that class. */ |
|
81 EXPORT_C void CFbsBitGc::Plot(const TPoint& aPoint) |
|
82 { |
|
83 if (iPenStyle == ENullPen || (iPenSize.iWidth == 0 && iPenSize.iHeight == 0)) |
|
84 return; |
|
85 |
|
86 CheckDevice(); |
|
87 |
|
88 TRect plotRect(aPoint + iOrigin,TSize(1,1)); |
|
89 plotRect.Grow((iPenSize.iWidth >> 1) + 1,(iPenSize.iHeight >> 1) + 1); |
|
90 if (!plotRect.Intersects(iUserClipRect)) |
|
91 return; |
|
92 |
|
93 SetupDevice(); |
|
94 iDevice->DrawingBegin(); |
|
95 DoPlot(aPoint); |
|
96 iDevice->DrawingEnd(); |
|
97 } |
|
98 |
|
99 void CFbsBitGc::DoPlot(const TPoint& aPoint) |
|
100 { |
|
101 CFbsDrawDevice* drawDevice = iDevice->iDrawDevice; |
|
102 |
|
103 const TSize oneByOne(1,1); |
|
104 const TPoint point(aPoint + iOrigin); |
|
105 |
|
106 TRect temp(point,oneByOne); |
|
107 if (iPenSize.iWidth > 1 || iPenSize.iHeight > 1) |
|
108 temp.Grow(iPenSize.iWidth >> 1,iPenSize.iHeight >> 1); |
|
109 AddRect(temp); |
|
110 |
|
111 const CGraphicsContext::TPenStyle penStyle = iPenStyle; |
|
112 iPenStyle = CGraphicsContext::ESolidPen; |
|
113 |
|
114 #if defined(_DEBUG) |
|
115 TRect deviceRect; |
|
116 drawDevice->GetDrawRect(deviceRect); |
|
117 #endif |
|
118 |
|
119 const TInt limit = iDefaultRegionPtr->Count(); |
|
120 for (TInt count = 0; count < limit; count++) |
|
121 { |
|
122 iClipRect = (*iDefaultRegionPtr)[count]; |
|
123 if (!iClipRect.Intersects(temp)) |
|
124 continue; |
|
125 |
|
126 iClipRect.Intersection(temp); |
|
127 if (UserClipRect(iClipRect)) |
|
128 continue; |
|
129 |
|
130 if (iPenSize == oneByOne) |
|
131 { |
|
132 if (iClipRect.Contains(point)) |
|
133 { |
|
134 BG_ASSERT_DEBUG(point.iX >= deviceRect.iTl.iX, EBitgdiPanicOutOfBounds); |
|
135 BG_ASSERT_DEBUG(point.iY >= deviceRect.iTl.iY, EBitgdiPanicOutOfBounds); |
|
136 BG_ASSERT_DEBUG(point.iX <= deviceRect.iBr.iX, EBitgdiPanicOutOfBounds); |
|
137 BG_ASSERT_DEBUG(point.iY <= deviceRect.iBr.iY, EBitgdiPanicOutOfBounds); |
|
138 |
|
139 drawDevice->WriteRgb(point.iX,point.iY,iPenColor,iDrawMode); |
|
140 } |
|
141 } |
|
142 else if (iPenSize.iWidth > 0 && iPenSize.iHeight > 0) |
|
143 PenDrawClipped(point); |
|
144 |
|
145 drawDevice->UpdateRegion(iClipRect); |
|
146 } |
|
147 |
|
148 iPenStyle = penStyle; |
|
149 } |
|
150 |
|
151 |
|
152 /** Sets the shadow area. |
|
153 |
|
154 @param aRegion The region defining the shadow area. */ |
|
155 EXPORT_C void CFbsBitGc::ShadowArea(const TRegion* aRegion) |
|
156 { |
|
157 ShadowFadeArea(aRegion,CFbsDrawDevice::EShadow); |
|
158 } |
|
159 |
|
160 |
|
161 /** Sets the fade area. |
|
162 |
|
163 @param aRegion The region defining the fade area. */ |
|
164 EXPORT_C void CFbsBitGc::FadeArea(const TRegion* aRegion) |
|
165 { |
|
166 ShadowFadeArea(aRegion,CFbsDrawDevice::EFade); |
|
167 } |
|
168 |
|
169 void CFbsBitGc::ShadowFadeArea(const TRegion* aRegion,TInt8 aShadowMode) |
|
170 { |
|
171 if (!aRegion || aRegion->CheckError()) |
|
172 return; |
|
173 |
|
174 CFbsDrawDevice* drawDevice = iDevice->iDrawDevice; |
|
175 |
|
176 CheckDevice(); |
|
177 |
|
178 TRect deviceRect; |
|
179 drawDevice->GetDrawRect(deviceRect); |
|
180 |
|
181 TInt8 shadowMode = iShadowMode; |
|
182 iShadowMode = aShadowMode; |
|
183 |
|
184 CGraphicsAccelerator* ga = GraphicsAccelerator(); |
|
185 |
|
186 SetupDevice(); |
|
187 iDevice->DrawingBegin(); |
|
188 |
|
189 const TInt limit = aRegion->Count(); |
|
190 TInt count; |
|
191 //use Graphics accelerator if available |
|
192 if(ga) |
|
193 { |
|
194 if(iShadowMode & CFbsDrawDevice::EFade) |
|
195 { |
|
196 TInt gaOperationResult = KErrUnknown; |
|
197 iDevice->DrawingEnd(); |
|
198 |
|
199 TGopFadeParams gopFadeParams; |
|
200 gopFadeParams.iScale = iFadeWhiteMap-iFadeBlackMap+1; |
|
201 gopFadeParams.iOffset = iFadeBlackMap; |
|
202 |
|
203 for (count = 0; count < limit; count++) |
|
204 { |
|
205 iClipRect = (*aRegion)[count]; |
|
206 iClipRect.Move(iOrigin); |
|
207 if(!iClipRect.Intersects(deviceRect)) |
|
208 continue; |
|
209 |
|
210 iClipRect.Intersection(deviceRect); |
|
211 AddRect(iClipRect); |
|
212 |
|
213 gaOperationResult = ga->Operation(TGopFadeRect(iClipRect,gopFadeParams)); |
|
214 if(gaOperationResult != KErrNone) |
|
215 break; |
|
216 } |
|
217 if(gaOperationResult == KErrNone) |
|
218 goto finish; |
|
219 iDevice->DrawingBegin(); |
|
220 } |
|
221 } |
|
222 |
|
223 //use graphics contex |
|
224 for (count = 0; count < limit; count++) |
|
225 { |
|
226 iClipRect = (*aRegion)[count]; |
|
227 iClipRect.Move(iOrigin); |
|
228 if(!iClipRect.Intersects(deviceRect)) |
|
229 continue; |
|
230 |
|
231 iClipRect.Intersection(deviceRect); |
|
232 AddRect(iClipRect); |
|
233 |
|
234 drawDevice->ShadowArea(iClipRect); |
|
235 drawDevice->UpdateRegion(iClipRect); |
|
236 } |
|
237 |
|
238 iDevice->DrawingEnd(); |
|
239 |
|
240 finish: |
|
241 iShadowMode = shadowMode; |
|
242 } |
|
243 |
|
244 // if iBrushBitmap is an extended bitmap, PrepareRasterizerForExtendedBitmap() must have been called before this method |
|
245 void CFbsBitGc::ClipFillLine(TPoint aLeft,TPoint aRight) |
|
246 { |
|
247 if (iBrushStyle == ENullBrush || |
|
248 aLeft.iY < iClipRect.iTl.iY || aLeft.iY >= iClipRect.iBr.iY) |
|
249 return; |
|
250 |
|
251 aLeft.iX = Max(aLeft.iX,iClipRect.iTl.iX); |
|
252 aRight.iX = Min(aRight.iX,iClipRect.iBr.iX-1); |
|
253 if (aLeft.iX > aRight.iX) |
|
254 return; |
|
255 |
|
256 BG_ASSERT_DEBUG(iUserClipRect.Contains(aLeft),EBitgdiPanicOutOfBounds); |
|
257 |
|
258 TInt xcoord = aLeft.iX; |
|
259 TInt length = aRight.iX - aLeft.iX + 1; |
|
260 TPoint origin(iOrigin + iBrushOrigin); |
|
261 |
|
262 BG_ASSERT_DEBUG(aLeft.iX + length <= iUserClipRect.iBr.iX,EBitgdiPanicOutOfBounds); |
|
263 |
|
264 CFbsDrawDevice* drawDevice = iDevice->iDrawDevice; |
|
265 |
|
266 switch(iBrushStyle) |
|
267 { |
|
268 case ESolidBrush: |
|
269 drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode); |
|
270 return; |
|
271 case EPatternedBrush: |
|
272 { |
|
273 CBitwiseBitmap* brushBitmap = iBrushBitmap.Address(); |
|
274 BG_ASSERT_ALWAYS(iBrushUsed,EBitgdiPanicInvalidBitmap); |
|
275 BG_ASSERT_ALWAYS(brushBitmap != NULL,EBitgdiPanicInvalidBitmap); |
|
276 |
|
277 TRect sourcerect(aLeft,TSize(length,1)); |
|
278 sourcerect.Move(-origin); |
|
279 DoBitBlt(aLeft,brushBitmap,iBrushBitmap.DataAddress(),iBrushBitmap.DataStride(),sourcerect); |
|
280 return; |
|
281 } |
|
282 case EHorizontalHatchBrush: |
|
283 drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode); |
|
284 if (Abs((aLeft.iY - origin.iY) % 3) == 2) |
|
285 drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iPenColor,iDrawMode); |
|
286 return; |
|
287 case EVerticalHatchBrush: |
|
288 drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode); |
|
289 while (Abs((xcoord - origin.iX) % 3) != 2) |
|
290 xcoord++; |
|
291 for (; xcoord < aLeft.iX + length; xcoord += 3) |
|
292 drawDevice->WriteRgb(xcoord,aLeft.iY,iPenColor,iDrawMode); |
|
293 return; |
|
294 case ESquareCrossHatchBrush: |
|
295 drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode); |
|
296 if (Abs((aLeft.iY - origin.iY) % 3) == 2) |
|
297 drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iPenColor,iDrawMode); |
|
298 else |
|
299 { |
|
300 while (Abs((xcoord - origin.iX) % 3) != 2) |
|
301 xcoord++; |
|
302 for (; xcoord < aLeft.iX + length; xcoord += 3) |
|
303 drawDevice->WriteRgb(xcoord,aLeft.iY,iPenColor,iDrawMode); |
|
304 } |
|
305 return; |
|
306 case EForwardDiagonalHatchBrush: |
|
307 { |
|
308 drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode); |
|
309 TInt diff = (origin.iX + origin.iY - aLeft.iX - aLeft.iY) % 3; |
|
310 if (diff < 0) |
|
311 diff += 3; |
|
312 xcoord += diff; |
|
313 for (; xcoord < aLeft.iX + length; xcoord += 3) |
|
314 drawDevice->WriteRgb(xcoord,aLeft.iY,iPenColor,iDrawMode); |
|
315 } |
|
316 return; |
|
317 case ERearwardDiagonalHatchBrush: |
|
318 { |
|
319 drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode); |
|
320 TInt diff = (origin.iX - origin.iY - aLeft.iX + aLeft.iY) % 3; |
|
321 if (diff < 0) |
|
322 diff += 3; |
|
323 xcoord += diff; |
|
324 for (; xcoord < aLeft.iX + length; xcoord += 3) |
|
325 drawDevice->WriteRgb(xcoord,aLeft.iY,iPenColor,iDrawMode); |
|
326 } |
|
327 return; |
|
328 case EDiamondCrossHatchBrush: |
|
329 { |
|
330 drawDevice->WriteRgbMulti(aLeft.iX,aLeft.iY,length,1,iBrushColor,iDrawMode); |
|
331 TInt sum = aLeft.iX + aLeft.iY - origin.iX - origin.iY; |
|
332 for (; xcoord < aLeft.iX + length; xcoord++,sum++) |
|
333 if ((sum & 1) == 0 && ((sum & 3) != 0 || ((xcoord-origin.iX) & 1) == 1)) |
|
334 drawDevice->WriteRgb(xcoord,aLeft.iY,iPenColor,iDrawMode); |
|
335 } |
|
336 return; |
|
337 default: |
|
338 return; |
|
339 } |
|
340 } |
|
341 |
|
342 void CFbsBitGc::PenAllocate() |
|
343 { |
|
344 iFbsBitGcExtraData->ResetPenArray(); |
|
345 if (iPenSize.iWidth == 1 && iPenSize.iHeight == 1) |
|
346 return; |
|
347 |
|
348 const TInt doublepenheight = iPenSize.iHeight << 1; |
|
349 |
|
350 TInt* penArray = new TInt[doublepenheight]; |
|
351 if (!penArray) |
|
352 return; |
|
353 |
|
354 iFbsBitGcExtraData->SetPenArray(penArray); |
|
355 |
|
356 if (iPenSize.iWidth == 1 || iPenSize.iWidth == 2 || iPenSize.iHeight == 1 || iPenSize.iHeight == 2) |
|
357 { |
|
358 TInt* bitGcPenArray = iFbsBitGcExtraData->PenArray(); |
|
359 for (TInt count = 0; count < iPenSize.iHeight; count += 2) |
|
360 { |
|
361 bitGcPenArray[doublepenheight - count - 2] = 0; |
|
362 bitGcPenArray[doublepenheight - count - 1] = iPenSize.iWidth - 1; |
|
363 bitGcPenArray[count] = 0; |
|
364 bitGcPenArray[count + 1] = iPenSize.iWidth - 1; |
|
365 } |
|
366 } |
|
367 else |
|
368 { |
|
369 TPoint tl,tr,bl,br; |
|
370 TEllipse ellipse; |
|
371 ellipse.Construct(TRect(iPenSize)); |
|
372 TInt* bitGcPenArray = iFbsBitGcExtraData->PenArray(); |
|
373 for (TInt count = 0; count < iPenSize.iHeight; count += 2) |
|
374 { |
|
375 //coverity[check_return] |
|
376 //coverity[unchecked_value] |
|
377 ellipse.NextStep(tl,tr,bl,br); |
|
378 bitGcPenArray[doublepenheight - count - 2] = bl.iX; |
|
379 bitGcPenArray[doublepenheight - count - 1] = br.iX; |
|
380 bitGcPenArray[count] = tl.iX; |
|
381 bitGcPenArray[count + 1] = tr.iX; |
|
382 } |
|
383 } |
|
384 } |
|
385 |
|
386 void CFbsBitGc::PenDrawClipped(TPoint aPoint) |
|
387 { |
|
388 BG_ASSERT_DEBUG(iPenSize.iWidth > 0,EBitgdiPanicZeroLength); |
|
389 BG_ASSERT_DEBUG(iPenSize.iHeight > 0,EBitgdiPanicZeroLength); |
|
390 |
|
391 aPoint.iX -= ((iPenSize.iWidth - 1) >> 1); |
|
392 aPoint.iY -= ((iPenSize.iHeight - 1) >> 1); |
|
393 |
|
394 BG_ASSERT_DEBUG(iClipRect.iTl.iX >= iUserClipRect.iTl.iX,EBitgdiPanicOutOfBounds); |
|
395 BG_ASSERT_DEBUG(iClipRect.iTl.iY >= iUserClipRect.iTl.iY,EBitgdiPanicOutOfBounds); |
|
396 BG_ASSERT_DEBUG(iClipRect.iBr.iX <= iUserClipRect.iBr.iX,EBitgdiPanicOutOfBounds); |
|
397 BG_ASSERT_DEBUG(iClipRect.iBr.iY <= iUserClipRect.iBr.iY,EBitgdiPanicOutOfBounds); |
|
398 |
|
399 CFbsDrawDevice* drawDevice = iDevice->iDrawDevice; |
|
400 |
|
401 if (iPenSize.iWidth == 1 && iPenSize.iHeight == 1) |
|
402 { |
|
403 if (iPenStyle == CGraphicsContext::ESolidPen || (iDotMask & (1 << (iDotParam % iDotLength)))) |
|
404 if (iClipRect.Contains(aPoint)) |
|
405 drawDevice->WriteRgb(aPoint.iX,aPoint.iY,iPenColor,iDrawMode); |
|
406 } |
|
407 else if (iFbsBitGcExtraData->PenArray()) |
|
408 { |
|
409 TInt ycoord = aPoint.iY; |
|
410 const TInt maxdim = Max(iPenSize.iWidth,iPenSize.iHeight); |
|
411 const TInt doublepenheight = iPenSize.iHeight << 1; |
|
412 |
|
413 if (iPenStyle == CGraphicsContext::ESolidPen || (iDotMask & (1 << ((iDotParam / maxdim) % iDotLength)))) |
|
414 { |
|
415 for (TInt ix = 0; ix < doublepenheight; ycoord++,ix += 2) |
|
416 { |
|
417 if (ycoord >= iClipRect.iTl.iY && ycoord < iClipRect.iBr.iY) |
|
418 { |
|
419 TInt left = aPoint.iX + iFbsBitGcExtraData->PenArray()[ix]; |
|
420 TInt right = aPoint.iX + iFbsBitGcExtraData->PenArray()[ix+1]; |
|
421 if (left < iClipRect.iTl.iX) |
|
422 left = iClipRect.iTl.iX; |
|
423 if (right >= iClipRect.iBr.iX) |
|
424 right = iClipRect.iBr.iX - 1; |
|
425 if (left <= right) |
|
426 drawDevice->WriteRgbMulti(left,ycoord,right - left + 1,1,iPenColor,CGraphicsContext::EDrawModePEN); |
|
427 } |
|
428 } |
|
429 } |
|
430 } |
|
431 else |
|
432 { |
|
433 TPoint tl,tr,bl,br; |
|
434 TEllipse ellipse; |
|
435 ellipse.Construct(TRect(aPoint,iPenSize)); |
|
436 while (!ellipse.NextStep(tl,tr,bl,br)) |
|
437 { |
|
438 if (tl.iY >= iClipRect.iTl.iY && tl.iY < iClipRect.iBr.iY) |
|
439 { |
|
440 if (tl.iX < iClipRect.iTl.iX) |
|
441 tl.iX = iClipRect.iTl.iX; |
|
442 if (tr.iX >= iClipRect.iBr.iX) |
|
443 tr.iX = iClipRect.iBr.iX-1; |
|
444 if (tl.iX <= tr.iX) |
|
445 drawDevice->WriteRgbMulti(tl.iX,tl.iY,tr.iX - tl.iX + 1,1,iPenColor,CGraphicsContext::EDrawModePEN); |
|
446 } |
|
447 if (bl.iY >= iClipRect.iTl.iY && bl.iY < iClipRect.iBr.iY) |
|
448 { |
|
449 if (bl.iX < iClipRect.iTl.iX) |
|
450 bl.iX = iClipRect.iTl.iX; |
|
451 if (br.iX >= iClipRect.iBr.iX) |
|
452 br.iX = iClipRect.iBr.iX - 1; |
|
453 if (bl.iX <= br.iX) |
|
454 drawDevice->WriteRgbMulti(bl.iX,bl.iY,br.iX - bl.iX + 1,1,iPenColor,CGraphicsContext::EDrawModePEN); |
|
455 } |
|
456 } |
|
457 |
|
458 if (tl.iY == bl.iY && tl.iY >= iClipRect.iTl.iY && tl.iY < iClipRect.iBr.iY) |
|
459 { |
|
460 if (tl.iX < iClipRect.iTl.iX) |
|
461 tl.iX = iClipRect.iTl.iX; |
|
462 if (tr.iX >= iClipRect.iBr.iX) |
|
463 tr.iX = iClipRect.iBr.iX - 1; |
|
464 if (tl.iX <= tr.iX) |
|
465 drawDevice->WriteRgbMulti(tl.iX,tl.iY,tr.iX - tl.iX + 1,1,iPenColor,CGraphicsContext::EDrawModePEN); |
|
466 } |
|
467 } |
|
468 } |
|
469 |
|
470 void CFbsBitGc::PenDrawDeferred(TPoint aPoint,TInt* aArray,TInt aFirstElement) |
|
471 { |
|
472 BG_ASSERT_DEBUG(iFbsBitGcExtraData->PenArray(),EBitgdiPanicZeroLength); |
|
473 BG_ASSERT_DEBUG(iPenSize.iWidth > 0,EBitgdiPanicZeroLength); |
|
474 BG_ASSERT_DEBUG(iPenSize.iHeight > 0,EBitgdiPanicZeroLength); |
|
475 BG_ASSERT_DEBUG(iClipRect.iTl.iX >= iUserClipRect.iTl.iX,EBitgdiPanicOutOfBounds); |
|
476 BG_ASSERT_DEBUG(iClipRect.iTl.iY >= iUserClipRect.iTl.iY,EBitgdiPanicOutOfBounds); |
|
477 BG_ASSERT_DEBUG(iClipRect.iBr.iX <= iUserClipRect.iBr.iX,EBitgdiPanicOutOfBounds); |
|
478 BG_ASSERT_DEBUG(iClipRect.iBr.iY <= iUserClipRect.iBr.iY,EBitgdiPanicOutOfBounds); |
|
479 |
|
480 aPoint.iX -= ((iPenSize.iWidth - 1) >> 1); |
|
481 const TInt doublepenheight = iPenSize.iHeight << 1; |
|
482 |
|
483 for (TInt ix = 0; ix < doublepenheight; ix++,aFirstElement++) |
|
484 { |
|
485 if (aFirstElement == doublepenheight) |
|
486 aFirstElement = 0; |
|
487 TInt newval = aPoint.iX + iFbsBitGcExtraData->PenArray()[ix]; |
|
488 if (newval < aArray[aFirstElement]) |
|
489 aArray[aFirstElement] = newval; |
|
490 |
|
491 ix++; |
|
492 aFirstElement++; |
|
493 newval = aPoint.iX + iFbsBitGcExtraData->PenArray()[ix]; |
|
494 if (newval > aArray[aFirstElement]) |
|
495 aArray[aFirstElement] = newval; |
|
496 } |
|
497 } |
|
498 |
|
499 //Default implementation of reserved virtual |
|
500 EXPORT_C void CFbsBitGc::Reserved_CGraphicsContext_2() |
|
501 { |
|
502 CBitmapContext::Reserved_CGraphicsContext_2(); |
|
503 } |
|
504 |
|
505 //Default implementation of reserved virtual |
|
506 EXPORT_C void CFbsBitGc::Reserved_CBitmapContext_1() |
|
507 { |
|
508 CBitmapContext::Reserved_CBitmapContext_1(); |
|
509 } |
|
510 |
|
511 //Default implementation of reserved virtual |
|
512 EXPORT_C void CFbsBitGc::Reserved_CBitmapContext_2() |
|
513 { |
|
514 CBitmapContext::Reserved_CBitmapContext_2(); |
|
515 } |
|
516 |
|
517 //Default implementation of reserved virtual |
|
518 EXPORT_C void CFbsBitGc::Reserved_CBitmapContext_3() |
|
519 { |
|
520 CBitmapContext::Reserved_CBitmapContext_3(); |
|
521 } |
|
522 |
|
523 //Default implementation of reserved virtual |
|
524 EXPORT_C void CFbsBitGc::Reserved_CFbsBitGc_1() |
|
525 { |
|
526 } |
|
527 |
|
528 //Default implementation of reserved virtual |
|
529 EXPORT_C void CFbsBitGc::Reserved_CFbsBitGc_2() |
|
530 { |
|
531 } |
|
532 |
|
533 //Default implementation of reserved virtual |
|
534 EXPORT_C void CFbsBitGc::Reserved_CFbsBitGc_3() |
|
535 { |
|
536 } |
|
537 |
|
538 //Default implementation of reserved virtual |
|
539 EXPORT_C void CFbsBitGc::Reserved_CFbsBitGc_4() |
|
540 { |
|
541 } |
|
542 |
|
543 //Default implementation of reserved virtual |
|
544 EXPORT_C void CFbsBitGc::Reserved_CFbsBitGc_5() |
|
545 { |
|
546 } |