/
MyApp.cpp
111 lines (92 loc) · 3.62 KB
/
MyApp.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "MyApp.h"
MyApp::MyApp(){
panel1 = new va::PanelWidget(300,400);
panel1->setLabel("Text Rotation");
panel1->setPosition(200,500);
panel1->setPivot(150,200,0);
scene->addChild(panel1);
va::ButtonWidget* button1 = new va::ButtonWidget(200,40);
button1->setName("Reset");
button1->setLabel("Reset Rotation");
button1->setPivot(100,25,0);
button1->setPosition(150,50);
button1->addEventHandler(this);
panel1->addChild(button1);
slider1 = new va::SliderWidget(240,40);
slider1->setLabel("Z Axis");
slider1->setPivot(120,20,0);
slider1->setPosition(150,340);
slider1->setValueMin(-va::PI);
slider1->setValueMax(va::PI);
slider1->addEventHandler(this);
panel1->addChild(slider1);
slider2 = new va::SliderWidget(400,40);
slider2->setLabel("Scale");
slider2->setPivot(200,20,0);
slider2->setPosition(450,500);
slider2->addRotationZ(va::PI/2);
slider2->setValueMin(0.0f);
slider2->setValueMax(2.0f);
slider2->addEventHandler(this);
scene->addChild(slider2);
slider3 = new va::Slider2DWidget(200,200);
slider3->setLabel("XY Axis");
slider3->setPivot(100,100,0);
slider3->setPosition(150,200);
slider3->setValueXMin(-0.2*va::PI);
slider3->setValueXMax(0.2*va::PI);
slider3->setValueYMin(-0.2*va::PI);
slider3->setValueYMax(0.2*va::PI);
slider3->addEventHandler(this);
panel1->addChild(slider3);
panel2 = new va::PanelWidget(300,300);
panel2->setPivot(150,150,0);
panel2->setPosition(700,500,0);
scene->addChild(panel2);
textbox1 = new va::TextShape(300,300);
textbox1->setName("MyTextfield");
textbox1->setText("So, this is the va widget example. It demonstrates how to use basic widgets like the va::Slider. Adding and placing them in the scene is pretty straight forward. It is also interesting to know that they can be nested into each other. The toggle, for example, is nested into the textbox therefore always moving along with it. \n\nThe easist way to handle events from these basic widgets is in the va::App. A button, for example, has a widgetButton(...) handler in the app class.");
textbox1->setPadding(20.0f);
panel2->addChild(textbox1);
toggle1 = new va::ToggleWidget(180,40);
toggle1->setLabel("Make Text Red");
toggle1->setPosition(0,-50);
toggle1->addEventHandler(this);
panel2->addChild(toggle1);
}
MyApp::~MyApp(){}
void MyApp::widget( va::ButtonWidget& button ) {
if (button.getName() == "Reset") { //match by name
slider1->setValue(0.0f);
slider3->setValueX(0.0f);
slider3->setValueY(0.0f);
}
}
void MyApp::widget( va::SliderWidget& slider ) {
if (&slider == slider1) { //match by pointer
panel2->resetRotation();
panel2->addRotationX(-slider3->getValueY());
panel2->addRotationY(slider3->getValueX());
panel2->addRotationZ(-slider1->getValue());
} else if (&slider == slider2) {
panel1->setScale(slider.getValue());
panel2->setScale(slider.getValue());
}
}
void MyApp::widget( va::Slider2DWidget& slider ) {
if (&slider == slider3) {
panel2->resetRotation();
panel2->addRotationX(-slider3->getValueY());
panel2->addRotationY(slider3->getValueX());
panel2->addRotationZ(-slider1->getValue());
}
}
void MyApp::widget( va::ToggleWidget& toggle ) {
if (&toggle == toggle1) { //match by pointer
if( toggle.getValue() ) {
textbox1->setColor(1.0f, 0.0f, 0.0f, 1.0f);
} else {
textbox1->setColor(1.0f, 1.0f, 1.0f, 1.0f);
}
}
}