uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp
branchRCL_3
changeset 6 10534483575f
parent 5 433cbbb6a04b
child 7 88b23e2e82e1
--- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp	Fri Mar 12 15:47:04 2010 +0200
+++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp	Mon Mar 15 12:43:37 2010 +0200
@@ -77,6 +77,9 @@
     // For handling possible background surface that window may have
     TBool iLayerUsesAlphaFlag;
     TRect iLayerExtent;
+
+    RRegionBuf<5> iShapeRegion;
+    TPoint iShapeOrigin;
     };
 
 EXPORT_C CHuiCanvasVisual* CHuiCanvasVisual::AddNewL(CHuiControl& aOwnerControl,
@@ -120,6 +123,8 @@
     iCanvasVisualData->iLayerUsesAlphaFlag = EFalse;
     iCanvasVisualData->iLayerExtent = TRect();
     
+    iCanvasVisualData->iShapeOrigin = TPoint();
+    
     // subwindow effects
     //EnableBrushesL(ETrue);
     }
@@ -166,6 +171,7 @@
         iCanvasVisualData->iPaintedRegion.Close();
         iCanvasVisualData->iClipRegion.Close();
         iCanvasVisualData->iChildCanvasList.Close();
+        iCanvasVisualData->iShapeRegion.Close();
         }
     
     delete iCanvasVisualData;
@@ -548,7 +554,14 @@
     
     // Draws background if it has been defined
     if (drawVisualContent && IsBackgroundDrawingEnabled())
-        { 
+        {
+        if (iCanvasVisualData->iCanvasPainter && 
+            !iCanvasVisualData->iLayerExtent.IsEmpty())
+            {
+            // In SW rendering case, we support only clearing with transparent.
+            iCanvasVisualData->iCanvasPainter->ClearCapturingBufferArea(aDisplayRect);
+            }
+            
         iCanvasVisualData->iBackground->DrawSelf(aGc, aDisplayRect); 
         }
 
@@ -1209,6 +1222,32 @@
     }
 
 
+EXPORT_C void CHuiCanvasVisual::SetShape(const TPoint& aOrigin, const TRegion& aRegion)
+    {
+    iCanvasVisualData->iShapeOrigin = aOrigin;
+    iCanvasVisualData->iShapeRegion.Copy(aRegion);
+    if ( iCanvasVisualData->iShapeRegion.CheckError() )
+        {
+        // fallback to full
+        iCanvasVisualData->iShapeRegion.Clear();
+        }
+    }
+    
+EXPORT_C TBool CHuiCanvasVisual::HasCustomShape() const
+    {
+    return iCanvasVisualData->iShapeRegion.Count();
+    }
+    
+EXPORT_C TPoint CHuiCanvasVisual::ShapeOrigin() const
+    {
+    return iCanvasVisualData->iShapeOrigin;
+    }
+    
+EXPORT_C const TRegion& CHuiCanvasVisual::ShapeRegion() const
+    {
+    return iCanvasVisualData->iShapeRegion;
+    }
+
 TBool CHuiCanvasVisual::IsCanvasClippingEnabled() const
     {
     return iCanvasVisualData->iCanvasFlags & EHuiCanvasFlagEnableCanvasClipping; 
@@ -1484,3 +1523,10 @@
         }    
     aRecursivePaintRegion.Tidy();
     }
+
+EXPORT_C TRect CHuiCanvasVisual::CommandBufferCoverage(TInt aOrientation)
+    {
+    return iCanvasVisualData->iCanvasPainter->CommandBufferCoverage(aOrientation); 
+    }
+
+