Remove Geometry::QUAD() usage in Toolkit
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / renderers / gradient / gradient-renderer.cpp
index e11f3ff..952bd3b 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
@@ -69,7 +67,6 @@ const char * const SPREAD_REPEAT("repeat");
 
 // uniform names
 const char * const UNIFORM_ALIGNMENT_MATRIX_NAME( "uAlignmentMatrix" );
-const char * const UNIFORM_TEXTULRE_NAME("sTexture");
 
 // default offset value
 const unsigned int DEFAULT_OFFSET_MINIMUM = 0.0f;
@@ -186,6 +183,7 @@ GradientRenderer::GradientRenderer( RendererFactoryCache& factoryCache )
 : ControlRenderer( factoryCache ),
   mGradientType( LINEAR )
 {
+  mImpl->mFlags |= Impl::IS_PREMULTIPLIED_ALPHA;
 }
 
 GradientRenderer::~GradientRenderer()
@@ -246,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 )
@@ -278,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 );
@@ -316,16 +324,17 @@ void GradientRenderer::InitializeRenderer()
     mFactoryCache.SaveShader( shaderType, shader );
   }
 
-  Material material;
-  material = Material::New( shader );
-  mImpl->mRenderer = Renderer::New( geometry, material );
-
-  Dali::BufferImage lookupTexture = mGradient->GenerateLookupTexture();
-  Sampler sampler = Sampler::New();
+  //Set up the texture set
+  TextureSet textureSet = TextureSet::New();
+  Dali::Texture lookupTexture = mGradient->GenerateLookupTexture();
+  textureSet.SetTexture( 0u, lookupTexture );
   Dali::WrapMode::Type wrap = GetWrapMode( mGradient->GetSpreadMethod() );
+  Sampler sampler = Sampler::New();
   sampler.SetWrapMode(  wrap, wrap  );
+  textureSet.SetSampler( 0u, sampler );
 
-  material.AddTexture( lookupTexture, UNIFORM_TEXTULRE_NAME, sampler );
+  mImpl->mRenderer = Renderer::New( geometry, shader );
+  mImpl->mRenderer.SetTextures( textureSet );
 
   mImpl->mRenderer.RegisterProperty( UNIFORM_ALIGNMENT_MATRIX_NAME, mGradientTransform );
 }
@@ -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;