#include <dali-toolkit/internal/text/clipping/text-clipper.h>
// EXTERNAL INCLUDES
-#include <algorithm>
#include <dali/public-api/common/stage.h>
#include <dali/public-api/render-tasks/render-task-list.h>
-#include <dali/integration-api/debug.h>
+#include <dali/devel-api/rendering/renderer.h>
namespace
{
return mOffscreenRootActor;
}
-ImageActor Clipper::GetImageActor() const
+Actor Clipper::GetImageView() const
{
- return mImageActor;
+ return mImageView;
}
void Clipper::Refresh( const Vector2& size )
offscreenSize.height,
Pixel::RGBA8888 );
- mImageActor.SetSize( offscreenSize );
- mImageActor.SetImage( frameBufferImage );
+ mOffscreenRootActor.SetSize( size );
+
+ mImageView.SetSize( offscreenSize );
+ mImageView.SetImage( frameBufferImage );
mRenderTask.SetTargetFrameBuffer( frameBufferImage );
// Stores current sizPe to avoid create new Dali resources if text changes.
const Size offscreenSize( std::min( MAX_OFFSCREEN_RENDERING_SIZE, size.width ),
std::min( MAX_OFFSCREEN_RENDERING_SIZE, size.height ) );
- // Create a root actor and an image actor for offscreen rendering.
+ // Create a root actor and an image view for offscreen rendering.
mOffscreenRootActor = Layer::New();
- mOffscreenRootActor.SetRelayoutEnabled( false );
mOffscreenRootActor.SetColorMode( USE_OWN_COLOR );
- mOffscreenRootActor.SetPositionInheritanceMode( DONT_INHERIT_POSITION );
+ mOffscreenRootActor.SetInheritPosition( false );
mOffscreenRootActor.SetInheritScale( false );
mOffscreenRootActor.SetDepthTestDisabled( true );
mOffscreenRootActor.SetSize( offscreenSize );
- mImageActor = ImageActor::New();
- mImageActor.SetRelayoutEnabled( false );
- mImageActor.SetParentOrigin( ParentOrigin::CENTER );
- mImageActor.SetBlendFunc( BlendingFactor::ONE, BlendingFactor::ONE_MINUS_SRC_ALPHA,
- BlendingFactor::ONE, BlendingFactor::ONE );
- mImageActor.SetScale( Vector3( 1.0f, -1.0f, 1.0f ) );
- mImageActor.SetSize( offscreenSize );
+ mImageView = ImageView::New();
+ mImageView.SetParentOrigin( ParentOrigin::CENTER );
+ mImageView.SetScale( Vector3( 1.0f, -1.0f, 1.0f ) );
+ mImageView.SetSize( offscreenSize );
// Creates a new camera actor.
mOffscreenCameraActor = CameraActor::New();
FrameBufferImage frameBufferImage = FrameBufferImage::New( offscreenSize.width,
offscreenSize.height,
Pixel::RGBA8888 );
- mImageActor.SetImage( frameBufferImage );
+ mImageView.SetImage( frameBufferImage );
mRenderTask.SetTargetFrameBuffer( frameBufferImage );
+ mImageView.OnStageSignal().Connect(this, &Clipper::OnStageConnect);
// Stores current size to avoid create new Dali resources if text changes.
mCurrentOffscreenSize = offscreenSize;
}
+void Clipper::OnStageConnect( Dali::Actor actor )
+{
+ Renderer renderer = mImageView.GetRendererAt(0);
+ renderer.SetProperty( Renderer::Property::BLEND_FACTOR_SRC_RGB, BlendFactor::ONE );
+ renderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_RGB, BlendFactor::ONE_MINUS_SRC_ALPHA );
+ renderer.SetProperty( Renderer::Property::BLEND_FACTOR_SRC_ALPHA, BlendFactor::ONE );
+ renderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_ALPHA, BlendFactor::ONE );
+}
+
Clipper::Clipper()
{
}
if( Stage::IsInstalled() )
{
UnparentAndReset( mOffscreenRootActor );
- UnparentAndReset( mImageActor );
+ UnparentAndReset( mImageView );
Stage::GetCurrent().GetRenderTaskList().RemoveTask( mRenderTask );
}