Commit b16077f4097b55414580a5915e85d7b1186d7d07

Authored by Andrew Poor
Committed by Adeel Kazmi
1 parent 6a6a13fc

Mesh visual buttons change.

Change-Id: I32ed8eb68cd099fc329a93fc6c370a4caada32a0
examples/mesh-visual/mesh-visual-example.cpp
... ... @@ -39,11 +39,24 @@ namespace
39 39 MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING
40 40 };
41 41  
  42 + //Button labels.
  43 + const char * const PAUSE = " || ";
  44 + const char * const PLAY = " > ";
  45 + const char * const FIXED = "FIXED";
  46 + const char * const MANUAL = "MANUAL";
  47 + const char * const FRONT = "FRONT";
  48 + const char * const BACK = "BACK";
  49 +
  50 + //Image urls for the light.
  51 + const char * const LIGHT_URL_FRONT = DEMO_IMAGE_DIR "light-icon-front.png";
  52 + const char * const LIGHT_URL_BACK = DEMO_IMAGE_DIR "light-icon-back.png";
  53 +
42 54 const float X_ROTATION_DISPLACEMENT_FACTOR = 60.0f;
43 55 const float Y_ROTATION_DISPLACEMENT_FACTOR = 60.0f;
44 56 const float MODEL_SCALE = 0.75f;
45 57 const float LIGHT_SCALE = 0.15f;
46   - const float BUTTONS_OFFSET_BOTTOM = 0.9f;
  58 + const float BUTTONS_OFFSET_BOTTOM = 0.08f;
  59 + const float BUTTONS_OFFSET_SIDE = 0.2f;
47 60 const int NUM_MESHES = 2;
48 61  
49 62 //Used to identify actors.
... ... @@ -60,11 +73,12 @@ public:
60 73 MeshVisualController( Application& application )
61 74 : mApplication( application ), //Store handle to the application.
62 75 mModelIndex( 1 ), //Start with metal robot.
63   - mShadingModeIndex( 0 ), //Start with textured with detailed specular lighting.
  76 + mShadingModeIndex( 0 ), //Start with texture and detailed specular lighting.
64 77 mTag( -1 ), //Non-valid default, which will get set to a correct value when used.
65 78 mSelectedModelIndex( -1 ), //Non-valid default, which will get set to a correct value when used.
66 79 mPaused( false ), //Animations play by default.
67   - mLightFixed( true ) //The light is fixed by default.
  80 + mLightFixed( true ), //The light is fixed by default.
  81 + mLightFront( true ) //The light is in front by default.
68 82 {
69 83 // Connect to the Application's Init signal
70 84 mApplication.InitSignal().Connect( this, &MeshVisualController::Create );
... ... @@ -163,57 +177,78 @@ public:
163 177 //Place the various buttons on the bottom of the screen, with title labels where necessary.
164 178 void SetupButtons( Layer layer )
165 179 {
166   - //Text label title for changing model or shader.
167   - TextLabel changeTitleLabel = TextLabel::New( "Switch" );
168   - changeTitleLabel.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
169   - changeTitleLabel.SetProperty( TextLabel::Property::UNDERLINE, "{\"thickness\":\"2.0\"}" );
170   - changeTitleLabel.SetParentOrigin( Vector3( 0.2, BUTTONS_OFFSET_BOTTOM, 0.5 ) );
171   - changeTitleLabel.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
172   - layer.Add( changeTitleLabel );
  180 + //Actor for positioning model and shading mode buttons.
  181 + Actor positionActorModel = Actor::New();
  182 + positionActorModel.SetParentOrigin( Vector3( BUTTONS_OFFSET_SIDE, 1.0 - BUTTONS_OFFSET_BOTTOM, 0.5 ) );
  183 + positionActorModel.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
  184 + layer.Add( positionActorModel );
173 185  
174   - //Create button for model changing
  186 + //Create button for model changing.
175 187 PushButton modelButton = Toolkit::PushButton::New();
176 188 modelButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
177 189 modelButton.ClickedSignal().Connect( this, &MeshVisualController::OnChangeModelClicked );
178   - modelButton.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
179   - modelButton.SetAnchorPoint( AnchorPoint::TOP_RIGHT );
  190 + modelButton.SetParentOrigin( ParentOrigin::TOP_CENTER );
  191 + modelButton.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
180 192 modelButton.SetLabelText( "Model" );
181   - changeTitleLabel.Add( modelButton );
182   -
183   - //Create button for shader changing
184   - PushButton shaderButton = Toolkit::PushButton::New();
185   - shaderButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
186   - shaderButton.ClickedSignal().Connect( this, &MeshVisualController::OnChangeShaderClicked );
187   - shaderButton.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
188   - shaderButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
189   - shaderButton.SetLabelText( "Shader" );
190   - changeTitleLabel.Add( shaderButton );
191   -
192   - //Create button for pausing animations
  193 + positionActorModel.Add( modelButton );
  194 +
  195 + //Create button for shading mode changing.
  196 + PushButton shadingModeButton = Toolkit::PushButton::New();
  197 + shadingModeButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
  198 + shadingModeButton.ClickedSignal().Connect( this, &MeshVisualController::OnChangeShadingModeClicked );
  199 + shadingModeButton.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
  200 + shadingModeButton.SetAnchorPoint( AnchorPoint::TOP_CENTER );
  201 + shadingModeButton.SetLabelText( "Shading Mode" );
  202 + positionActorModel.Add( shadingModeButton );
  203 +
  204 + //Text label title for changing model or shading mode.
  205 + TextLabel changeTitleLabel = TextLabel::New( "Change" );
  206 + changeTitleLabel.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
  207 + changeTitleLabel.SetProperty( TextLabel::Property::UNDERLINE, "{\"thickness\":\"2.0\"}" );
  208 + changeTitleLabel.SetParentOrigin( ParentOrigin::TOP_CENTER );
  209 + changeTitleLabel.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
  210 + modelButton.Add( changeTitleLabel );
  211 +
  212 + //Create button for pausing animations.
193 213 PushButton pauseButton = Toolkit::PushButton::New();
194 214 pauseButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
195 215 pauseButton.ClickedSignal().Connect( this, &MeshVisualController::OnPauseClicked );
196   - pauseButton.SetParentOrigin( Vector3( 0.5, BUTTONS_OFFSET_BOTTOM, 0.5 ) );
197   - pauseButton.SetAnchorPoint( AnchorPoint::TOP_CENTER );
198   - pauseButton.SetLabelText( " || " );
  216 + pauseButton.SetParentOrigin( Vector3( 0.5, 1.0 - BUTTONS_OFFSET_BOTTOM, 0.5 ) );
  217 + pauseButton.SetAnchorPoint( AnchorPoint::CENTER );
  218 + pauseButton.SetLabelText( PAUSE );
199 219 layer.Add( pauseButton );
200 220  
  221 + //Actor for positioning light position buttons.
  222 + Actor positionActorLight = Actor::New();
  223 + positionActorLight.SetParentOrigin( Vector3( 1.0 - BUTTONS_OFFSET_SIDE, 1.0 - BUTTONS_OFFSET_BOTTOM, 0.5 ) );
  224 + positionActorLight.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
  225 + layer.Add( positionActorLight );
  226 +
  227 + //Create button for switching between manual and fixed light position.
  228 + PushButton lightModeButton = Toolkit::PushButton::New();
  229 + lightModeButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
  230 + lightModeButton.ClickedSignal().Connect( this, &MeshVisualController::OnChangeLightModeClicked );
  231 + lightModeButton.SetParentOrigin( ParentOrigin::TOP_CENTER );
  232 + lightModeButton.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
  233 + lightModeButton.SetLabelText( FIXED );
  234 + positionActorLight.Add( lightModeButton );
  235 +
  236 + //Create button for switching between front and back light position.
  237 + PushButton lightSideButton = Toolkit::PushButton::New();
  238 + lightSideButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
  239 + lightSideButton.ClickedSignal().Connect( this, &MeshVisualController::OnChangeLightSideClicked );
  240 + lightSideButton.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
  241 + lightSideButton.SetAnchorPoint( AnchorPoint::TOP_CENTER );
  242 + lightSideButton.SetLabelText( FRONT );
  243 + positionActorLight.Add( lightSideButton );
  244 +
201 245 //Text label title for light position mode.
202 246 TextLabel lightTitleLabel = TextLabel::New( "Light Position" );
203 247 lightTitleLabel.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
204 248 lightTitleLabel.SetProperty( TextLabel::Property::UNDERLINE, "{\"thickness\":\"2.0\"}" );
205   - lightTitleLabel.SetParentOrigin( Vector3( 0.8, BUTTONS_OFFSET_BOTTOM, 0.5 ) );
  249 + lightTitleLabel.SetParentOrigin( ParentOrigin::TOP_CENTER );
206 250 lightTitleLabel.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
207   - layer.Add( lightTitleLabel );
208   -
209   - //Create button for switching between manual and fixed light position.
210   - PushButton lightButton = Toolkit::PushButton::New();
211   - lightButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
212   - lightButton.ClickedSignal().Connect( this, &MeshVisualController::OnChangeLightModeClicked );
213   - lightButton.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
214   - lightButton.SetAnchorPoint( AnchorPoint::TOP_CENTER );
215   - lightButton.SetLabelText( "FIXED" );
216   - lightTitleLabel.Add( lightButton );
  251 + lightModeButton.Add( lightTitleLabel );
217 252 }
218 253  
219 254 //Add a point light source the the scene, on a layer above the first.
... ... @@ -246,10 +281,7 @@ public:
246 281 mLightSource.SetPosition( Stage::GetCurrent().GetSize().x * 0.85f, Stage::GetCurrent().GetSize().y * 0.125 );
247 282  
248 283 //Supply an image to represent the light.
249   - Property::Map lightMap;
250   - lightMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
251   - lightMap.Insert( ImageVisual::Property::URL, DEMO_IMAGE_DIR "light-icon.png" );
252   - mLightSource.SetProperty( Control::Property::BACKGROUND, Property::Value( lightMap ) );
  284 + SetLightImage();
253 285  
254 286 //Connect to touch signal for dragging.
255 287 mLightSource.TouchedSignal().Connect( this, &MeshVisualController::OnTouch );
... ... @@ -264,14 +296,27 @@ public:
264 296 upperLayer.Add( mLightSource );
265 297  
266 298 //Decide which light to use to begin with.
267   - if( mLightFixed )
  299 + SetLightMode();
  300 + }
  301 +
  302 + //Sets the image to use for the light source depending on whether the light is in front or behind.
  303 + void SetLightImage()
  304 + {
  305 + std::string imageUrl;
  306 +
  307 + if( mLightFront )
268 308 {
269   - UseFixedLight();
  309 + imageUrl = LIGHT_URL_FRONT;
270 310 }
271 311 else
272 312 {
273   - UseManualLight();
  313 + imageUrl = LIGHT_URL_BACK;
274 314 }
  315 +
  316 + Property::Map lightMap;
  317 + lightMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
  318 + lightMap.Insert( ImageVisual::Property::URL, imageUrl );
  319 + mLightSource.SetProperty( Control::Property::BACKGROUND, Property::Value( lightMap ) );
275 320 }
276 321  
277 322 //Updates the displayed models to account for parameter changes.
... ... @@ -292,16 +337,31 @@ public:
292 337 }
293 338 }
294 339  
  340 + //Set the mode used to light the models.
  341 + void SetLightMode()
  342 + {
  343 + if( mLightFixed )
  344 + {
  345 + UseFixedLight();
  346 + }
  347 + else
  348 + {
  349 + UseManualLight();
  350 + }
  351 + }
  352 +
  353 + //Make the models use a fixed, invisible light above the center of the stage.
295 354 void UseFixedLight()
296 355 {
297 356 //Hide draggable source
298 357 mLightSource.SetVisible( false );
299 358  
300   - //Use stage dimensions to place light at center, offset outwards in z axis.
  359 + //Use stage dimensions to place light at center, offset in z axis.
301 360 Stage stage = Stage::GetCurrent();
302 361 float width = stage.GetSize().width;
303 362 float height = stage.GetSize().height;
304   - Vector3 lightPosition = Vector3( width / 2.0f, height / 2.0f, std::max( width, height ) * 5.0f );
  363 + Vector3 lightPosition = Vector3( width / 2.0f, height / 2.0f,
  364 + ( mLightFront ? 1 : -1 ) * std::max( width, height ) * 5.0f );
305 365  
306 366 //Set global light position
307 367 for( int i = 0; i < NUM_MESHES; ++i )
... ... @@ -310,21 +370,23 @@ public:
310 370 }
311 371 }
312 372  
  373 + //Make the models use a light source that the user can drag around.
313 374 void UseManualLight()
314 375 {
315 376 //Show draggable source
316 377 mLightSource.SetVisible( true );
317 378  
318   - //Update to switch light position to that off the source.
  379 + //Update to switch light position of models to that of the source.
319 380 UpdateLight();
320 381 }
321 382  
322 383 //Updates the light position for each model to account for changes in the source on screen.
323 384 void UpdateLight()
324 385 {
325   - //Set light position to the x and y of the light control, offset out of the screen.
  386 + //Set light position to the x and y of the light control, offset into/out of the screen.
326 387 Vector3 controlPosition = mLightSource.GetCurrentPosition();
327   - Vector3 lightPosition = Vector3( controlPosition.x, controlPosition.y, Stage::GetCurrent().GetSize().x / 2.0f );
  388 + Vector3 lightPosition = Vector3( controlPosition.x, controlPosition.y,
  389 + ( mLightFront ? 1 : -1 ) * Stage::GetCurrent().GetSize().x / 2.0f );
328 390  
329 391 for( int i = 0; i < NUM_MESHES; ++i )
330 392 {
... ... @@ -426,8 +488,8 @@ public:
426 488 return true;
427 489 }
428 490  
429   - //Cycle through the list of shaders.
430   - bool OnChangeShaderClicked( Toolkit::Button button )
  491 + //Cycle through the list of shading modes.
  492 + bool OnChangeShadingModeClicked( Toolkit::Button button )
431 493 {
432 494 ++mShadingModeIndex %= 3;
433 495  
... ... @@ -451,7 +513,7 @@ public:
451 513 mModels[i].rotationAnimation.Pause();
452 514 }
453 515  
454   - button.SetLabelText( " > " );
  516 + button.SetLabelText( PLAY );
455 517 }
456 518 else //Unpause all animations again.
457 519 {
... ... @@ -460,14 +522,14 @@ public:
460 522 mModels[i].rotationAnimation.Play();
461 523 }
462 524  
463   - button.SetLabelText( " || " );
  525 + button.SetLabelText( PAUSE );
464 526 }
465 527  
466 528 return true;
467 529 }
468 530  
469 531  
470   - //Switch between a fixed light source in front of the screen, and a light source the user can drag around.
  532 + //Switch between a fixed light source above/behind the screen, and a light source the user can drag around.
471 533 bool OnChangeLightModeClicked( Toolkit::Button button )
472 534 {
473 535 //Toggle state.
... ... @@ -475,17 +537,39 @@ public:
475 537  
476 538 if( mLightFixed )
477 539 {
478   - UseFixedLight();
479   -
480   - button.SetLabelText( "FIXED" );
  540 + button.SetLabelText( FIXED );
481 541 }
482 542 else
483 543 {
484   - UseManualLight();
  544 + button.SetLabelText( MANUAL );
  545 + }
485 546  
486   - button.SetLabelText( "MANUAL" );
  547 + SetLightMode();
  548 +
  549 + return true;
  550 + }
  551 +
  552 + //Switch between the light being in front of and behind the models.
  553 + bool OnChangeLightSideClicked( Toolkit::Button button )
  554 + {
  555 + //Toggle state.
  556 + mLightFront = !mLightFront;
  557 +
  558 + if( mLightFront )
  559 + {
  560 + button.SetLabelText( FRONT );
  561 + }
  562 + else
  563 + {
  564 + button.SetLabelText( BACK );
487 565 }
488 566  
  567 + //Change light image.
  568 + SetLightImage();
  569 +
  570 + //Update light to account for the change.
  571 + SetLightMode();
  572 +
489 573 return true;
490 574 }
491 575  
... ... @@ -516,11 +600,12 @@ private:
516 600 Vector2 mRotationStart;
517 601  
518 602 int mModelIndex; //Index of model to load.
519   - int mShadingModeIndex; //Index of shader type to use.
  603 + int mShadingModeIndex; //Index of shading mode to use.
520 604 int mTag; //Identifies what kind of actor has been selected in OnTouch.
521 605 int mSelectedModelIndex; //Index of model selected on screen.
522 606 bool mPaused; //If true, all animations are paused and should stay so.
523 607 bool mLightFixed; //If false, the light is in manual.
  608 + bool mLightFront; //Bool for light being in front or behind the models.
524 609 };
525 610  
526 611 // Entry point for Linux & Tizen applications
... ...
resources/images/light-icon-back.png 0 โ†’ 100644

129 KB

resources/images/light-icon.png renamed to resources/images/light-icon-front.png

115 KB