Updated Gradient renderer to use SetTexture
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / renderers / gradient / gradient-renderer.cpp
index f1838ae..f64ad61 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,6 +29,7 @@
 #include <dali-toolkit/internal/controls/renderers/renderer-factory-impl.h>
 #include <dali-toolkit/internal/controls/renderers/renderer-factory-cache.h>
 #include <dali-toolkit/internal/controls/renderers/control-renderer-data-impl.h>
+#include <dali-toolkit/internal/controls/renderers/renderer-string-constants.h>
 #include <dali-toolkit/internal/controls/renderers/gradient/linear-gradient.h>
 #include <dali-toolkit/internal/controls/renderers/gradient/radial-gradient.h>
 
@@ -43,9 +44,6 @@ namespace Internal
 
 namespace
 {
-const char * const RENDERER_TYPE("rendererType");
-const char * const RENDERER_TYPE_VALUE("gradient");
-
 // properties: linear gradient
 const char * const START_POSITION_NAME("startPosition"); // Property::VECTOR2
 const char * const END_POSITION_NAME("endPosition"); // Property::VECTOR2
@@ -185,6 +183,7 @@ GradientRenderer::GradientRenderer( RendererFactoryCache& factoryCache )
 : ControlRenderer( factoryCache ),
   mGradientType( LINEAR )
 {
+  mImpl->mFlags |= Impl::IS_PREMULTIPLIED_ALPHA;
 }
 
 GradientRenderer::~GradientRenderer()
@@ -245,7 +244,7 @@ void GradientRenderer::DoSetOnStage( Actor& actor )
 void GradientRenderer::DoCreatePropertyMap( Property::Map& map ) const
 {
   map.Clear();
-  map.Insert( RENDERER_TYPE, RENDERER_TYPE_VALUE );
+  map.Insert( RENDERER_TYPE, GRADIENT_RENDERER );
 
   Gradient::GradientUnits units = mGradient->GetGradientUnits();
   if( units == Gradient::USER_SPACE_ON_USE )
@@ -277,7 +276,17 @@ void GradientRenderer::DoCreatePropertyMap( Property::Map& map ) const
   for( unsigned int i=0; i<stops.Count(); i++ )
   {
     offsets.PushBack( stops[i].mOffset );
-    colors.PushBack( stops[i].mStopColor );
+    if( EqualsZero(stops[i].mStopColor.a) )
+    {
+      colors.PushBack( Vector4::ZERO );
+    }
+    else
+    {
+      colors.PushBack( Vector4( stops[i].mStopColor.r / stops[i].mStopColor.a,
+                                stops[i].mStopColor.g / stops[i].mStopColor.a,
+                                stops[i].mStopColor.b / stops[i].mStopColor.a,
+                                stops[i].mStopColor.a));
+    }
   }
 
   map.Insert( STOP_OFFSET_NAME, offsets );
@@ -302,7 +311,7 @@ void GradientRenderer::InitializeRenderer()
   Geometry geometry = mFactoryCache.GetGeometry( RendererFactoryCache::QUAD_GEOMETRY );
   if( !geometry )
   {
-    geometry =  RendererFactoryCache::CreateQuadGeometry();
+    geometry =  Geometry::QUAD();
     mFactoryCache.SaveGeometry( RendererFactoryCache::QUAD_GEOMETRY, geometry );
   }
 
@@ -317,8 +326,8 @@ void GradientRenderer::InitializeRenderer()
 
   //Set up the texture set
   TextureSet textureSet = TextureSet::New();
-  Dali::BufferImage lookupTexture = mGradient->GenerateLookupTexture();
-  textureSet.SetImage( 0u, lookupTexture );
+  Dali::Texture lookupTexture = mGradient->GenerateLookupTexture();
+  textureSet.SetTexture( 0u, lookupTexture );
   Dali::WrapMode::Type wrap = GetWrapMode( mGradient->GetSpreadMethod() );
   Sampler sampler = Sampler::New();
   sampler.SetWrapMode(  wrap, wrap  );
@@ -383,7 +392,7 @@ bool GradientRenderer::NewGradient(Type gradientType, const Property::Map& prope
       {
         if( (colorArray->GetElementAt(i)).Get(color) )
         {
-          mGradient->AddStop( offsetArray[i], color);
+          mGradient->AddStop( offsetArray[i], Vector4(color.r*color.a, color.g*color.a, color.b*color.a, color.a));
           numValidStop++;
         }
       }
@@ -451,13 +460,16 @@ void GradientRenderer::GetStopOffsets(const Property::Value* value, Vector<float
       case Property::ARRAY:
       {
         Property::Array* offsetArray = value->GetArray();
-        unsigned int numStop = offsetArray->Count();
-        float offset;
-        for( unsigned int i=0; i<numStop; i++ )
+        if( offsetArray )
         {
-          if( offsetArray->GetElementAt(i).Get(offset) )
+          unsigned int numStop = offsetArray->Count();
+          float offset;
+          for( unsigned int i=0; i<numStop; i++ )
           {
-            stopOffsets.PushBack( offset );
+            if( offsetArray->GetElementAt(i).Get(offset) )
+            {
+              stopOffsets.PushBack( offset );
+            }
           }
         }
         break;