/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 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.
*
*/
-#include <dali/dali.h>
#include <dali-toolkit/dali-toolkit.h>
+#include <dali/dali.h>
+
+#include "generated/rendering-line-frag.h"
+#include "generated/rendering-line-vert.h"
using namespace Dali;
using namespace Toolkit;
-namespace
-{
-
-/*
- * Vertex shader
- */
-const char* VERTEX_SHADER = DALI_COMPOSE_SHADER(
-attribute mediump vec2 aPosition;\n // DALi shader builtin
-uniform mediump mat4 uMvpMatrix;\n // DALi shader builtin
-uniform mediump vec3 uSize;\n // DALi shader builtin
-\n
-void main()\n
-{\n
- mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);\n
- vertexPosition.xyz *= uSize;\n
- gl_Position = uMvpMatrix * vertexPosition;\n
-}\n
-);
-
-/*
- * Fragment shader
- */
-const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER(
-uniform mediump vec4 uColor;\n
-\n
-void main()\n
-{\n
- gl_FragColor = uColor;\n
-}\n
-);
-
-}
-
// This example shows how to draw a line in actor's color
//
class DrawLineController : public ConnectionTracker
{
public:
-
- DrawLineController( Application& application )
- : mApplication( application )
+ DrawLineController(Application& application)
+ : mApplication(application)
{
// Connect to the Application's Init signal
- mApplication.InitSignal().Connect( this, &DrawLineController::Create );
+ mApplication.InitSignal().Connect(this, &DrawLineController::Create);
}
~DrawLineController()
}
// The Init signal is received once (only) during the Application lifetime
- void Create( Application& application )
+ void Create(Application& application)
{
- // Get a handle to the stage
- Stage stage = Stage::GetCurrent();
- stage.SetBackgroundColor( Color::WHITE );
+ // Get a handle to the window
+ Window window = application.GetWindow();
+ window.SetBackgroundColor(Color::WHITE);
// Step 1. Create shader
CreateLineShader();
// Step 4. Create an Actor
CreateActor();
- // Respond to a click anywhere on the stage
- stage.GetRootLayer().TouchSignal().Connect( this, &DrawLineController::OnTouch );
+ // Respond to a click anywhere on the window
+ window.GetRootLayer().TouchedSignal().Connect(this, &DrawLineController::OnTouch);
+
+ // Respond to key events
+ window.KeyEventSignal().Connect(this, &DrawLineController::OnKeyEvent);
}
- bool OnTouch( Actor actor, const TouchData& touch )
+ bool OnTouch(Actor actor, const TouchEvent& touch)
{
// quit the application
mApplication.Quit();
}
/**
+ * @brief Called when any key event is received
+ *
+ * Will use this to quit the application if Back or the Escape key is received
+ * @param[in] event The key event information
+ */
+ void OnKeyEvent(const KeyEvent& event)
+ {
+ if(event.GetState() == KeyEvent::DOWN)
+ {
+ if(IsKey(event, Dali::DALI_KEY_ESCAPE) || IsKey(event, Dali::DALI_KEY_BACK))
+ {
+ mApplication.Quit();
+ }
+ }
+ }
+
+ /**
* This function creates a line geometry made of two vertices in order
* to draw a diagonal line.
*/
void CreateLineGeometry()
{
Vector2 vertices[] = {
- Vector2( -1.0f, -1.0f ),
- Vector2( 1.0f, 1.0f )
- };
+ Vector2(-1.0f, -1.0f),
+ Vector2(1.0f, 1.0f)};
- PropertyBuffer vertexBuffer = PropertyBuffer::New( Property::Map()
- .Add( "aPosition", Property::VECTOR2 ) );
- vertexBuffer.SetData( vertices, sizeof(vertices) / sizeof(Vector2) );
+ VertexBuffer vertexBuffer = VertexBuffer::New(Property::Map()
+ .Add("aPosition", Property::VECTOR2));
+ vertexBuffer.SetData(vertices, sizeof(vertices) / sizeof(Vector2));
mGeometry = Geometry::New();
- mGeometry.AddVertexBuffer( vertexBuffer );
- mGeometry.SetType( Geometry::LINES );
+ mGeometry.AddVertexBuffer(vertexBuffer);
+ mGeometry.SetType(Geometry::LINES);
}
/**
- * Creates a shader using inlined variable VERTEX_SHADER and FRAGMENT_SHADER
+ * Creates a shader using inlined variable SHADER_RENDERING_LINE_VERT and SHADER_RENDERING_LINE_FRAG
*
* Shaders are very basic and all they do is transforming vertices and applying actor's colour.
*/
void CreateLineShader()
{
- mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
+ mShader = Shader::New(SHADER_RENDERING_LINE_VERT, SHADER_RENDERING_LINE_FRAG);
}
/**
*/
void CreateRenderer()
{
- mRenderer = Renderer::New( mGeometry, mShader );
+ mRenderer = Renderer::New(mGeometry, mShader);
}
/**
*/
void CreateActor()
{
- Stage stage = Stage::GetCurrent();
- Size size = stage.GetSize() * 0.25f;
- mActor = Actor::New();
- mActor.SetAnchorPoint( AnchorPoint::CENTER );
- mActor.SetParentOrigin( ParentOrigin::CENTER );
- mActor.SetPosition( Vector3( 0.0f, 0.0f, 0.0f ) );
- mActor.SetColor( Color::BLACK );
- mActor.SetSize( Vector3( size.x, size.x, size.x ) );
- mActor.AddRenderer( mRenderer );
- stage.Add( mActor );
+ Window window = mApplication.GetWindow();
+ Size size = Vector2(window.GetSize()) * 0.25f;
+ mActor = Actor::New();
+ mActor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+ mActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+ mActor.SetProperty(Actor::Property::POSITION, Vector3(0.0f, 0.0f, 0.0f));
+ mActor.SetProperty(Actor::Property::COLOR, Color::BLACK);
+ mActor.SetProperty(Actor::Property::SIZE, Vector3(size.x, size.x, size.x));
+ mActor.AddRenderer(mRenderer);
+ window.Add(mActor);
}
private:
- Application& mApplication;
+ Application& mApplication;
Renderer mRenderer;
- Shader mShader;
+ Shader mShader;
Geometry mGeometry;
- Actor mActor;
+ Actor mActor;
};
-void RunTest( Application& application )
+int DALI_EXPORT_API main(int argc, char** argv)
{
- DrawLineController test( application );
-
+ Application application = Application::New(&argc, &argv);
+ DrawLineController test(application);
application.MainLoop();
-}
-
-// Entry point for Linux & Tizen applications
-//
-int DALI_EXPORT_API main( int argc, char **argv )
-{
- Application application = Application::New( &argc, &argv );
-
- RunTest( application );
-
return 0;
}