uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp
changeset 14 83d2d132aa58
parent 13 8f67d927ea57
child 19 f5bac0badc7e
equal deleted inserted replaced
13:8f67d927ea57 14:83d2d132aa58
    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 
  1482                 }        
  1531                 }        
  1483             }
  1532             }
  1484         }    
  1533         }    
  1485     aRecursivePaintRegion.Tidy();
  1534     aRecursivePaintRegion.Tidy();
  1486     }
  1535     }
       
  1536 
       
  1537 EXPORT_C TRect CHuiCanvasVisual::CommandBufferCoverage(TInt aOrientation)
       
  1538     {
       
  1539     return iCanvasVisualData->iCanvasPainter->CommandBufferCoverage(aOrientation); 
       
  1540     }
       
  1541 
       
  1542 EXPORT_C TBool CHuiCanvasVisual::HasTransParentClear() const
       
  1543     {
       
  1544     return iCanvasVisualData->iCanvasPainter->HasCommandBuffers(EHuiCanvasBufferContainsTransparentClear);
       
  1545     }