[DEV] remove dependency with scenarium
This commit is contained in:
parent
757b5c78e7
commit
760fd95b60
@ -9,7 +9,8 @@ list_elem = [
|
|||||||
"Entry",
|
"Entry",
|
||||||
"Tick",
|
"Tick",
|
||||||
"ScrollBar",
|
"ScrollBar",
|
||||||
"Button"
|
"Button",
|
||||||
|
"Slider"
|
||||||
]
|
]
|
||||||
|
|
||||||
for elem in list_elem:
|
for elem in list_elem:
|
||||||
|
@ -1,134 +0,0 @@
|
|||||||
/** @file
|
|
||||||
* @author Edouard DUPIN
|
|
||||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
|
||||||
* @license MPL v2.0 (see license file)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <ewol/widget/Slider.hpp>
|
|
||||||
|
|
||||||
#include <ewol/widget/Manager.hpp>
|
|
||||||
#include <etk/typeInfo.hpp>
|
|
||||||
ETK_DECLARE_TYPE(ewol::widget::Slider);
|
|
||||||
|
|
||||||
int dotRadius = 6;
|
|
||||||
|
|
||||||
ewol::widget::Slider::Slider() :
|
|
||||||
signalChange(this, "change", ""),
|
|
||||||
propertyValue(this, "value",
|
|
||||||
0.0f,
|
|
||||||
"Value of the Slider",
|
|
||||||
ewol::widget::Slider::onChangePropertyValue),
|
|
||||||
propertyMinimum(this, "min",
|
|
||||||
0.0f,
|
|
||||||
"Minium value",
|
|
||||||
ewol::widget::Slider::onChangePropertyMinimum),
|
|
||||||
propertyMaximum(this, "max",
|
|
||||||
10.0f,
|
|
||||||
"Maximum value",
|
|
||||||
ewol::widget::Slider::onChangePropertyMaximum),
|
|
||||||
propertyStep(this, "step",
|
|
||||||
1.0f,
|
|
||||||
"Step size",
|
|
||||||
ewol::widget::Slider::onChangePropertyStep) {
|
|
||||||
addObjectType("ewol::widget::Slider");
|
|
||||||
|
|
||||||
this.textColorFg = etk::color::black;
|
|
||||||
|
|
||||||
this.textColorBg = etk::color::black;
|
|
||||||
this.textColorBg.setA(0x3F);
|
|
||||||
|
|
||||||
propertyCanFocus.setDirectCheck(true);
|
|
||||||
// Limit event at 1:
|
|
||||||
setMouseLimit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
ewol::widget::Slider::~Slider() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ewol::widget::Slider::calculateMinMaxSize() {
|
|
||||||
Vector2f minTmp = propertyMinSize.getPixel();
|
|
||||||
this.minSize.setValue(etk::max(minTmp.x(), 40.0f),
|
|
||||||
etk::max(minTmp.y(), dotRadius*2.0f) );
|
|
||||||
markToRedraw();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ewol::widget::Slider::onDraw() {
|
|
||||||
this.draw.draw();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ewol::widget::Slider::onRegenerateDisplay() {
|
|
||||||
if (needRedraw() == false) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// clean the object list ...
|
|
||||||
this.draw.clear();
|
|
||||||
this.draw.setColor(this.textColorFg);
|
|
||||||
// draw a line :
|
|
||||||
this.draw.setThickness(1);
|
|
||||||
this.draw.setPos(Vector3f(dotRadius, this.size.y()/2, 0) );
|
|
||||||
this.draw.lineTo(Vector3f(this.size.x()-dotRadius, this.size.y()/2, 0) );
|
|
||||||
this.draw.setThickness(0);
|
|
||||||
|
|
||||||
etk::Color<> borderDot = this.textColorFg;
|
|
||||||
borderDot.setA(borderDot.a()/2);
|
|
||||||
this.draw.setPos(Vector3f(4+((propertyValue-propertyMinimum)/(propertyMaximum-propertyMinimum))*(this.size.x()-2*dotRadius), this.size.y()/2, 0) );
|
|
||||||
this.draw.setColorBg(borderDot);
|
|
||||||
this.draw.circle(dotRadius);
|
|
||||||
this.draw.setColorBg(this.textColorFg);
|
|
||||||
this.draw.circle(dotRadius/1.6);
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean ewol::widget::Slider::onEventInput( ewol::event::Input _event) {
|
|
||||||
Vector2f relativePos = relativePosition(_event.getPos());
|
|
||||||
//Log.debug("Event on Slider ..." + _event);
|
|
||||||
if (1 == _event.getId()) {
|
|
||||||
if( KeyStatus::pressSingle == _event.getStatus()
|
|
||||||
|| KeyStatus::move == _event.getStatus()) {
|
|
||||||
// get the new position :
|
|
||||||
Log.verbose("Event on Slider (" + relativePos.x() + "," + relativePos.y() + ")");
|
|
||||||
float oldValue = *propertyValue;
|
|
||||||
updateValue(*propertyMinimum + (float)(relativePos.x() - dotRadius) / (this.size.x()-2*dotRadius) * (*propertyMaximum-*propertyMinimum));
|
|
||||||
if (oldValue != *propertyValue) {
|
|
||||||
Log.verbose(" new value : " + *propertyValue + " in [" + *propertyMinimum + ".." + *propertyMaximum + "]");
|
|
||||||
signalChange.emit(*propertyValue);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ewol::widget::Slider::updateValue(float _newValue) {
|
|
||||||
_newValue = etk::max(etk::min(_newValue, *propertyMaximum), *propertyMinimum);
|
|
||||||
if (*propertyStep == 0.0f) {
|
|
||||||
propertyValue.setDirect(_newValue);
|
|
||||||
} else {
|
|
||||||
float basicVal = (long)(_newValue / *propertyStep);
|
|
||||||
propertyValue.setDirect(basicVal * *propertyStep);
|
|
||||||
}
|
|
||||||
markToRedraw();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ewol::widget::Slider::onChangePropertyValue() {
|
|
||||||
updateValue(*propertyValue);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ewol::widget::Slider::onChangePropertyMinimum() {
|
|
||||||
updateValue(*propertyValue);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ewol::widget::Slider::onChangePropertyMaximum() {
|
|
||||||
updateValue(*propertyValue);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ewol::widget::Slider::onChangePropertyStep() {
|
|
||||||
updateValue(*propertyValue);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
EMF(STRING)
|
EMF(STRING)
|
||||||
# Blender v3.1.2 EMF File: 'Button.blend'
|
# Blender v3.2.2 EMF File: 'Button.blend'
|
||||||
Mesh:CheckBox_Cube
|
Mesh:CheckBox_Cube
|
||||||
Vertex:16
|
Vertex:16
|
||||||
12.043998 11.983889 -5.389912|12.043998 -12.104107 -5.391196|12.043998 11.983492 2.052411|12.043998 -12.104505 2.051126|-12.043998 11.983889 -5.389912|-12.043998 -12.104107 -5.391196|-12.043998 11.983492 2.052411|-12.043998 -12.104505 2.051126|10.127714 10.066911 7.616918|10.127714 -10.188519 7.615837|-10.127714 10.066911 7.616918|-10.127714 -10.188519 7.615837|-10.199120 -10.192897 3.116539|-10.199120 10.181330 3.117619|10.199120 10.181330 3.117619|10.199120 -10.192897 3.116539|
|
12.043998 11.983889 -5.389912|12.043998 -12.104107 -5.391196|12.043998 11.983492 2.052411|12.043998 -12.104505 2.051126|-12.043998 11.983889 -5.389912|-12.043998 -12.104107 -5.391196|-12.043998 11.983492 2.052411|-12.043998 -12.104505 2.051126|10.127714 10.066911 7.616918|10.127714 -10.188519 7.615837|-10.127714 10.066911 7.616918|-10.127714 -10.188519 7.615837|-10.199120 -10.192897 3.116539|-10.199120 10.181330 3.117619|10.199120 10.181330 3.117619|10.199120 -10.192897 3.116539|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
EMF(STRING)
|
EMF(STRING)
|
||||||
# Blender v3.1.2 EMF File: 'Entry.blend'
|
# Blender v3.2.2 EMF File: 'Entry.blend'
|
||||||
Mesh:CheckBox_Cube
|
Mesh:CheckBox_Cube
|
||||||
Vertex:16
|
Vertex:16
|
||||||
13.004523 12.944430 -5.686628|13.004523 -13.064616 -5.688015|13.004523 12.944001 2.349230|13.004523 -13.065046 2.347842|-13.004523 12.944430 -5.686628|-13.004523 -13.064616 -5.688015|-13.004523 12.944001 2.349230|-13.004523 -13.065046 2.347842|10.127714 10.066911 7.616918|10.127714 -10.188519 7.615837|-10.127714 10.066911 7.616918|-10.127714 -10.188519 7.615837|-10.199120 -10.192897 3.116539|-10.199120 10.181330 3.117619|10.199120 10.181330 3.117619|10.199120 -10.192897 3.116539|
|
13.004523 12.944430 -5.686628|13.004523 -13.064616 -5.688015|13.004523 12.944001 2.349230|13.004523 -13.065046 2.347842|-13.004523 12.944430 -5.686628|-13.004523 -13.064616 -5.688015|-13.004523 12.944001 2.349230|-13.004523 -13.065046 2.347842|10.127714 10.066911 7.616918|10.127714 -10.188519 7.615837|-10.127714 10.066911 7.616918|-10.127714 -10.188519 7.615837|-10.199120 -10.192897 3.116539|-10.199120 10.181330 3.117619|10.199120 10.181330 3.117619|10.199120 -10.192897 3.116539|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
EMF(STRING)
|
EMF(STRING)
|
||||||
# Blender v3.1.2 EMF File: 'ScrollBar.blend'
|
# Blender v3.2.2 EMF File: 'ScrollBar.blend'
|
||||||
Mesh:ScrollBar_Cube
|
Mesh:CheckBox_Cube
|
||||||
Vertex:24
|
Vertex:24
|
||||||
0.999633 0.939126 0.692412|0.999633 -1.060139 0.692306|-0.999632 0.939126 0.692412|-0.999633 -1.060139 0.692306|0.612843 1.917809 -0.016061|1.978234 0.460425 -0.016089|1.978234 -0.581316 -0.016244|0.612843 -2.038658 -0.016272|1.978234 0.460402 0.387109|0.612843 1.917744 0.387137|1.490144 1.429646 0.539397|0.612843 -2.038723 0.386926|1.978234 -0.581340 0.386954|1.490132 -1.550629 0.539242|-1.978234 0.460425 -0.016089|-0.612843 1.917809 -0.016061|-0.612843 -2.038658 -0.016272|-1.978234 -0.581316 -0.016244|-0.612843 1.917744 0.387137|-1.978234 0.460402 0.387109|-1.490144 1.429646 0.539397|-1.978234 -0.581340 0.386954|-0.612843 -2.038723 0.386926|-1.490132 -1.550629 0.539242|
|
0.999633 0.939126 0.692412|0.999633 -1.060139 0.692306|-0.999632 0.939126 0.692412|-0.999633 -1.060139 0.692306|0.612843 1.917809 -0.016061|1.978234 0.460425 -0.016089|1.978234 -0.581316 -0.016244|0.612843 -2.038658 -0.016272|1.978234 0.460402 0.387109|0.612843 1.917744 0.387137|1.490144 1.429646 0.539397|0.612843 -2.038723 0.386926|1.978234 -0.581340 0.386954|1.490132 -1.550629 0.539242|-1.978234 0.460425 -0.016089|-0.612843 1.917809 -0.016061|-0.612843 -2.038658 -0.016272|-1.978234 -0.581316 -0.016244|-0.612843 1.917744 0.387137|-1.978234 0.460402 0.387109|-1.490144 1.429646 0.539397|-1.978234 -0.581340 0.386954|-0.612843 -2.038723 0.386926|-1.490132 -1.550629 0.539242|
|
||||||
UV-mapping:
|
UV-mapping:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
EMF(STRING)
|
EMF(STRING)
|
||||||
# Blender v3.1.2 EMF File: 'CheckBox.blend'
|
# Blender v3.2.2 EMF File: 'Tick.blend'
|
||||||
Mesh:CheckBox_Cube
|
Mesh:CheckBox_Cube
|
||||||
Vertex:16
|
Vertex:16
|
||||||
12.043998 11.983889 -5.389912|12.043998 -12.104107 -5.391196|12.043998 11.983492 2.052411|12.043998 -12.104505 2.051126|-12.043998 11.983889 -5.389912|-12.043998 -12.104107 -5.391196|-12.043998 11.983492 2.052411|-12.043998 -12.104505 2.051126|10.127714 10.066911 7.616918|10.127714 -10.188519 7.615837|-10.127714 10.066911 7.616918|-10.127714 -10.188519 7.615837|-10.199120 -10.192897 3.116539|-10.199120 10.181330 3.117619|10.199120 10.181330 3.117619|10.199120 -10.192897 3.116539|
|
12.043998 11.983889 -5.389912|12.043998 -12.104107 -5.391196|12.043998 11.983492 2.052411|12.043998 -12.104505 2.051126|-12.043998 11.983889 -5.389912|-12.043998 -12.104107 -5.391196|-12.043998 11.983492 2.052411|-12.043998 -12.104505 2.051126|10.127714 10.066911 7.616918|10.127714 -10.188519 7.615837|-10.127714 10.066911 7.616918|-10.127714 -10.188519 7.615837|-10.199120 -10.192897 3.116539|-10.199120 10.181330 3.117619|10.199120 10.181330 3.117619|10.199120 -10.192897 3.116539|
|
||||||
|
@ -31,8 +31,11 @@
|
|||||||
"gui_checked":{
|
"gui_checked":{
|
||||||
"Kd":"0.0 0.0 0.0"
|
"Kd":"0.0 0.0 0.0"
|
||||||
},
|
},
|
||||||
|
"gui_slider":{
|
||||||
|
"Kd":"0.0 1.0 0.0"
|
||||||
|
},
|
||||||
"gui_border_inside":{
|
"gui_border_inside":{
|
||||||
"Kd":"0.5 0.5 0.5"
|
"Kd":"0.5 0.5 0.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package sample.atriasoft.ewol;
|
package sample.atriasoft.ewol;
|
||||||
|
|
||||||
import io.scenarium.logger.LogLevel;
|
import org.atriasoft.reggol.LogLevel;
|
||||||
import io.scenarium.logger.Logger;
|
import org.atriasoft.reggol.Logger;
|
||||||
|
|
||||||
public class Log {
|
public class Log {
|
||||||
private static final boolean FORCE_ALL = false;
|
private static final boolean FORCE_ALL = false;
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
*/
|
*/
|
||||||
package sample.atriasoft.ewol.validationWidget;
|
package sample.atriasoft.ewol.validationWidget;
|
||||||
|
|
||||||
import io.scenarium.logger.LogLevel;
|
import org.atriasoft.reggol.LogLevel;
|
||||||
import io.scenarium.logger.Logger;
|
import org.atriasoft.reggol.Logger;
|
||||||
|
|
||||||
public class Log {
|
public class Log {
|
||||||
private static final String LIB_NAME = "ejson-test";
|
private static final String LIB_NAME = "ejson-test";
|
||||||
|
@ -16,7 +16,11 @@ public class MainWindows extends BasicWindows {
|
|||||||
|
|
||||||
public MainWindows() {
|
public MainWindows() {
|
||||||
setPropertyTitle("Test all compositing");
|
setPropertyTitle("Test all compositing");
|
||||||
|
|
||||||
|
this.titles.add("test Slider");
|
||||||
|
this.values.add("""
|
||||||
|
<Slider name='My name is Bob' fill='true,false,false' expand='true'/>
|
||||||
|
""");
|
||||||
this.titles.add("test Entry");
|
this.titles.add("test Entry");
|
||||||
this.values.add("""
|
this.values.add("""
|
||||||
<Entry name='My name is Bob' fill='true,false,false' expand='true'/>
|
<Entry name='My name is Bob' fill='true,false,false' expand='true'/>
|
||||||
|
@ -22,7 +22,7 @@ open module org.atriasoft.ewol {
|
|||||||
requires transitive org.atriasoft.esvg;
|
requires transitive org.atriasoft.esvg;
|
||||||
requires transitive org.atriasoft.exml;
|
requires transitive org.atriasoft.exml;
|
||||||
requires transitive org.atriasoft.ejson;
|
requires transitive org.atriasoft.ejson;
|
||||||
requires transitive io.scenarium.logger;
|
requires transitive org.atriasoft.reggol;
|
||||||
requires org.atriasoft.loader3d;
|
requires org.atriasoft.loader3d;
|
||||||
requires org.atriasoft.egami;
|
requires org.atriasoft.egami;
|
||||||
requires java.base;
|
requires java.base;
|
||||||
|
@ -28,6 +28,13 @@ import org.atriasoft.loader3d.resources.ResourcePaletteFile;
|
|||||||
// TODO : load image
|
// TODO : load image
|
||||||
// TODO : Abstaraction between states (call by name and the system greate IDs
|
// TODO : Abstaraction between states (call by name and the system greate IDs
|
||||||
public class GuiShape extends Compositing {
|
public class GuiShape extends Compositing {
|
||||||
|
private class SpecificValues {
|
||||||
|
public Matrix4f transform = Matrix4f.IDENTITY;
|
||||||
|
public Vector3f offsetScaleInside = Vector3f.ZERO;
|
||||||
|
public Vector3f offsetScaleOutside = Vector3f.ZERO;
|
||||||
|
public ResourceMesh mesh = null;
|
||||||
|
}
|
||||||
|
|
||||||
private static final int SHAPER_POS_BOTTOM = 3;
|
private static final int SHAPER_POS_BOTTOM = 3;
|
||||||
private static final int SHAPER_POS_LEFT = 0;
|
private static final int SHAPER_POS_LEFT = 0;
|
||||||
private static final int SHAPER_POS_RIGHT = 2;
|
private static final int SHAPER_POS_RIGHT = 2;
|
||||||
@ -36,9 +43,9 @@ public class GuiShape extends Compositing {
|
|||||||
private int confIdPaletteFile = -1; //!< Palette of the display
|
private int confIdPaletteFile = -1; //!< Palette of the display
|
||||||
private final int[] confIdPaddingIn = new int[4]; //!< Padding in property : X-left X-right Y-top Y-buttom
|
private final int[] confIdPaddingIn = new int[4]; //!< Padding in property : X-left X-right Y-top Y-buttom
|
||||||
private final int[] confIdPaddingOut = new int[4]; //!< Padding out property : X-left X-right Y-top Y-buttom
|
private final int[] confIdPaddingOut = new int[4]; //!< Padding out property : X-left X-right Y-top Y-buttom
|
||||||
// External theme config:
|
|
||||||
private ResourceConfigFile config = null; //!< pointer on the config file resources
|
|
||||||
|
|
||||||
|
// External theme configuration:
|
||||||
|
private ResourceConfigFile config = null; //!< pointer on the config file resources
|
||||||
private int confObjectFile = -1; //!< Config Id of the object file to display
|
private int confObjectFile = -1; //!< Config Id of the object file to display
|
||||||
private int confObjectFile2 = -1; //!< Config Id of the object file to display
|
private int confObjectFile2 = -1; //!< Config Id of the object file to display
|
||||||
private int confProgramFileFrag = -1; //!< ConfigFile opengGl program Name
|
private int confProgramFileFrag = -1; //!< ConfigFile opengGl program Name
|
||||||
@ -52,22 +59,19 @@ public class GuiShape extends Compositing {
|
|||||||
private int oGLPaletteOffset = -1; //!< openGL id on the element (offset for the palet rendering)
|
private int oGLPaletteOffset = -1; //!< openGL id on the element (offset for the palet rendering)
|
||||||
private int oGLOffsetScaleInside = -1;
|
private int oGLOffsetScaleInside = -1;
|
||||||
private int oGLOffsetScaleOutside = -1;
|
private int oGLOffsetScaleOutside = -1;
|
||||||
|
|
||||||
// openGL shaders programs:
|
// openGL shaders programs:
|
||||||
private ResourceProgram oGLprogram = null; //!< pointer on the opengl display program
|
private ResourceProgram oGLprogram = null; //!< pointer on the opengl display program
|
||||||
// For the Image :
|
// For the Image :
|
||||||
|
|
||||||
private ResourcePaletteFile palette;
|
private ResourcePaletteFile palette;
|
||||||
private ResourceTexture2 texture;
|
private ResourceTexture2 texture;
|
||||||
private final ResourceMesh[] mesh = new ResourceMesh[2];
|
|
||||||
private Padding sizeObject = Padding.ZERO;
|
private Padding sizeObject = Padding.ZERO;
|
||||||
private int stateActivate = -1; //!< Activate state of the element
|
private int stateActivate = -1; //!< Activate state of the element
|
||||||
private GuiShapeMode stateNew = GuiShapeMode.NORMAL; //!< destination state
|
private GuiShapeMode stateNew = GuiShapeMode.NORMAL; //!< destination state
|
||||||
private GuiShapeMode stateOld = GuiShapeMode.NORMAL; //!< previous state
|
private GuiShapeMode stateOld = GuiShapeMode.NORMAL; //!< previous state
|
||||||
private Matrix4f transform = Matrix4f.IDENTITY;
|
|
||||||
private Uri uri; //!< Name of the configuration of the shaper.
|
|
||||||
|
|
||||||
private Vector3f offsetScaleInside = Vector3f.ZERO;
|
private Uri uri; //!< Name of the configuration of the shaper.
|
||||||
private Vector3f offsetScaleOutside = Vector3f.ZERO;
|
private final SpecificValues[] valueSpecific = new SpecificValues[2];
|
||||||
|
|
||||||
// dynamic change:
|
// dynamic change:
|
||||||
private float stateTransition = 0; //!< working state between 2 states
|
private float stateTransition = 0; //!< working state between 2 states
|
||||||
@ -133,10 +137,10 @@ public class GuiShape extends Compositing {
|
|||||||
// this is a normal case ... the user can choice to have no config basic file ...
|
// this is a normal case ... the user can choice to have no config basic file ...
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (idMesh == 0 && this.mesh[0] == null) {
|
if (idMesh == 0 && this.valueSpecific[0] == null) {
|
||||||
Log.error("No Object (0) to display ...");
|
Log.error("No Object (0) to display ...");
|
||||||
return;
|
return;
|
||||||
} else if (idMesh == 1 && this.mesh[1] == null) {
|
} else if (idMesh == 1 && this.valueSpecific[1] == null) {
|
||||||
Log.error("No Object (1) to display ...");
|
Log.error("No Object (1) to display ...");
|
||||||
return;
|
return;
|
||||||
} else if (idMesh < 0 && idMesh > 1) {
|
} else if (idMesh < 0 && idMesh > 1) {
|
||||||
@ -151,14 +155,14 @@ public class GuiShape extends Compositing {
|
|||||||
// set Matrix : translation/positionMatrix
|
// set Matrix : translation/positionMatrix
|
||||||
final Matrix4f projMatrix = OpenGL.getMatrix();
|
final Matrix4f projMatrix = OpenGL.getMatrix();
|
||||||
final Matrix4f camMatrix = OpenGL.getCameraMatrix();
|
final Matrix4f camMatrix = OpenGL.getCameraMatrix();
|
||||||
final Matrix4f tmpMatrix = this.matrixApply.multiply(this.transform);
|
final Matrix4f tmpMatrix = this.matrixApply.multiply(this.valueSpecific[idMesh].transform);
|
||||||
this.oGLprogram.use();
|
this.oGLprogram.use();
|
||||||
this.mesh[idMesh].bindForRendering();
|
this.valueSpecific[idMesh].mesh.bindForRendering();
|
||||||
this.oGLprogram.uniformMatrix(this.oGLMatrixProjection, projMatrix);
|
this.oGLprogram.uniformMatrix(this.oGLMatrixProjection, projMatrix);
|
||||||
this.oGLprogram.uniformMatrix(this.oGLMatrixTransformation, tmpMatrix);
|
this.oGLprogram.uniformMatrix(this.oGLMatrixTransformation, tmpMatrix);
|
||||||
this.oGLprogram.uniformMatrix(this.oGLMatrixView, camMatrix);
|
this.oGLprogram.uniformMatrix(this.oGLMatrixView, camMatrix);
|
||||||
|
|
||||||
final Set<String> layers = this.mesh[idMesh].getLayers();
|
final Set<String> layers = this.valueSpecific[idMesh].mesh.getLayers();
|
||||||
Log.verbose("get layers:" + layers);
|
Log.verbose("get layers:" + layers);
|
||||||
// Texture:
|
// Texture:
|
||||||
final float imageDelta = (float) 1 / ResourcePaletteFile.getHeight();
|
final float imageDelta = (float) 1 / ResourcePaletteFile.getHeight();
|
||||||
@ -190,21 +194,21 @@ public class GuiShape extends Compositing {
|
|||||||
|
|
||||||
//Log.verbose("plop: " + this.offsetScaleOutside);
|
//Log.verbose("plop: " + this.offsetScaleOutside);
|
||||||
//Log.verbose("plop: " + this.offsetScaleInside);
|
//Log.verbose("plop: " + this.offsetScaleInside);
|
||||||
this.oGLprogram.uniformVector(this.oGLOffsetScaleInside, this.offsetScaleInside);
|
this.oGLprogram.uniformVector(this.oGLOffsetScaleInside, this.valueSpecific[idMesh].offsetScaleInside);
|
||||||
this.oGLprogram.uniformVector(this.oGLOffsetScaleOutside, this.offsetScaleOutside);
|
this.oGLprogram.uniformVector(this.oGLOffsetScaleOutside, this.valueSpecific[idMesh].offsetScaleOutside);
|
||||||
|
|
||||||
this.texture.bindForRendering(0);
|
this.texture.bindForRendering(0);
|
||||||
this.mesh[idMesh].render("palette");
|
this.valueSpecific[idMesh].mesh.render("palette");
|
||||||
if (secondaryTexture != null) {
|
if (secondaryTexture != null) {
|
||||||
this.oGLprogram.uniformFloat(this.oGLPaletteOffset, 0);
|
this.oGLprogram.uniformFloat(this.oGLPaletteOffset, 0);
|
||||||
secondaryTexture.bindForRendering(0);
|
secondaryTexture.bindForRendering(0);
|
||||||
this.mesh[idMesh].render("gui_dynamic_1");
|
this.valueSpecific[idMesh].mesh.render("gui_dynamic_1");
|
||||||
|
|
||||||
}
|
}
|
||||||
// Request the draw of the elements:
|
// Request the draw of the elements:
|
||||||
this.mesh[idMesh].render();
|
this.valueSpecific[idMesh].mesh.render();
|
||||||
|
|
||||||
this.mesh[idMesh].unBindForRendering();
|
this.valueSpecific[idMesh].mesh.unBindForRendering();
|
||||||
this.oGLprogram.unUse();
|
this.oGLprogram.unUse();
|
||||||
OpenGL.disable(Flag.flag_depthTest);
|
OpenGL.disable(Flag.flag_depthTest);
|
||||||
}
|
}
|
||||||
@ -369,8 +373,10 @@ public class GuiShape extends Compositing {
|
|||||||
}
|
}
|
||||||
final String objectFile = this.config.getString(this.confObjectFile);
|
final String objectFile = this.config.getString(this.confObjectFile);
|
||||||
if (!objectFile.isEmpty()) {
|
if (!objectFile.isEmpty()) {
|
||||||
this.mesh[0] = ResourceMesh.create(Uri.valueOf(objectFile));
|
final int idMesh = 0;
|
||||||
final List<Vector3f> verticesToModify = this.mesh[0].getGeneratedPosition();
|
this.valueSpecific[idMesh] = new SpecificValues();
|
||||||
|
this.valueSpecific[idMesh].mesh = ResourceMesh.create(Uri.valueOf(objectFile));
|
||||||
|
final List<Vector3f> verticesToModify = this.valueSpecific[idMesh].mesh.getGeneratedPosition();
|
||||||
float top = 0;
|
float top = 0;
|
||||||
float bottom = 0;
|
float bottom = 0;
|
||||||
float left = 0;
|
float left = 0;
|
||||||
@ -379,7 +385,7 @@ public class GuiShape extends Compositing {
|
|||||||
float font = 0;
|
float font = 0;
|
||||||
// estimate size of border:
|
// estimate size of border:
|
||||||
if (verticesToModify == null) {
|
if (verticesToModify == null) {
|
||||||
Log.critical("Element is null : verticesToModify");
|
Log.critical("Element is null : verticesToModify 1");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (int iii = 0; iii < verticesToModify.size(); iii++) {
|
for (int iii = 0; iii < verticesToModify.size(); iii++) {
|
||||||
@ -391,11 +397,16 @@ public class GuiShape extends Compositing {
|
|||||||
font = Math.max(font, verticesToModify.get(iii).z());
|
font = Math.max(font, verticesToModify.get(iii).z());
|
||||||
}
|
}
|
||||||
this.sizeObject = new Padding(Math.abs(left), Math.abs(top), Math.abs(right), Math.abs(bottom));
|
this.sizeObject = new Padding(Math.abs(left), Math.abs(top), Math.abs(right), Math.abs(bottom));
|
||||||
|
} else {
|
||||||
|
final int idMesh = 0;
|
||||||
|
this.valueSpecific[idMesh] = null;
|
||||||
}
|
}
|
||||||
final String objectFile2 = this.config.getString(this.confObjectFile2);
|
final String objectFile2 = this.config.getString(this.confObjectFile2);
|
||||||
if (!objectFile2.isEmpty()) {
|
if (!objectFile2.isEmpty()) {
|
||||||
this.mesh[1] = ResourceMesh.create(Uri.valueOf(objectFile2));
|
final int idMesh = 1;
|
||||||
final List<Vector3f> verticesToModify = this.mesh[1].getGeneratedPosition();
|
this.valueSpecific[idMesh] = new SpecificValues();
|
||||||
|
this.valueSpecific[idMesh].mesh = ResourceMesh.create(Uri.valueOf(objectFile2));
|
||||||
|
final List<Vector3f> verticesToModify = this.valueSpecific[idMesh].mesh.getGeneratedPosition();
|
||||||
float top = 0;
|
float top = 0;
|
||||||
float bottom = 0;
|
float bottom = 0;
|
||||||
float left = 0;
|
float left = 0;
|
||||||
@ -415,6 +426,9 @@ public class GuiShape extends Compositing {
|
|||||||
back = Math.min(back, verticesToModify.get(iii).z());
|
back = Math.min(back, verticesToModify.get(iii).z());
|
||||||
font = Math.max(font, verticesToModify.get(iii).z());
|
font = Math.max(font, verticesToModify.get(iii).z());
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
final int idMesh = 1;
|
||||||
|
this.valueSpecific[idMesh] = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,6 +486,36 @@ public class GuiShape extends Compositing {
|
|||||||
this.stateActivate = status;
|
this.stateActivate = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setShape(final int idMesh, final Vector3f origin, final Vector3f size) {
|
||||||
|
final Padding tmp = getPadding();
|
||||||
|
setShape(idMesh, origin, size, origin.add(tmp.left(), tmp.bottom(), 0), size.less(tmp.x(), tmp.y(), 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setShape(final int idMesh, final Vector3f origin, final Vector3f size, final Vector3f insidePos, final Vector3f insideSize) {
|
||||||
|
final Vector3f halfSize = insideSize.multiply(0.5f);
|
||||||
|
this.valueSpecific[idMesh].offsetScaleOutside = halfSize;
|
||||||
|
this.valueSpecific[idMesh].offsetScaleInside = halfSize.add(this.sizeObject.x() * 0.25f, this.sizeObject.y() * 0.25f, 0);
|
||||||
|
/*
|
||||||
|
List<Vector3f> verticesToModify = this.mesh.getGeneratedPosition();
|
||||||
|
float[] newVertices = new float[verticesToModify.size()*3];
|
||||||
|
for (int iii=0; iii<newVertices.length; ++iii) {
|
||||||
|
Vector3f tmp = verticesToModify.get(iii);
|
||||||
|
newVertices[iii*3+0] = getUpdatedPos(tmp.x(), halfSize.x());
|
||||||
|
newVertices[iii*3+1] = getUpdatedPos(tmp.y(), halfSize.y());
|
||||||
|
newVertices[iii*3+2] = getUpdatedPos(tmp.z(), halfSize.z());
|
||||||
|
}
|
||||||
|
this.mesh.setModifiedPosition(newVertices);
|
||||||
|
*/
|
||||||
|
this.valueSpecific[idMesh].transform = Matrix4f.createMatrixTranslate(new Vector3f(origin.x() + size.x() * 0.5f, origin.y() + size.y() * 0.5f, origin.z() + size.z() * 0.5f));
|
||||||
|
}
|
||||||
|
|
||||||
|
// private float getUpdatedPos(final float value, final float halfsize) {
|
||||||
|
// if (value <= 0.0f) {
|
||||||
|
// return value - halfsize;
|
||||||
|
// }
|
||||||
|
// return value + halfsize;
|
||||||
|
// }
|
||||||
|
|
||||||
// @previous
|
// @previous
|
||||||
public void setShape(final Vector2f origin, final Vector2f size) {
|
public void setShape(final Vector2f origin, final Vector2f size) {
|
||||||
final Padding tmp = getPadding();
|
final Padding tmp = getPadding();
|
||||||
@ -523,8 +567,8 @@ public class GuiShape extends Compositing {
|
|||||||
public void setShape(final Vector2f origin, final Vector2f size, final Vector2f insidePos, final Vector2f insideSize) {
|
public void setShape(final Vector2f origin, final Vector2f size, final Vector2f insidePos, final Vector2f insideSize) {
|
||||||
//Log.error("Set shape property : origin=" + origin + " size=" + size + " in-pos=" + insidePos + " in-size=" + insideSize);
|
//Log.error("Set shape property : origin=" + origin + " size=" + size + " in-pos=" + insidePos + " in-size=" + insideSize);
|
||||||
final Vector2f halfSize = insideSize.multiply(0.5f);
|
final Vector2f halfSize = insideSize.multiply(0.5f);
|
||||||
this.offsetScaleOutside = new Vector3f(halfSize.x(), halfSize.y(), 1.0f);
|
final Vector3f offsetScaleOutside = new Vector3f(halfSize.x(), halfSize.y(), 1.0f);
|
||||||
this.offsetScaleInside = new Vector3f(halfSize.x() + this.sizeObject.x() * 0.25f, halfSize.y() + this.sizeObject.y() * 0.25f, 1.0f);
|
final Vector3f offsetScaleInside = new Vector3f(halfSize.x() + this.sizeObject.x() * 0.25f, halfSize.y() + this.sizeObject.y() * 0.25f, 1.0f);
|
||||||
/*
|
/*
|
||||||
List<Vector3f> verticesToModify = this.mesh.getGeneratedPosition();
|
List<Vector3f> verticesToModify = this.mesh.getGeneratedPosition();
|
||||||
float[] newVertices = new float[verticesToModify.size()*3];
|
float[] newVertices = new float[verticesToModify.size()*3];
|
||||||
@ -538,16 +582,17 @@ public class GuiShape extends Compositing {
|
|||||||
//this.transform = this.transform.multiply(Matrix4f.createMatrixTranslate(new Vector3f(origin.x() + size.x() * 0.5f, origin.y() + size.y() * 0.5f, 0.0f)));
|
//this.transform = this.transform.multiply(Matrix4f.createMatrixTranslate(new Vector3f(origin.x() + size.x() * 0.5f, origin.y() + size.y() * 0.5f, 0.0f)));
|
||||||
this.mesh.setModifiedPosition(newVertices);
|
this.mesh.setModifiedPosition(newVertices);
|
||||||
*/
|
*/
|
||||||
this.transform = Matrix4f.createMatrixTranslate(new Vector3f(origin.x() + size.x() * 0.5f, origin.y() + size.y() * 0.5f, 0.0f));
|
final Matrix4f transform = Matrix4f.createMatrixTranslate(new Vector3f(origin.x() + size.x() * 0.5f, origin.y() + size.y() * 0.5f, 0.0f));
|
||||||
|
for (int iii = 0; iii < 2; iii++) {
|
||||||
|
if (this.valueSpecific[iii] == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
this.valueSpecific[iii].offsetScaleOutside = offsetScaleOutside;
|
||||||
|
this.valueSpecific[iii].offsetScaleInside = offsetScaleInside;
|
||||||
|
this.valueSpecific[iii].transform = transform;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// private float getUpdatedPos(final float value, final float halfsize) {
|
|
||||||
// if (value <= 0.0f) {
|
|
||||||
// return value - halfsize;
|
|
||||||
// }
|
|
||||||
// return value + halfsize;
|
|
||||||
// }
|
|
||||||
|
|
||||||
public void setShape(final Vector3f origin, final Vector3f size) {
|
public void setShape(final Vector3f origin, final Vector3f size) {
|
||||||
final Padding tmp = getPadding();
|
final Padding tmp = getPadding();
|
||||||
setShape(origin, size, origin.add(tmp.left(), tmp.bottom(), 0), size.less(tmp.x(), tmp.y(), 0));
|
setShape(origin, size, origin.add(tmp.left(), tmp.bottom(), 0), size.less(tmp.x(), tmp.y(), 0));
|
||||||
@ -555,8 +600,8 @@ public class GuiShape extends Compositing {
|
|||||||
|
|
||||||
public void setShape(final Vector3f origin, final Vector3f size, final Vector3f insidePos, final Vector3f insideSize) {
|
public void setShape(final Vector3f origin, final Vector3f size, final Vector3f insidePos, final Vector3f insideSize) {
|
||||||
final Vector3f halfSize = insideSize.multiply(0.5f);
|
final Vector3f halfSize = insideSize.multiply(0.5f);
|
||||||
this.offsetScaleOutside = halfSize;
|
final Vector3f offsetScaleOutside = halfSize;
|
||||||
this.offsetScaleInside = halfSize.add(this.sizeObject.x() * 0.25f, this.sizeObject.y() * 0.25f, 0);
|
final Vector3f offsetScaleInside = halfSize.add(this.sizeObject.x() * 0.25f, this.sizeObject.y() * 0.25f, 0);
|
||||||
/*
|
/*
|
||||||
List<Vector3f> verticesToModify = this.mesh.getGeneratedPosition();
|
List<Vector3f> verticesToModify = this.mesh.getGeneratedPosition();
|
||||||
float[] newVertices = new float[verticesToModify.size()*3];
|
float[] newVertices = new float[verticesToModify.size()*3];
|
||||||
@ -568,7 +613,15 @@ public class GuiShape extends Compositing {
|
|||||||
}
|
}
|
||||||
this.mesh.setModifiedPosition(newVertices);
|
this.mesh.setModifiedPosition(newVertices);
|
||||||
*/
|
*/
|
||||||
this.transform = Matrix4f.createMatrixTranslate(new Vector3f(origin.x() + size.x() * 0.5f, origin.y() + size.y() * 0.5f, origin.z() + size.z() * 0.5f));
|
final Matrix4f transform = Matrix4f.createMatrixTranslate(new Vector3f(origin.x() + size.x() * 0.5f, origin.y() + size.y() * 0.5f, origin.z() + size.z() * 0.5f));
|
||||||
|
for (int iii = 0; iii < 2; iii++) {
|
||||||
|
if (this.valueSpecific[iii] == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
this.valueSpecific[iii].offsetScaleOutside = offsetScaleOutside;
|
||||||
|
this.valueSpecific[iii].offsetScaleInside = offsetScaleInside;
|
||||||
|
this.valueSpecific[iii].transform = transform;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package org.atriasoft.ewol.internal;
|
package org.atriasoft.ewol.internal;
|
||||||
|
|
||||||
import io.scenarium.logger.LogLevel;
|
import org.atriasoft.reggol.LogLevel;
|
||||||
import io.scenarium.logger.Logger;
|
import org.atriasoft.reggol.Logger;
|
||||||
|
|
||||||
public class Log {
|
public class Log {
|
||||||
private static final boolean FORCE_ALL = false;
|
private static final boolean FORCE_ALL = false;
|
||||||
|
@ -37,13 +37,13 @@ public class Composer extends Container {
|
|||||||
public static Widget composerGenerateFile(final Uri uri, final long id) {
|
public static Widget composerGenerateFile(final Uri uri, final long id) {
|
||||||
final byte[] elemData = Uri.getAllData(uri);
|
final byte[] elemData = Uri.getAllData(uri);
|
||||||
if (elemData == null) {
|
if (elemData == null) {
|
||||||
Log.error("Can not read the Stream : " + uri);
|
Log.error("Can not read the Stream : {}", uri);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
final String dataToParse = new String(elemData);
|
final String dataToParse = new String(elemData);
|
||||||
final Widget tmp = composerGenerateString(dataToParse, id);
|
final Widget tmp = composerGenerateString(dataToParse, id);
|
||||||
if (tmp == null) {
|
if (tmp == null) {
|
||||||
Log.error("Faiul to Load data: {}", uri);
|
Log.error("Fail to Load data: {}", uri);
|
||||||
}
|
}
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ public class ImageDisplay extends Widget {
|
|||||||
|
|
||||||
@AknotManaged
|
@AknotManaged
|
||||||
@AknotAttribute
|
@AknotAttribute
|
||||||
@AknotName(value = "border")
|
@AknotName(value = "image-border")
|
||||||
@AknotDescription(value = "Border of the image")
|
@AknotDescription(value = "Border of the image")
|
||||||
public Dimension2f getPropertyBorder() {
|
public Dimension2f getPropertyBorder() {
|
||||||
return this.propertyBorder;
|
return this.propertyBorder;
|
||||||
@ -87,7 +87,7 @@ public class ImageDisplay extends Widget {
|
|||||||
|
|
||||||
@AknotManaged
|
@AknotManaged
|
||||||
@AknotAttribute
|
@AknotAttribute
|
||||||
@AknotName(value = "size")
|
@AknotName(value = "image-size")
|
||||||
@AknotDescription(value = "Basic display size of the image")
|
@AknotDescription(value = "Basic display size of the image")
|
||||||
public Dimension2f getPropertyImageSize() {
|
public Dimension2f getPropertyImageSize() {
|
||||||
return this.propertyImageSize;
|
return this.propertyImageSize;
|
||||||
|
@ -1,60 +1,340 @@
|
|||||||
|
package org.atriasoft.ewol.widget;
|
||||||
|
|
||||||
|
import org.atriasoft.aknot.annotation.AknotAttribute;
|
||||||
|
import org.atriasoft.aknot.annotation.AknotDescription;
|
||||||
|
import org.atriasoft.aknot.annotation.AknotManaged;
|
||||||
|
import org.atriasoft.aknot.annotation.AknotName;
|
||||||
|
import org.atriasoft.aknot.annotation.AknotSignal;
|
||||||
|
import org.atriasoft.esignal.Signal;
|
||||||
|
import org.atriasoft.etk.Color;
|
||||||
|
import org.atriasoft.etk.Uri;
|
||||||
|
import org.atriasoft.etk.math.FMath;
|
||||||
|
import org.atriasoft.etk.math.Vector3f;
|
||||||
|
import org.atriasoft.etk.math.Vector3i;
|
||||||
|
import org.atriasoft.ewol.Padding;
|
||||||
|
import org.atriasoft.ewol.compositing.CompositingDrawing;
|
||||||
|
import org.atriasoft.ewol.compositing.GuiShape;
|
||||||
|
import org.atriasoft.ewol.event.EventInput;
|
||||||
|
import org.atriasoft.ewol.internal.Log;
|
||||||
|
import org.atriasoft.gale.key.KeyStatus;
|
||||||
|
|
||||||
/** @file
|
/** @file
|
||||||
* @author Edouard DUPIN
|
* @author Edouard DUPIN
|
||||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
* @license MPL v2.0 (see license file)
|
* @license MPL v2.0 (see license file)
|
||||||
*/
|
*/
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <etk/types.hpp>
|
/**
|
||||||
#include <etk/Color.hpp>
|
* @ingroup ewolWidgetGroup
|
||||||
#include <ewol/debug.hpp>
|
*/
|
||||||
#include <ewol/widget/Widget.hpp>
|
public class Slider extends Widget {
|
||||||
#include <ewol/compositing/Drawing.hpp>
|
|
||||||
#include <esignal/Signal.hpp>
|
private Uri propertyConfig = new Uri("THEME", "shape/Slider.json", "ewol");
|
||||||
|
|
||||||
namespace ewol {
|
private Float propertyValue = 0.0f; //!< string that must be displayed
|
||||||
namespace widget {
|
private GuiShape shape = null;
|
||||||
class Slider;
|
private final GuiShape shapeTop = null;
|
||||||
using Slider = ememory::Ptr<ewol::widget::Slider>;
|
@AknotSignal
|
||||||
using SliderWeak = ememory::WeakPtr<ewol::widget::Slider>;
|
@AknotName("value")
|
||||||
/**
|
@AknotDescription("Tick value change")
|
||||||
* @ingroup ewolWidgetGroup
|
public Signal<Float> signalValue = new Signal<>();
|
||||||
*/
|
// element over:
|
||||||
class Slider : public Widget {
|
Vector3f overPositionStart = Vector3f.ZERO;
|
||||||
public: // signals
|
Vector3f overPositionStop = Vector3f.ZERO;
|
||||||
esignal::Signal<float> signalChange;
|
Vector3f overCursorPositionStart = Vector3f.ZERO;
|
||||||
public:
|
Vector3f overCursorPositionStop = Vector3f.ZERO;
|
||||||
//eproperty::Value<String> propertyShape; //!< name of the shape used
|
|
||||||
eproperty::Value<float> propertyValue; //!< current value of the Slider
|
//@AknotAutoGenerateProperty("minimum", "configuration of the widget")
|
||||||
eproperty::Value<float> propertyMinimum; //!< minimum value of the slider
|
private Float propertyMinimum = 0.0f;
|
||||||
eproperty::Value<float> propertyMaximum; //!< maximum value of the slider
|
|
||||||
eproperty::Value<float> propertyStep; //!< step of every iteration of the slider (increment/precision)
|
private Float propertyMaximum = 10.0f;
|
||||||
protected:
|
|
||||||
Slider();
|
private Float propertyStep = 0.1f;
|
||||||
public:
|
|
||||||
DECLARE_WIDGET_FACTORY(Slider, "Slider");
|
private final Color textColorFg = Color.BLACK; //!< Text color
|
||||||
~Slider();
|
|
||||||
public:
|
private final Color textColorBg = Color.BLACK.withA(0x3F); //!< Background color
|
||||||
// TODO : Rework the color in the theme ...
|
|
||||||
void setColor(etk::Color<> _newColor) {
|
CompositingDrawing draw = new CompositingDrawing(); //!< drawing tool.
|
||||||
this.textColorFg = _newColor;
|
|
||||||
};
|
public Slider() {
|
||||||
protected:
|
this.propertyCanFocus = true;
|
||||||
ewol::compositing::Drawing this.draw; //!< drawing tool.
|
onChangePropertyShaper();
|
||||||
etk::Color<> this.textColorFg; //!< Text color
|
markToRedraw();
|
||||||
etk::Color<> this.textColorBg; //!< Background color
|
// Limit event at 1:
|
||||||
void updateValue(float _newValue);
|
setMouseLimit(1);
|
||||||
public: // Derived function
|
|
||||||
void onDraw() ;
|
|
||||||
void calculateMinMaxSize() ;
|
|
||||||
void onRegenerateDisplay() ;
|
|
||||||
boolean onEventInput( ewol::event::Input _event) ;
|
|
||||||
protected:
|
|
||||||
void onChangePropertyValue();
|
|
||||||
void onChangePropertyMinimum();
|
|
||||||
void onChangePropertyMaximum();
|
|
||||||
void onChangePropertyStep();
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
|
public void calculateMinMaxSize() {
|
||||||
|
// call main class
|
||||||
|
super.calculateMinMaxSize();
|
||||||
|
// get generic padding
|
||||||
|
Padding padding = Padding.ZERO;
|
||||||
|
if (this.shape != null) {
|
||||||
|
padding = this.shape.getPadding();
|
||||||
|
}
|
||||||
|
final Vector3i minHeight = Vector3i.VALUE_16;
|
||||||
|
|
||||||
|
Vector3f minimumSizeBase = new Vector3f(minHeight.x(), minHeight.y(), minHeight.z());
|
||||||
|
// add padding :
|
||||||
|
minimumSizeBase = minimumSizeBase.add(padding.x(), padding.y(), padding.z());
|
||||||
|
this.minSize = Vector3f.max(this.minSize, minimumSizeBase);
|
||||||
|
// verify the min max of the min size ...
|
||||||
|
checkMinSize();
|
||||||
|
Log.error("min size = " + this.minSize);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean checkIfOver(final Vector3f relPos) {
|
||||||
|
return relPos.x() > this.overPositionStart.x() && relPos.y() > this.overPositionStart.y() && relPos.x() < this.overPositionStop.x() && relPos.y() < this.overPositionStop.y();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AknotManaged
|
||||||
|
@AknotAttribute
|
||||||
|
@AknotName("config")
|
||||||
|
@AknotDescription("configuration of the widget")
|
||||||
|
public Uri getPropertyConfig() {
|
||||||
|
return this.propertyConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
@AknotManaged
|
||||||
|
@AknotAttribute
|
||||||
|
@AknotName("maximum")
|
||||||
|
@AknotDescription("Maximum value of the slider")
|
||||||
|
public Float getPropertyMaximum() {
|
||||||
|
return this.propertyMaximum;
|
||||||
|
}
|
||||||
|
|
||||||
|
@AknotManaged
|
||||||
|
@AknotAttribute
|
||||||
|
@AknotName("minimum")
|
||||||
|
@AknotDescription("Minimum value of the slider")
|
||||||
|
public Float getPropertyMinimum() {
|
||||||
|
return this.propertyMinimum;
|
||||||
|
}
|
||||||
|
|
||||||
|
@AknotManaged
|
||||||
|
@AknotAttribute
|
||||||
|
@AknotName("step")
|
||||||
|
@AknotDescription("Step value of the slider")
|
||||||
|
public Float getPropertyStep() {
|
||||||
|
return this.propertyStep;
|
||||||
|
}
|
||||||
|
|
||||||
|
@AknotManaged
|
||||||
|
@AknotAttribute
|
||||||
|
@AknotName("value")
|
||||||
|
@AknotDescription("Value of the slider")
|
||||||
|
public Float getPropertyValue() {
|
||||||
|
return this.propertyValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onChangePropertyShaper() {
|
||||||
|
if (this.shape == null) {
|
||||||
|
this.shape = new GuiShape(this.propertyConfig);
|
||||||
|
} else {
|
||||||
|
this.shape.setSource(this.propertyConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDraw() {
|
||||||
|
if (this.shape != null) {
|
||||||
|
// draw background
|
||||||
|
this.shape.draw(true, 0);
|
||||||
|
// draw slider
|
||||||
|
this.shape.draw(true, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onEventInput(final EventInput event) {
|
||||||
|
final Vector3f positionAbsolute = new Vector3f(event.pos().x(), event.pos().y(), 0);
|
||||||
|
final Vector3f relPos = relativePosition(positionAbsolute);
|
||||||
|
Log.warning("Event on Input ... " + event + " relPos = " + relPos);
|
||||||
|
final boolean over = checkIfOver(relPos);
|
||||||
|
if (event.inputId() != 1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (KeyStatus.pressSingle == event.status() && over) {
|
||||||
|
keepFocus();
|
||||||
|
// get percent value
|
||||||
|
final float pourcent = (relPos.x() - this.overPositionStart.x()) / (this.overPositionStop.x() - this.overPositionStart.x());
|
||||||
|
float value = (this.propertyMaximum - this.propertyMinimum) * pourcent + this.propertyMinimum;
|
||||||
|
if (this.propertyStep != 0.0f) {
|
||||||
|
value += this.propertyStep * 0.5f;
|
||||||
|
}
|
||||||
|
setPropertyValue(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (KeyStatus.down == event.status() && over) {
|
||||||
|
keepFocus();
|
||||||
|
// get percent value
|
||||||
|
final float pourcent = (relPos.x() - this.overPositionStart.x()) / (this.overPositionStop.x() - this.overPositionStart.x());
|
||||||
|
float value = (this.propertyMaximum - this.propertyMinimum) * pourcent + this.propertyMinimum;
|
||||||
|
if (this.propertyStep != 0.0f) {
|
||||||
|
value += this.propertyStep * 0.5f;
|
||||||
|
}
|
||||||
|
setPropertyValue(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (KeyStatus.move == event.status() && over) {
|
||||||
|
keepFocus();
|
||||||
|
// get percent value
|
||||||
|
final float pourcent = (relPos.x() - this.overPositionStart.x()) / (this.overPositionStop.x() - this.overPositionStart.x());
|
||||||
|
float value = (this.propertyMaximum - this.propertyMinimum) * pourcent + this.propertyMinimum;
|
||||||
|
if (this.propertyStep != 0.0f) {
|
||||||
|
value += this.propertyStep * 0.5f;
|
||||||
|
}
|
||||||
|
setPropertyValue(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (KeyStatus.up == event.status() && over) {
|
||||||
|
keepFocus();
|
||||||
|
// get percent value
|
||||||
|
final float pourcent = (relPos.x() - this.overPositionStart.x()) / (this.overPositionStop.x() - this.overPositionStart.x());
|
||||||
|
float value = (this.propertyMaximum - this.propertyMinimum) * pourcent + this.propertyMinimum;
|
||||||
|
if (this.propertyStep != 0.0f) {
|
||||||
|
value += this.propertyStep * 0.5f;
|
||||||
|
}
|
||||||
|
setPropertyValue(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRegenerateDisplay() {
|
||||||
|
if (!needRedraw()) {
|
||||||
|
//return;
|
||||||
|
}
|
||||||
|
//Log.verbose("Regenerate Display ==> is needed: '" + this.propertyValue + "'");
|
||||||
|
this.shape.clear();
|
||||||
|
//this.gc.clear();
|
||||||
|
/*
|
||||||
|
if (this.colorIdTextFg >= 0) {
|
||||||
|
//this.text.setDefaultColorFg(this.shape.getColor(this.colorIdTextFg));
|
||||||
|
//this.text.setDefaultColorBg(this.shape.getColor(this.colorIdTextBg));
|
||||||
|
//this.text.setCursorColor(this.shape.getColor(this.colorIdCursor));
|
||||||
|
//this.text.setSelectionColor(this.shape.getColor(this.colorIdSelection));
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
final Padding padding = this.shape.getPadding();
|
||||||
|
{
|
||||||
|
// Manage external shape:
|
||||||
|
Vector3f tmpSizeShaper = this.minSize;
|
||||||
|
Vector3f delta = this.propertyGravity.gravityGenerateDelta(this.size.less(this.minSize));
|
||||||
|
if (this.propertyFill.x()) {
|
||||||
|
tmpSizeShaper = tmpSizeShaper.withX(this.size.x());
|
||||||
|
delta = delta.withX(0.0f);
|
||||||
|
}
|
||||||
|
if (this.propertyFill.y()) {
|
||||||
|
tmpSizeShaper = tmpSizeShaper.withY(this.size.y());
|
||||||
|
delta = delta.withY(0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3f tmpOriginShaper = delta;
|
||||||
|
Vector3f tmpSizeInside = tmpSizeShaper.less(padding.x(), padding.y(), padding.z());
|
||||||
|
//Vector3f tmpOriginText = this.size.less(tmpSizeText).multiply(0.5f);
|
||||||
|
Vector3f tmpOriginInside = Vector3f.ZERO;
|
||||||
|
// sometimes, the user define an height bigger than the real size needed == > in this case we need to center the text in the shaper ...
|
||||||
|
// fix all the position in the int class:
|
||||||
|
tmpSizeShaper = Vector3f.clipInt(tmpSizeShaper);
|
||||||
|
tmpOriginShaper = Vector3f.clipInt(tmpOriginShaper);
|
||||||
|
tmpSizeInside = Vector3f.clipInt(tmpSizeInside);
|
||||||
|
tmpOriginInside = Vector3f.clipInt(tmpOriginInside);
|
||||||
|
|
||||||
|
this.overPositionStart = tmpOriginShaper;
|
||||||
|
this.overPositionStop = tmpOriginShaper.add(tmpSizeShaper);
|
||||||
|
this.shape.setShape(0, tmpOriginShaper, tmpSizeShaper, tmpOriginInside, tmpSizeInside);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
// Manage cursor:
|
||||||
|
Vector3f tmpSizeShaper = this.minSize;
|
||||||
|
Vector3f delta = this.propertyGravity.gravityGenerateDelta(this.size.less(this.minSize));
|
||||||
|
if (this.propertyFill.y()) {
|
||||||
|
tmpSizeShaper = tmpSizeShaper.withY(this.size.y());
|
||||||
|
delta = delta.withY(0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3f tmpOriginShaper = delta;
|
||||||
|
Vector3f tmpSizeInside = tmpSizeShaper.less(padding.x(), padding.y(), padding.z());
|
||||||
|
//Vector3f tmpOriginText = this.size.less(tmpSizeText).multiply(0.5f);
|
||||||
|
Vector3f tmpOriginInside = Vector3f.ZERO;
|
||||||
|
|
||||||
|
final float xxx = tmpOriginShaper.x() * 2.0f;
|
||||||
|
|
||||||
|
tmpOriginShaper = tmpOriginShaper.withX(xxx * (this.propertyValue - this.propertyMinimum) / (this.propertyMaximum - this.propertyMinimum));
|
||||||
|
// sometimes, the user define an height bigger than the real size needed == > in this case we need to center the text in the shaper ...
|
||||||
|
// fix all the position in the int class:
|
||||||
|
tmpSizeShaper = Vector3f.clipInt(tmpSizeShaper);
|
||||||
|
tmpOriginShaper = Vector3f.clipInt(tmpOriginShaper);
|
||||||
|
tmpSizeInside = Vector3f.clipInt(tmpSizeInside);
|
||||||
|
tmpOriginInside = Vector3f.clipInt(tmpOriginInside);
|
||||||
|
|
||||||
|
this.overCursorPositionStart = tmpOriginShaper;
|
||||||
|
this.overCursorPositionStop = tmpOriginShaper.add(tmpSizeShaper);
|
||||||
|
this.shape.setShape(1, tmpOriginShaper, tmpSizeShaper, tmpOriginInside, tmpSizeInside);
|
||||||
|
}
|
||||||
|
//this.gc.flush();
|
||||||
|
this.shape.flush();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPropertyConfig(final Uri propertyConfig) {
|
||||||
|
if (this.propertyConfig.equals(propertyConfig)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.propertyConfig = propertyConfig;
|
||||||
|
onChangePropertyShaper();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPropertyMaximum(final Float propertyMaximum) {
|
||||||
|
if (this.propertyMaximum == propertyMaximum) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.propertyMaximum = propertyMaximum;
|
||||||
|
updateValue(this.propertyValue);
|
||||||
|
this.signalValue.emit(this.propertyValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPropertyMinimum(final Float propertyMinimum) {
|
||||||
|
if (this.propertyMinimum == propertyMinimum) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.propertyMinimum = propertyMinimum;
|
||||||
|
updateValue(this.propertyValue);
|
||||||
|
this.signalValue.emit(this.propertyValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPropertyStep(final Float propertyStep) {
|
||||||
|
if (this.propertyStep == propertyStep) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.propertyStep = propertyStep;
|
||||||
|
updateValue(this.propertyValue);
|
||||||
|
this.signalValue.emit(this.propertyValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPropertyValue(final Float propertyValue) {
|
||||||
|
if (this.propertyValue == propertyValue) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.propertyValue = propertyValue;
|
||||||
|
updateValue(this.propertyValue);
|
||||||
|
this.signalValue.emit(this.propertyValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void updateValue(float newValue) {
|
||||||
|
newValue = FMath.max(FMath.min(newValue, this.propertyMaximum), this.propertyMinimum);
|
||||||
|
if (this.propertyStep == 0.0f) {
|
||||||
|
this.propertyValue = newValue;
|
||||||
|
} else {
|
||||||
|
final float basicVal = (long) (newValue / this.propertyStep);
|
||||||
|
this.propertyValue = basicVal * this.propertyStep;
|
||||||
|
}
|
||||||
|
markToRedraw();
|
||||||
|
}
|
||||||
|
}
|
@ -95,7 +95,6 @@ public class Tick extends Widget {
|
|||||||
markToRedraw();
|
markToRedraw();
|
||||||
// can not support multiple click...
|
// can not support multiple click...
|
||||||
setMouseLimit(1);
|
setMouseLimit(1);
|
||||||
this.shape = new GuiShape(this.propertyConfig);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -21,6 +21,7 @@ public class WidgetXmlFactory implements InterfaceFactoryAccess {
|
|||||||
listWidgetAvaillable.put("PopUp", PopUp.class);
|
listWidgetAvaillable.put("PopUp", PopUp.class);
|
||||||
listWidgetAvaillable.put("FileChooser", FileChooser.class);
|
listWidgetAvaillable.put("FileChooser", FileChooser.class);
|
||||||
listWidgetAvaillable.put("Spin", Spin.class);
|
listWidgetAvaillable.put("Spin", Spin.class);
|
||||||
|
listWidgetAvaillable.put("Slider", Slider.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package test.atriasoft.ewol;
|
package test.atriasoft.ewol;
|
||||||
|
|
||||||
import io.scenarium.logger.LogLevel;
|
import org.atriasoft.reggol.LogLevel;
|
||||||
import io.scenarium.logger.Logger;
|
import org.atriasoft.reggol.Logger;
|
||||||
|
|
||||||
public class Log {
|
public class Log {
|
||||||
private static final String LIB_NAME = "etk-test";
|
private static final String LIB_NAME = "etk-test";
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package test.atriasoft.ewol;
|
package test.atriasoft.ewol;
|
||||||
|
|
||||||
import io.scenarium.logger.LogLevel;
|
import org.atriasoft.reggol.LogLevel;
|
||||||
import io.scenarium.logger.Logger;
|
import org.atriasoft.reggol.Logger;
|
||||||
|
|
||||||
public class Log2 {
|
public class Log2 {
|
||||||
private static final String LIB_NAME = "etk-test-2";
|
private static final String LIB_NAME = "etk-test-2";
|
||||||
|
@ -11,7 +11,7 @@ package test.atriasoft.ewol;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import io.scenarium.logger.Logger;
|
import org.atriasoft.reggol.Logger;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
|
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user