75 CHuiCanvasRenderBuffer* iStoredRenderBuffer; |
75 CHuiCanvasRenderBuffer* iStoredRenderBuffer; |
76 |
76 |
77 // For handling possible background surface that window may have |
77 // For handling possible background surface that window may have |
78 TBool iLayerUsesAlphaFlag; |
78 TBool iLayerUsesAlphaFlag; |
79 TRect iLayerExtent; |
79 TRect iLayerExtent; |
|
80 |
|
81 RRegionBuf<5> iShapeRegion; |
|
82 TPoint iShapeOrigin; |
80 }; |
83 }; |
81 |
84 |
82 EXPORT_C CHuiCanvasVisual* CHuiCanvasVisual::AddNewL(CHuiControl& aOwnerControl, |
85 EXPORT_C CHuiCanvasVisual* CHuiCanvasVisual::AddNewL(CHuiControl& aOwnerControl, |
83 CHuiLayout* aParentLayout) |
86 CHuiLayout* aParentLayout) |
84 { |
87 { |
117 TBool useCanvasRenderBuffer = CHuiStatic::Renderer().Allows(EHuiRenderPluginAllowVisualPBufferSurfaces); |
120 TBool useCanvasRenderBuffer = CHuiStatic::Renderer().Allows(EHuiRenderPluginAllowVisualPBufferSurfaces); |
118 iCanvasVisualData->iCanvasPainter->EnableRenderBuffer(useCanvasRenderBuffer); |
121 iCanvasVisualData->iCanvasPainter->EnableRenderBuffer(useCanvasRenderBuffer); |
119 |
122 |
120 iCanvasVisualData->iLayerUsesAlphaFlag = EFalse; |
123 iCanvasVisualData->iLayerUsesAlphaFlag = EFalse; |
121 iCanvasVisualData->iLayerExtent = TRect(); |
124 iCanvasVisualData->iLayerExtent = TRect(); |
|
125 |
|
126 iCanvasVisualData->iShapeOrigin = TPoint(); |
122 |
127 |
123 // subwindow effects |
128 // subwindow effects |
124 //EnableBrushesL(ETrue); |
129 //EnableBrushesL(ETrue); |
125 } |
130 } |
126 |
131 |
164 } |
169 } |
165 |
170 |
166 iCanvasVisualData->iPaintedRegion.Close(); |
171 iCanvasVisualData->iPaintedRegion.Close(); |
167 iCanvasVisualData->iClipRegion.Close(); |
172 iCanvasVisualData->iClipRegion.Close(); |
168 iCanvasVisualData->iChildCanvasList.Close(); |
173 iCanvasVisualData->iChildCanvasList.Close(); |
|
174 iCanvasVisualData->iShapeRegion.Close(); |
169 } |
175 } |
170 |
176 |
171 delete iCanvasVisualData; |
177 delete iCanvasVisualData; |
172 iCanvasVisualData = NULL; |
178 iCanvasVisualData = NULL; |
173 |
179 |
312 } |
318 } |
313 |
319 |
314 |
320 |
315 TBool CHuiCanvasVisual::CanSkipDrawing() const |
321 TBool CHuiCanvasVisual::CanSkipDrawing() const |
316 { |
322 { |
317 TBool semiTranparentEffectActive = (Effect() && Effect()->IsSemitransparent()); |
323 if (Effect()) |
318 TBool childWindowEffectActive = (Effect() && EffectIsAppliedToChildren()); |
324 { |
319 TBool invisible = (iOpacity.Now() <= EPSILON && !semiTranparentEffectActive); |
325 TBool semiTranparentEffectActive = Effect()->IsSemitransparent(); |
320 TBool effectAppliedToSurfacePixels = (Effect() && (Effect()->EffectFlags() & KHuiFxEnableBackgroundInAllLayers)); |
326 if ((iOpacity.Now() <= EPSILON && !semiTranparentEffectActive)) |
321 |
327 { |
322 if( invisible || |
328 return ETrue; |
323 (!HasCommandBuffers(ETrue /*include children*/) && |
329 } |
324 !childWindowEffectActive && |
330 TBool childWindowEffectActive = EffectIsAppliedToChildren(); |
325 !IsBackgroundDrawingEnabled() && |
331 TBool effectAppliedToSurfacePixels = (Effect()->EffectFlags() & KHuiFxEnableBackgroundInAllLayers); |
326 !IsExternalContentDrawingEnabled()&& |
332 if( !childWindowEffectActive && |
327 !IsExternalContentDrawingEnabled(ETrue /*include children*/) && |
333 !effectAppliedToSurfacePixels && |
328 !effectAppliedToSurfacePixels |
334 !HasCommandBuffers(ETrue /*include children*/) && |
329 |
335 !IsBackgroundDrawingEnabled() && |
330 )) |
336 !IsExternalContentDrawingEnabled()&& |
331 { |
337 !IsExternalContentDrawingEnabled(ETrue /*include children*/)) |
332 return ETrue; |
338 { |
|
339 return ETrue; |
|
340 } |
333 } |
341 } |
334 else |
342 else |
335 { |
343 { |
336 return EFalse; |
344 if (iOpacity.Now() <= EPSILON || |
337 } |
345 (!HasCommandBuffers(ETrue /*include children*/) && |
|
346 !IsBackgroundDrawingEnabled() && |
|
347 !IsExternalContentDrawingEnabled() && |
|
348 !IsExternalContentDrawingEnabled(ETrue /*include children*/)) ) |
|
349 { |
|
350 return ETrue; |
|
351 } |
|
352 } |
|
353 return EFalse; |
338 } |
354 } |
339 |
355 |
340 void CHuiCanvasVisual::Draw(CHuiGc& aGc) const |
356 void CHuiCanvasVisual::Draw(CHuiGc& aGc) const |
341 { |
357 { |
342 if (Flags() & EHuiVisualFlagDrawOnlyAsExternalContent) |
358 if (Flags() & EHuiVisualFlagDrawOnlyAsExternalContent) |
546 aGc.Clip(ClipRegion()); |
562 aGc.Clip(ClipRegion()); |
547 } |
563 } |
548 |
564 |
549 // Draws background if it has been defined |
565 // Draws background if it has been defined |
550 if (drawVisualContent && IsBackgroundDrawingEnabled()) |
566 if (drawVisualContent && IsBackgroundDrawingEnabled()) |
551 { |
567 { |
|
568 if (iCanvasVisualData->iCanvasPainter && |
|
569 !iCanvasVisualData->iLayerExtent.IsEmpty()) |
|
570 { |
|
571 // In SW rendering case, we support only clearing with transparent. |
|
572 iCanvasVisualData->iCanvasPainter->ClearCapturingBufferArea(aDisplayRect); |
|
573 } |
|
574 |
552 iCanvasVisualData->iBackground->DrawSelf(aGc, aDisplayRect); |
575 iCanvasVisualData->iBackground->DrawSelf(aGc, aDisplayRect); |
553 } |
576 } |
554 |
577 |
555 aGc.Push(EHuiGcMatrixModel); |
578 aGc.Push(EHuiGcMatrixModel); |
556 |
579 |
1207 //EnableTransformationL(EFalse); |
1230 //EnableTransformationL(EFalse); |
1208 } |
1231 } |
1209 } |
1232 } |
1210 |
1233 |
1211 |
1234 |
|
1235 EXPORT_C void CHuiCanvasVisual::SetShape(const TPoint& aOrigin, const TRegion& aRegion) |
|
1236 { |
|
1237 iCanvasVisualData->iShapeOrigin = aOrigin; |
|
1238 iCanvasVisualData->iShapeRegion.Copy(aRegion); |
|
1239 if ( iCanvasVisualData->iShapeRegion.CheckError() ) |
|
1240 { |
|
1241 // fallback to full |
|
1242 iCanvasVisualData->iShapeRegion.Clear(); |
|
1243 } |
|
1244 } |
|
1245 |
|
1246 EXPORT_C TBool CHuiCanvasVisual::HasCustomShape() const |
|
1247 { |
|
1248 return iCanvasVisualData->iShapeRegion.Count(); |
|
1249 } |
|
1250 |
|
1251 EXPORT_C TPoint CHuiCanvasVisual::ShapeOrigin() const |
|
1252 { |
|
1253 return iCanvasVisualData->iShapeOrigin; |
|
1254 } |
|
1255 |
|
1256 EXPORT_C const TRegion& CHuiCanvasVisual::ShapeRegion() const |
|
1257 { |
|
1258 return iCanvasVisualData->iShapeRegion; |
|
1259 } |
|
1260 |
1212 TBool CHuiCanvasVisual::IsCanvasClippingEnabled() const |
1261 TBool CHuiCanvasVisual::IsCanvasClippingEnabled() const |
1213 { |
1262 { |
1214 return iCanvasVisualData->iCanvasFlags & EHuiCanvasFlagEnableCanvasClipping; |
1263 return iCanvasVisualData->iCanvasFlags & EHuiCanvasFlagEnableCanvasClipping; |
1215 } |
1264 } |
1216 |
1265 |