diff --git a/resources/resources/ewol/theme/shape/CheckBox.json b/resources/resources/ewol/theme/shape/CheckBox.json index 64cabc0..b1f0257 100644 --- a/resources/resources/ewol/theme/shape/CheckBox.json +++ b/resources/resources/ewol/theme/shape/CheckBox.json @@ -12,7 +12,7 @@ "padding-in-buttom":0, # render program: - "program-vert":"THEME:shape/aaRenderShape.vert?lib=ewol", + "program-vert":"THEME:shape/aaRenderShapeScale.vert?lib=ewol", "program-frag":"THEME:shape/aaRenderShape.frag?lib=ewol", # Object to render (with modification) diff --git a/resources/resources/ewol/theme/shape/Entry.blend1 b/resources/resources/ewol/theme/shape/Entry.blend1 deleted file mode 100644 index 0c39e1a..0000000 Binary files a/resources/resources/ewol/theme/shape/Entry.blend1 and /dev/null differ diff --git a/resources/resources/ewol/theme/shape/aaRenderShape.vert b/resources/resources/ewol/theme/shape/aaRenderShape.vert index 1bd3356..88079dd 100644 --- a/resources/resources/ewol/theme/shape/aaRenderShape.vert +++ b/resources/resources/ewol/theme/shape/aaRenderShape.vert @@ -9,7 +9,6 @@ precision mediump int; layout (location = 0) in vec3 in_position; layout (location = 1) in vec2 in_textureCoords; -uniform vec3 in_offsetScaleInside; uniform vec3 in_offsetScaleOutside; uniform mat4 in_matrixTransformation; @@ -20,31 +19,9 @@ uniform mat4 in_matrixView; out vec2 io_textureCoords; void main(void) { - float xxx = in_position.x; - if (abs(xxx) < 10.0) { - xxx = xxx * in_offsetScaleInside.x * 0.1; - } else { - xxx = xxx + sign(xxx)*in_offsetScaleOutside.x; - } - float yyy = in_position.y; - if (abs(yyy) < 10.0) { - yyy = yyy * in_offsetScaleInside.y * 0.1; - } else { - yyy = yyy + sign(yyy)*in_offsetScaleOutside.y; - } - float zzz = in_position.z; - if (abs(zzz) < 10.0) { - zzz = zzz * in_offsetScaleInside.z * 0.1; - } else { - zzz = zzz + sign(zzz)*in_offsetScaleOutside.z; - } - vec4 position = vec4(xxx, yyy, zzz, 1.0); - /* - // this is the old mode before checkbox : ==> maybe create 2 shader???? vec4 position = vec4(in_position.x + sign(in_position.x)*in_offsetScaleOutside.x, in_position.y + sign(in_position.y)*in_offsetScaleOutside.y, in_position.z + sign(in_position.z)*in_offsetScaleOutside.z, 1.0); - */ gl_Position = in_matrixProjection * in_matrixView * in_matrixTransformation * position; io_textureCoords = in_textureCoords; } diff --git a/resources/resources/ewol/theme/shape/aaRenderShapeScale.vert b/resources/resources/ewol/theme/shape/aaRenderShapeScale.vert new file mode 100644 index 0000000..71d9826 --- /dev/null +++ b/resources/resources/ewol/theme/shape/aaRenderShapeScale.vert @@ -0,0 +1,44 @@ +#version 400 core + +#ifdef GL_ES +precision mediump float; +precision mediump int; +#endif + +// Input: +layout (location = 0) in vec3 in_position; +layout (location = 1) in vec2 in_textureCoords; + +uniform vec3 in_offsetScaleInside; +uniform vec3 in_offsetScaleOutside; + +uniform mat4 in_matrixTransformation; +uniform mat4 in_matrixProjection; +uniform mat4 in_matrixView; + +// output: +out vec2 io_textureCoords; + +void main(void) { + float xxx = in_position.x; + if (abs(xxx) < 10.0) { + xxx = xxx * in_offsetScaleInside.x * 0.1; + } else { + xxx = xxx + sign(xxx)*in_offsetScaleOutside.x; + } + float yyy = in_position.y; + if (abs(yyy) < 10.0) { + yyy = yyy * in_offsetScaleInside.y * 0.1; + } else { + yyy = yyy + sign(yyy)*in_offsetScaleOutside.y; + } + float zzz = in_position.z; + if (abs(zzz) < 10.0) { + zzz = zzz * in_offsetScaleInside.z * 0.1; + } else { + zzz = zzz + sign(zzz)*in_offsetScaleOutside.z; + } + vec4 position = vec4(xxx, yyy, zzz, 1.0); + gl_Position = in_matrixProjection * in_matrixView * in_matrixTransformation * position; + io_textureCoords = in_textureCoords; +} diff --git a/samples/src/sample/atriasoft/ewol/BasicWindows.java b/samples/src/sample/atriasoft/ewol/BasicWindows.java new file mode 100644 index 0000000..18eebcb --- /dev/null +++ b/samples/src/sample/atriasoft/ewol/BasicWindows.java @@ -0,0 +1,192 @@ +package sample.atriasoft.ewol; + +import org.atriasoft.etk.Color; +import org.atriasoft.etk.Dimension; +import org.atriasoft.etk.Distance; +import org.atriasoft.etk.math.Vector2b; +import org.atriasoft.etk.math.Vector2f; +import org.atriasoft.ewol.Gravity; +import org.atriasoft.ewol.widget.Button; +import org.atriasoft.ewol.widget.Sizer; +import org.atriasoft.ewol.widget.Sizer.DisplayMode; +import org.atriasoft.ewol.widget.Spacer; +import org.atriasoft.ewol.widget.Widget; +import org.atriasoft.ewol.widget.Windows; + +public class BasicWindows extends Windows { + public static void eventButtonChangeGravity(final BasicWindows self) { + Gravity state = self.testWidget.getPropertyGravity(); + state = switch (state) { + case BUTTOM -> Gravity.BUTTOM_LEFT; + case BUTTOM_LEFT -> Gravity.BUTTOM_RIGHT; + case BUTTOM_RIGHT -> Gravity.CENTER; + case CENTER -> Gravity.LEFT; + case LEFT -> Gravity.RIGHT; + case RIGHT -> Gravity.TOP; + case TOP -> Gravity.TOP_LEFT; + case TOP_LEFT -> Gravity.TOP_RIGHT; + case TOP_RIGHT -> Gravity.BUTTOM; + }; + self.testWidget.setPropertyGravity(state); + self.buttonGravity.setPropertyValue("gravity: " + state); + } + + public static void eventButtonExpandX(final BasicWindows self) { + Vector2b state = self.testWidget.getPropertyExpand(); + self.testWidget.setPropertyExpand(state.withX(!state.x())); + self.buttonExpandX.setPropertyValue(state.x() ? "expand X" : "un-expand X"); + } + + public static void eventButtonExpandY(final BasicWindows self) { + Vector2b state = self.testWidget.getPropertyExpand(); + self.testWidget.setPropertyExpand(state.withY(!state.y())); + self.buttonExpandY.setPropertyValue(state.y() ? "expand Y" : "un-expand Y"); + } + + public static void eventButtonFillX(final BasicWindows self) { + Vector2b state = self.testWidget.getPropertyFill(); + self.testWidget.setPropertyFill(state.withX(!state.x())); + self.buttonFillX.setPropertyValue(state.x() ? "fill X" : "un-fill X"); + } + + public static void eventButtonFillY(final BasicWindows self) { + Vector2b state = self.testWidget.getPropertyFill(); + self.testWidget.setPropertyFill(state.withY(!state.y())); + self.buttonFillY.setPropertyValue(state.y() ? "fill Y" : "un-fill Y"); + } + + Widget testWidget; + Button buttonExpandX; + Button buttonExpandY; + Button buttonFillX; + Button buttonFillY; + Button buttonGravity; + Sizer sizerTestAreaHori; + Sizer sizerMenuHori; + + public BasicWindows() { + //! [ewol_sample_HW_windows_title] + setPropertyTitle("No title set !!! for this test"); + + Sizer sizerVertMain = new Sizer(DisplayMode.modeVert); + sizerVertMain.setPropertyExpand(Vector2b.TRUE_TRUE); + sizerVertMain.setPropertyFill(Vector2b.TRUE_TRUE); + setSubWidget(sizerVertMain); + + this.sizerMenuHori = new Sizer(DisplayMode.modeHori); + this.sizerMenuHori.setPropertyExpand(Vector2b.TRUE_FALSE); + this.sizerMenuHori.setPropertyLockExpand(Vector2b.TRUE_TRUE); + this.sizerMenuHori.setPropertyFill(Vector2b.TRUE_TRUE); + sizerVertMain.subWidgetAdd(this.sizerMenuHori); + + { + Spacer simpleSpacer = new Spacer(); + simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(100, 100), Distance.PIXEL)); + simpleSpacer.setPropertyColor(Color.ALICE_BLUE); + simpleSpacer.setPropertyExpand(Vector2b.TRUE_FALSE); + simpleSpacer.setPropertyExpandIfFree(Vector2b.TRUE_TRUE); + simpleSpacer.setPropertyFill(Vector2b.TRUE_TRUE); + simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); + sizerVertMain.subWidgetAdd(simpleSpacer); + } + + this.sizerTestAreaHori = new Sizer(DisplayMode.modeHori); + this.sizerTestAreaHori.setPropertyExpand(Vector2b.TRUE_FALSE); + this.sizerTestAreaHori.setPropertyExpandIfFree(Vector2b.TRUE_TRUE); + this.sizerTestAreaHori.setPropertyFill(Vector2b.TRUE_FALSE); + sizerVertMain.subWidgetAdd(this.sizerTestAreaHori); + + { + Spacer simpleSpacer = new Spacer(); + simpleSpacer.setPropertyColor(Color.DARK_GREEN); + simpleSpacer.setPropertyExpand(Vector2b.TRUE_FALSE); + simpleSpacer.setPropertyExpandIfFree(Vector2b.TRUE_TRUE); + simpleSpacer.setPropertyFill(Vector2b.TRUE_TRUE); + simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); + sizerVertMain.subWidgetAdd(simpleSpacer); + } + + { + Spacer simpleSpacer = new Spacer(); + simpleSpacer.setPropertyColor(Color.PINK); + simpleSpacer.setPropertyExpand(Vector2b.TRUE_TRUE); + simpleSpacer.setPropertyFill(Vector2b.TRUE_TRUE); + simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(30, 30), Distance.PIXEL)); + this.sizerMenuHori.subWidgetAdd(simpleSpacer); + } + { + this.buttonExpandX = new Button(); + this.buttonExpandX.setPropertyValue("un-expand X"); + this.buttonExpandX.setPropertyExpand(Vector2b.FALSE_FALSE); + this.buttonExpandX.setPropertyFill(Vector2b.FALSE_FALSE); + this.buttonExpandX.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); + this.sizerMenuHori.subWidgetAdd(this.buttonExpandX); + this.buttonExpandX.signalClick.connectAuto(this, BasicWindows::eventButtonExpandX); + } + { + this.buttonExpandY = new Button(); + this.buttonExpandY.setPropertyValue("un-expand Y"); + this.buttonExpandY.setPropertyExpand(Vector2b.FALSE_FALSE); + this.buttonExpandY.setPropertyFill(Vector2b.FALSE_FALSE); + this.buttonExpandY.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); + this.sizerMenuHori.subWidgetAdd(this.buttonExpandY); + this.buttonExpandY.signalClick.connectAuto(this, BasicWindows::eventButtonExpandY); + } + { + this.buttonFillX = new Button(); + this.buttonFillX.setPropertyValue("un-fill X"); + this.buttonFillX.setPropertyExpand(Vector2b.FALSE_FALSE); + this.buttonFillX.setPropertyFill(Vector2b.FALSE_FALSE); + this.buttonFillX.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); + this.sizerMenuHori.subWidgetAdd(this.buttonFillX); + this.buttonFillX.signalClick.connectAuto(this, BasicWindows::eventButtonFillX); + } + { + this.buttonFillY = new Button(); + this.buttonFillY.setPropertyValue("un-fill Y"); + this.buttonFillY.setPropertyExpand(Vector2b.FALSE_FALSE); + this.buttonFillY.setPropertyFill(Vector2b.FALSE_FALSE); + this.buttonFillY.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); + this.sizerMenuHori.subWidgetAdd(this.buttonFillY); + this.buttonFillY.signalClick.connectAuto(this, BasicWindows::eventButtonFillY); + } + { + this.buttonGravity = new Button(); + this.buttonGravity.setPropertyValue("gravity"); + this.buttonGravity.setPropertyExpand(Vector2b.FALSE_FALSE); + this.buttonGravity.setPropertyFill(Vector2b.FALSE_FALSE); + this.buttonGravity.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); + this.sizerMenuHori.subWidgetAdd(this.buttonGravity); + this.buttonGravity.signalClick.connectAuto(this, BasicWindows::eventButtonChangeGravity); + } + + } + + public void addButton(Widget widget) { + this.sizerMenuHori.subWidgetAdd(widget); + } + + public void setTestWidget(Widget widget) { + this.sizerTestAreaHori.subWidgetRemoveAll(); + { + Spacer simpleSpacer = new Spacer(); + simpleSpacer.setPropertyColor(Color.CHOCOLATE); + simpleSpacer.setPropertyExpand(Vector2b.FALSE_FALSE); + simpleSpacer.setPropertyExpandIfFree(Vector2b.TRUE_TRUE); + simpleSpacer.setPropertyFill(Vector2b.TRUE_TRUE); + simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); + this.sizerTestAreaHori.subWidgetAdd(simpleSpacer); + } + this.testWidget = widget; + this.sizerTestAreaHori.subWidgetAdd(this.testWidget); + { + Spacer simpleSpacer = new Spacer(); + simpleSpacer.setPropertyColor(Color.GREEN_YELLOW); + simpleSpacer.setPropertyExpand(Vector2b.FALSE_FALSE); + simpleSpacer.setPropertyExpandIfFree(Vector2b.TRUE_TRUE); + simpleSpacer.setPropertyFill(Vector2b.TRUE_TRUE); + simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); + this.sizerTestAreaHori.subWidgetAdd(simpleSpacer); + } + } +} \ No newline at end of file diff --git a/samples/src/sample/atriasoft/ewol/sampleButton/MainWindows.java b/samples/src/sample/atriasoft/ewol/sampleButton/MainWindows.java index c306425..0954678 100644 --- a/samples/src/sample/atriasoft/ewol/sampleButton/MainWindows.java +++ b/samples/src/sample/atriasoft/ewol/sampleButton/MainWindows.java @@ -2,31 +2,18 @@ package sample.atriasoft.ewol.sampleButton; import org.atriasoft.etk.math.Vector2b; import org.atriasoft.ewol.widget.Button; -import org.atriasoft.ewol.widget.Sizer; -import org.atriasoft.ewol.widget.Sizer.DisplayMode; -import org.atriasoft.ewol.widget.Windows; -public class MainWindows extends Windows { +import sample.atriasoft.ewol.BasicWindows; + +public class MainWindows extends BasicWindows { public MainWindows() { setPropertyTitle("Simple Button test"); - //EwolObject.getContext().getFontDefault().setName("FreeSans"); - - Sizer sizerMain = new Sizer(DisplayMode.modeVert); - sizerMain.setPropertyExpand(new Vector2b(true, true)); - sizerMain.setPropertyFill(new Vector2b(true, true)); - setSubWidget(sizerMain); - + Button simpleButton = new Button(); simpleButton.setPropertyValue("Top Button"); simpleButton.setPropertyExpand(new Vector2b(true, true)); simpleButton.setPropertyFill(new Vector2b(true, false)); - sizerMain.subWidgetAdd(simpleButton); - - Button simpleButton2 = new Button(); - simpleButton2.setPropertyValue("Botom Button"); - simpleButton2.setPropertyExpand(new Vector2b(true, true)); - simpleButton2.setPropertyFill(new Vector2b(false, true)); - sizerMain.subWidgetAdd(simpleButton2); + this.setTestWidget(simpleButton); } } diff --git a/samples/src/sample/atriasoft/ewol/sampleEntry/MainWindows.java b/samples/src/sample/atriasoft/ewol/sampleEntry/MainWindows.java index 29a713d..1075e61 100644 --- a/samples/src/sample/atriasoft/ewol/sampleEntry/MainWindows.java +++ b/samples/src/sample/atriasoft/ewol/sampleEntry/MainWindows.java @@ -2,29 +2,18 @@ package sample.atriasoft.ewol.sampleEntry; import org.atriasoft.etk.math.Vector2b; import org.atriasoft.ewol.widget.Entry; -import org.atriasoft.ewol.widget.Sizer; -import org.atriasoft.ewol.widget.Sizer.DisplayMode; -import org.atriasoft.ewol.widget.Windows; -public class MainWindows extends Windows { +import sample.atriasoft.ewol.BasicWindows; + +public class MainWindows extends BasicWindows { public MainWindows() { setPropertyTitle("Simple Entry test"); - //EwolObject.getContext().getFontDefault().setName("FreeSans"); - - Sizer sizerMain = new Sizer(DisplayMode.modeVert); - sizerMain.setPropertyExpand(new Vector2b(true, true)); - sizerMain.setPropertyFill(new Vector2b(true, true)); - setSubWidget(sizerMain); - + Entry simpleEntry = new Entry(); simpleEntry.setPropertyExpand(new Vector2b(true, true)); simpleEntry.setPropertyFill(new Vector2b(true, false)); - sizerMain.subWidgetAdd(simpleEntry); + this.setTestWidget(simpleEntry); - Entry simpleEntry2 = new Entry(); - simpleEntry2.setPropertyExpand(new Vector2b(true, true)); - simpleEntry2.setPropertyFill(new Vector2b(true, false)); - sizerMain.subWidgetAdd(simpleEntry2); } } diff --git a/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/MainWindows.java b/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/MainWindows.java index d0c5246..dcb1cd3 100644 --- a/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/MainWindows.java +++ b/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/MainWindows.java @@ -3,9 +3,10 @@ package sample.atriasoft.ewol.simpleWindowsLabel; import org.atriasoft.etk.math.Vector2b; import org.atriasoft.ewol.widget.Label; import org.atriasoft.ewol.widget.Spacer; -import org.atriasoft.ewol.widget.Windows; -public class MainWindows extends Windows { +import sample.atriasoft.ewol.BasicWindows; + +public class MainWindows extends BasicWindows { public MainWindows() { //! [ewol_sample_HW_windows_title] @@ -19,13 +20,13 @@ public class MainWindows extends Windows { "Hello. World

- Coucou comment ca vas ???
- Pas trop bien, je me suis cassé la jambe.

The end
"); simpleLabel.setPropertyExpand(new Vector2b(true, true)); simpleLabel.setPropertyFill(new Vector2b(true, true)); - setSubWidget(simpleLabel); + this.setTestWidget(simpleLabel); //! [ewol_sample_HW_windows_label] } else { Spacer simpleSpacer = new Spacer(); simpleSpacer.setPropertyExpand(new Vector2b(true, true)); simpleSpacer.setPropertyFill(new Vector2b(true, true)); - setSubWidget(simpleSpacer); + this.setTestWidget(simpleSpacer); } } } diff --git a/samples/src/sample/atriasoft/ewol/simpleWindowsWithCheckBox/MainWindows.java b/samples/src/sample/atriasoft/ewol/simpleWindowsWithCheckBox/MainWindows.java index 44739ac..53a4d2b 100644 --- a/samples/src/sample/atriasoft/ewol/simpleWindowsWithCheckBox/MainWindows.java +++ b/samples/src/sample/atriasoft/ewol/simpleWindowsWithCheckBox/MainWindows.java @@ -1,220 +1,22 @@ package sample.atriasoft.ewol.simpleWindowsWithCheckBox; -import org.atriasoft.etk.Color; -import org.atriasoft.etk.Dimension; -import org.atriasoft.etk.Distance; import org.atriasoft.etk.math.Vector2b; -import org.atriasoft.etk.math.Vector2f; -import org.atriasoft.ewol.Gravity; -import org.atriasoft.ewol.widget.Button; import org.atriasoft.ewol.widget.CheckBox; -import org.atriasoft.ewol.widget.Sizer; -import org.atriasoft.ewol.widget.Sizer.DisplayMode; -import org.atriasoft.ewol.widget.Spacer; -import org.atriasoft.ewol.widget.Windows; -public class MainWindows extends Windows { +import sample.atriasoft.ewol.BasicWindows; + +public class MainWindows extends BasicWindows { + CheckBox testWidget; - Button buttonExpandX; - Button buttonExpandY; - Button buttonFillX; - Button buttonFillY; - Button buttonGravity; - Button buttonAspectRatio; + public MainWindows() { //! [ewol_sample_HW_windows_title] setPropertyTitle("Simple CheckBox"); - - Sizer sizerMain = new Sizer(DisplayMode.modeVert); - sizerMain.setPropertyExpand(new Vector2b(true, true)); - sizerMain.setPropertyFill(new Vector2b(true, true)); - setSubWidget(sizerMain); - Sizer sizerHori1 = new Sizer(DisplayMode.modeHori); - sizerHori1.setPropertyExpand(new Vector2b(true, false)); - sizerHori1.setPropertyLockExpand(new Vector2b(true, true)); - sizerHori1.setPropertyFill(new Vector2b(true, true)); - sizerMain.subWidgetAdd(sizerHori1); - - { - Spacer simpleSpacer = new Spacer(); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(100, 100), Distance.PIXEL)); - simpleSpacer.setPropertyColor(Color.ALICE_BLUE); - simpleSpacer.setPropertyExpand(new Vector2b(true, false)); - simpleSpacer.setPropertyFill(new Vector2b(true, true)); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerMain.subWidgetAdd(simpleSpacer); - } - - Sizer sizerHori2 = new Sizer(DisplayMode.modeHori); - sizerHori2.setPropertyExpand(new Vector2b(true, true)); - sizerHori2.setPropertyFill(new Vector2b(true, true)); - sizerMain.subWidgetAdd(sizerHori2); - - { - Spacer simpleSpacer = new Spacer(); - simpleSpacer.setPropertyColor(Color.DARK_GREEN); - simpleSpacer.setPropertyExpand(new Vector2b(true, false)); - simpleSpacer.setPropertyFill(new Vector2b(true, true)); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerMain.subWidgetAdd(simpleSpacer); - } - { - Spacer simpleSpacer = new Spacer(); - simpleSpacer.setPropertyColor(Color.CHOCOLATE); - simpleSpacer.setPropertyExpand(new Vector2b(false, true)); - simpleSpacer.setPropertyFill(new Vector2b(true, true)); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori2.subWidgetAdd(simpleSpacer); - } this.testWidget = new CheckBox(); //this.testWidget.setPropertySource(new Uri("DATA", "mireA.png")); - this.testWidget.setPropertyExpand(new Vector2b(true, true)); - this.testWidget.setPropertyFill(new Vector2b(true, true)); - sizerHori2.subWidgetAdd(this.testWidget); - { - Spacer simpleSpacer = new Spacer(); - simpleSpacer.setPropertyColor(Color.GREEN_YELLOW); - simpleSpacer.setPropertyExpand(new Vector2b(false, true)); - simpleSpacer.setPropertyFill(new Vector2b(true, true)); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori2.subWidgetAdd(simpleSpacer); - } - - { - Spacer simpleSpacer = new Spacer(); - simpleSpacer.setPropertyColor(Color.PINK); - simpleSpacer.setPropertyExpand(new Vector2b(true, true)); - simpleSpacer.setPropertyFill(new Vector2b(true, true)); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(30, 30), Distance.PIXEL)); - sizerHori1.subWidgetAdd(simpleSpacer); - } - { - this.buttonExpandX = new Button(); - this.buttonExpandX.setPropertyValue("un-expand X"); - this.buttonExpandX.setPropertyExpand(new Vector2b(false, false)); - this.buttonExpandX.setPropertyFill(new Vector2b(false, false)); - this.buttonExpandX.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonExpandX); - this.buttonExpandX.signalClick.connectAuto(this, MainWindows::eventButtonExpandX); - } - { - this.buttonExpandY = new Button(); - this.buttonExpandY.setPropertyValue("un-expand Y"); - this.buttonExpandY.setPropertyExpand(new Vector2b(false, false)); - this.buttonExpandY.setPropertyFill(new Vector2b(false, false)); - this.buttonExpandY.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonExpandY); - this.buttonExpandY.signalClick.connectAuto(this, MainWindows::eventButtonExpandY); - } - { - this.buttonFillX = new Button(); - this.buttonFillX.setPropertyValue("un-fill X"); - this.buttonFillX.setPropertyExpand(new Vector2b(false, false)); - this.buttonFillX.setPropertyFill(new Vector2b(false, false)); - this.buttonFillX.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonFillX); - this.buttonFillX.signalClick.connectAuto(this, MainWindows::eventButtonFillX); - } - { - this.buttonFillY = new Button(); - this.buttonFillY.setPropertyValue("un-fill Y"); - this.buttonFillY.setPropertyExpand(new Vector2b(false, false)); - this.buttonFillY.setPropertyFill(new Vector2b(false, false)); - this.buttonFillY.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonFillY); - this.buttonFillY.signalClick.connectAuto(this, MainWindows::eventButtonFillY); - } - { - Button button = new Button(); - button.setPropertyValue("Change image"); - button.setPropertyExpand(new Vector2b(false, false)); - button.setPropertyFill(new Vector2b(false, false)); - button.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(button); - button.signalClick.connectAuto(this, MainWindows::eventButtonChangeImage); - } - { - this.buttonGravity = new Button(); - this.buttonGravity.setPropertyValue("gravity"); - this.buttonGravity.setPropertyExpand(new Vector2b(false, false)); - this.buttonGravity.setPropertyFill(new Vector2b(false, false)); - this.buttonGravity.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonGravity); - this.buttonGravity.signalClick.connectAuto(this, MainWindows::eventButtonChangeGravity); - } - { - this.buttonAspectRatio = new Button(); - this.buttonAspectRatio.setPropertyValue("keep aspect ratio"); - this.buttonAspectRatio.setPropertyExpand(new Vector2b(false, false)); - this.buttonAspectRatio.setPropertyFill(new Vector2b(false, false)); - this.buttonAspectRatio.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonAspectRatio); - this.buttonAspectRatio.signalClick.connectAuto(this, MainWindows::eventButtonChangeKeepRatio); - } - - - } - public static void eventButtonExpandX(final MainWindows self) { - Vector2b state = self.testWidget.getPropertyExpand(); - self.testWidget.setPropertyExpand(state.withX(!state.x())); - self.buttonExpandX.setPropertyValue(state.x()?"expand X":"un-expand X"); - } - public static void eventButtonExpandY(final MainWindows self) { - Vector2b state = self.testWidget.getPropertyExpand(); - self.testWidget.setPropertyExpand(state.withY(!state.y())); - self.buttonExpandY.setPropertyValue(state.y()?"expand Y":"un-expand Y"); - } - public static void eventButtonFillX(final MainWindows self) { - Vector2b state = self.testWidget.getPropertyFill(); - self.testWidget.setPropertyFill(state.withX(!state.x())); - self.buttonFillX.setPropertyValue(state.x()?"fill X":"un-fill X"); - } - public static void eventButtonFillY(final MainWindows self) { - Vector2b state = self.testWidget.getPropertyFill(); - self.testWidget.setPropertyFill(state.withY(!state.y())); - self.buttonFillY.setPropertyValue(state.y()?"fill Y":"un-fill Y"); - } - public static void eventButtonChangeKeepRatio(final MainWindows self) { - //boolean state = self.testWidget.isPropertyKeepRatio(); - //self.testWidget.setPropertyKeepRatio(!state); - //self.buttonAspectRatio.setPropertyValue(state?"fkeep aspect ratio":"un-keep aspect ratio"); - } - public static void eventButtonChangeGravity(final MainWindows self) { - Gravity state = self.testWidget.getPropertyGravity(); - switch(state) { - case BUTTOM: - state = Gravity.BUTTOM_LEFT; - break; - case BUTTOM_LEFT: - state = Gravity.BUTTOM_RIGHT; - break; - case BUTTOM_RIGHT: - state = Gravity.CENTER; - break; - case CENTER: - state = Gravity.LEFT; - break; - case LEFT: - state = Gravity.RIGHT; - break; - case RIGHT: - state = Gravity.TOP; - break; - case TOP: - state = Gravity.TOP_LEFT; - break; - case TOP_LEFT: - state = Gravity.TOP_RIGHT; - break; - case TOP_RIGHT: - state = Gravity.BUTTOM; - break; - } - self.testWidget.setPropertyGravity(state); - self.buttonGravity.setPropertyValue("gravity: " + state); - } - public static void eventButtonChangeImage(final MainWindows self) { - self.testWidget.setPropertyValue(!self.testWidget.getPropertyValue()); + this.testWidget.setPropertyExpand(Vector2b.TRUE_TRUE); + this.testWidget.setPropertyFill(Vector2b.TRUE_TRUE); + this.setTestWidget(this.testWidget); } } diff --git a/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/MainWindows.java b/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/MainWindows.java index 59a0eda..7a966af 100644 --- a/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/MainWindows.java +++ b/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/MainWindows.java @@ -1,221 +1,55 @@ package sample.atriasoft.ewol.simpleWindowsWithImage; -import org.atriasoft.etk.Color; import org.atriasoft.etk.Dimension; import org.atriasoft.etk.Distance; import org.atriasoft.etk.Uri; import org.atriasoft.etk.math.Vector2b; import org.atriasoft.etk.math.Vector2f; -import org.atriasoft.ewol.Gravity; import org.atriasoft.ewol.widget.Button; import org.atriasoft.ewol.widget.ImageDisplay; -import org.atriasoft.ewol.widget.Sizer; -import org.atriasoft.ewol.widget.Sizer.DisplayMode; -import org.atriasoft.ewol.widget.Spacer; -import org.atriasoft.ewol.widget.Windows; -public class MainWindows extends Windows { +import sample.atriasoft.ewol.BasicWindows; + +public class MainWindows extends BasicWindows { + + public static void eventButtonChangeImage(final MainWindows self) { + self.testWidget.setPropertySource(new Uri("DATA", "mireC.png")); + } + + public static void eventButtonChangeKeepRatio(final MainWindows self) { + boolean state = self.testWidget.isPropertyKeepRatio(); + self.testWidget.setPropertyKeepRatio(!state); + self.buttonAspectRatio.setPropertyValue(state ? "fkeep aspect ratio" : "un-keep aspect ratio"); + } + ImageDisplay testWidget; - Button buttonExpandX; - Button buttonExpandY; - Button buttonFillX; - Button buttonFillY; - Button buttonGravity; Button buttonAspectRatio; + public MainWindows() { //! [ewol_sample_HW_windows_title] setPropertyTitle("Simple Image"); - - Sizer sizerMain = new Sizer(DisplayMode.modeVert); - sizerMain.setPropertyExpand(new Vector2b(true, true)); - sizerMain.setPropertyFill(new Vector2b(true, true)); - setSubWidget(sizerMain); - Sizer sizerHori1 = new Sizer(DisplayMode.modeHori); - sizerHori1.setPropertyExpand(new Vector2b(true, false)); - sizerHori1.setPropertyLockExpand(new Vector2b(true, true)); - sizerHori1.setPropertyFill(new Vector2b(true, true)); - sizerMain.subWidgetAdd(sizerHori1); - - { - Spacer simpleSpacer = new Spacer(); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(100, 100), Distance.PIXEL)); - simpleSpacer.setPropertyColor(Color.ALICE_BLUE); - simpleSpacer.setPropertyExpand(new Vector2b(true, false)); - simpleSpacer.setPropertyFill(new Vector2b(true, true)); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerMain.subWidgetAdd(simpleSpacer); - } - - Sizer sizerHori2 = new Sizer(DisplayMode.modeHori); - sizerHori2.setPropertyExpand(new Vector2b(true, true)); - sizerHori2.setPropertyFill(new Vector2b(true, true)); - sizerMain.subWidgetAdd(sizerHori2); - - { - Spacer simpleSpacer = new Spacer(); - simpleSpacer.setPropertyColor(Color.DARK_GREEN); - simpleSpacer.setPropertyExpand(new Vector2b(true, false)); - simpleSpacer.setPropertyFill(new Vector2b(true, true)); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerMain.subWidgetAdd(simpleSpacer); - } - { - Spacer simpleSpacer = new Spacer(); - simpleSpacer.setPropertyColor(Color.CHOCOLATE); - simpleSpacer.setPropertyExpand(new Vector2b(false, true)); - simpleSpacer.setPropertyFill(new Vector2b(true, true)); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori2.subWidgetAdd(simpleSpacer); - } this.testWidget = new ImageDisplay(); this.testWidget.setPropertySource(new Uri("DATA", "mireA.png")); this.testWidget.setPropertyExpand(new Vector2b(true, true)); this.testWidget.setPropertyFill(new Vector2b(true, true)); - sizerHori2.subWidgetAdd(this.testWidget); - { - Spacer simpleSpacer = new Spacer(); - simpleSpacer.setPropertyColor(Color.GREEN_YELLOW); - simpleSpacer.setPropertyExpand(new Vector2b(false, true)); - simpleSpacer.setPropertyFill(new Vector2b(true, true)); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori2.subWidgetAdd(simpleSpacer); - } - - { - Spacer simpleSpacer = new Spacer(); - simpleSpacer.setPropertyColor(Color.PINK); - simpleSpacer.setPropertyExpand(new Vector2b(true, true)); - simpleSpacer.setPropertyFill(new Vector2b(true, true)); - simpleSpacer.setPropertyMinSize(new Dimension(new Vector2f(30, 30), Distance.PIXEL)); - sizerHori1.subWidgetAdd(simpleSpacer); - } - { - this.buttonExpandX = new Button(); - this.buttonExpandX.setPropertyValue("un-expand X"); - this.buttonExpandX.setPropertyExpand(new Vector2b(false, false)); - this.buttonExpandX.setPropertyFill(new Vector2b(false, false)); - this.buttonExpandX.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonExpandX); - this.buttonExpandX.signalClick.connectAuto(this, MainWindows::eventButtonExpandX); - } - { - this.buttonExpandY = new Button(); - this.buttonExpandY.setPropertyValue("un-expand Y"); - this.buttonExpandY.setPropertyExpand(new Vector2b(false, false)); - this.buttonExpandY.setPropertyFill(new Vector2b(false, false)); - this.buttonExpandY.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonExpandY); - this.buttonExpandY.signalClick.connectAuto(this, MainWindows::eventButtonExpandY); - } - { - this.buttonFillX = new Button(); - this.buttonFillX.setPropertyValue("un-fill X"); - this.buttonFillX.setPropertyExpand(new Vector2b(false, false)); - this.buttonFillX.setPropertyFill(new Vector2b(false, false)); - this.buttonFillX.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonFillX); - this.buttonFillX.signalClick.connectAuto(this, MainWindows::eventButtonFillX); - } - { - this.buttonFillY = new Button(); - this.buttonFillY.setPropertyValue("un-fill Y"); - this.buttonFillY.setPropertyExpand(new Vector2b(false, false)); - this.buttonFillY.setPropertyFill(new Vector2b(false, false)); - this.buttonFillY.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonFillY); - this.buttonFillY.signalClick.connectAuto(this, MainWindows::eventButtonFillY); - } + this.testWidget.setPropertyMinSize(new Dimension(Vector2f.VALUE_16, Distance.PIXEL)); + this.setTestWidget(this.testWidget); { Button button = new Button(); button.setPropertyValue("Change image"); button.setPropertyExpand(new Vector2b(false, false)); button.setPropertyFill(new Vector2b(false, false)); button.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(button); + this.addButton(button); button.signalClick.connectAuto(this, MainWindows::eventButtonChangeImage); } - { - this.buttonGravity = new Button(); - this.buttonGravity.setPropertyValue("gravity"); - this.buttonGravity.setPropertyExpand(new Vector2b(false, false)); - this.buttonGravity.setPropertyFill(new Vector2b(false, false)); - this.buttonGravity.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonGravity); - this.buttonGravity.signalClick.connectAuto(this, MainWindows::eventButtonChangeGravity); - } - { - this.buttonAspectRatio = new Button(); - this.buttonAspectRatio.setPropertyValue("keep aspect ratio"); - this.buttonAspectRatio.setPropertyExpand(new Vector2b(false, false)); - this.buttonAspectRatio.setPropertyFill(new Vector2b(false, false)); - this.buttonAspectRatio.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); - sizerHori1.subWidgetAdd(this.buttonAspectRatio); - this.buttonAspectRatio.signalClick.connectAuto(this, MainWindows::eventButtonChangeKeepRatio); - } - - - } - public static void eventButtonExpandX(final MainWindows self) { - Vector2b state = self.testWidget.getPropertyExpand(); - self.testWidget.setPropertyExpand(state.withX(!state.x())); - self.buttonExpandX.setPropertyValue(state.x()?"expand X":"un-expand X"); - } - public static void eventButtonExpandY(final MainWindows self) { - Vector2b state = self.testWidget.getPropertyExpand(); - self.testWidget.setPropertyExpand(state.withY(!state.y())); - self.buttonExpandY.setPropertyValue(state.y()?"expand Y":"un-expand Y"); - } - public static void eventButtonFillX(final MainWindows self) { - Vector2b state = self.testWidget.getPropertyFill(); - self.testWidget.setPropertyFill(state.withX(!state.x())); - self.buttonFillX.setPropertyValue(state.x()?"fill X":"un-fill X"); - } - public static void eventButtonFillY(final MainWindows self) { - Vector2b state = self.testWidget.getPropertyFill(); - self.testWidget.setPropertyFill(state.withY(!state.y())); - self.buttonFillY.setPropertyValue(state.y()?"fill Y":"un-fill Y"); - } - public static void eventButtonChangeKeepRatio(final MainWindows self) { - boolean state = self.testWidget.isPropertyKeepRatio(); - self.testWidget.setPropertyKeepRatio(!state); - self.buttonAspectRatio.setPropertyValue(state?"fkeep aspect ratio":"un-keep aspect ratio"); - } - public static void eventButtonChangeGravity(final MainWindows self) { - Gravity state = self.testWidget.getPropertyGravity(); - switch(state) { - case BUTTOM: - state = Gravity.BUTTOM_LEFT; - break; - case BUTTOM_LEFT: - state = Gravity.BUTTOM_RIGHT; - break; - case BUTTOM_RIGHT: - state = Gravity.CENTER; - break; - case CENTER: - state = Gravity.LEFT; - break; - case LEFT: - state = Gravity.RIGHT; - break; - case RIGHT: - state = Gravity.TOP; - break; - case TOP: - state = Gravity.TOP_LEFT; - break; - case TOP_LEFT: - state = Gravity.TOP_RIGHT; - break; - case TOP_RIGHT: - state = Gravity.BUTTOM; - break; - } - self.testWidget.setPropertyGravity(state); - self.buttonGravity.setPropertyValue("gravity: " + state); - } - public static void eventButtonChangeImage(final MainWindows self) { - self.testWidget.setPropertySource(new Uri("DATA", "mireC.png")); + this.buttonAspectRatio = new Button(); + this.buttonAspectRatio.setPropertyValue("keep aspect ratio"); + this.buttonAspectRatio.setPropertyExpand(new Vector2b(false, false)); + this.buttonAspectRatio.setPropertyFill(new Vector2b(false, false)); + this.buttonAspectRatio.setPropertyMinSize(new Dimension(new Vector2f(10, 10), Distance.PIXEL)); + this.addButton(this.buttonAspectRatio); + this.buttonAspectRatio.signalClick.connectAuto(this, MainWindows::eventButtonChangeKeepRatio); } } diff --git a/src/org/atriasoft/ewol/widget/ContainerN.java b/src/org/atriasoft/ewol/widget/ContainerN.java index 0bb64e0..627438e 100644 --- a/src/org/atriasoft/ewol/widget/ContainerN.java +++ b/src/org/atriasoft/ewol/widget/ContainerN.java @@ -28,10 +28,6 @@ import org.atriasoft.exml.model.XmlNode; */ public class ContainerN extends Widget { - @XmlManaged - @XmlAttribute - @XmlName(value = "lock") - @EwolDescription(value = "Lock the subwidget expand") protected Vector2b propertyLockExpand = new Vector2b(false, false); //!< Lock the expend of the sub widget to this one == > this permit to limit bigger subWidget protected Vector2b subExpend = new Vector2b(false, false); //!< reference of the sub element expention requested. protected List subWidget = new ArrayList<>(); @@ -93,6 +89,10 @@ public class ContainerN extends Widget { } } + @XmlManaged + @XmlAttribute + @XmlName(value = "lock") + @EwolDescription(value = "Lock the subwidget expand") public Vector2b getPropertyLockExpand() { return this.propertyLockExpand; } diff --git a/src/org/atriasoft/ewol/widget/Entry.java b/src/org/atriasoft/ewol/widget/Entry.java index a918482..fd36a2c 100644 --- a/src/org/atriasoft/ewol/widget/Entry.java +++ b/src/org/atriasoft/ewol/widget/Entry.java @@ -71,40 +71,16 @@ public class Entry extends Widget { private boolean needUpdateTextPos = true; /// Periodic call handle to remove it when needed protected Connection periodicConnectionHanble = new Connection(); - @XmlManaged - @XmlAttribute - @XmlName(value = "config") - @EwolDescription(value = "configuration of the widget") private Uri propertyConfig = new Uri("THEME", "shape/Entry.json", "ewol"); - @XmlManaged - @XmlAttribute - @XmlName(value = "max") - @EwolDescription(value = "Maximum char that can be set on the Entry") private int propertyMaxCharacter = Integer.MAX_VALUE; //!< number max of Character in the list - @XmlManaged - @XmlAttribute - @XmlName(value = "password") - @EwolDescription(value = "Not display content in password mode") private boolean propertyPassword = false; //!< Disable display of the content of the entry /// regular expression value - @XmlManaged - @XmlAttribute - @XmlName(value = "regex") - @EwolDescription(value = "Control what it is write with a regular expression") private String propertyRegex = ".*"; /// Text to display when nothing in in the entry (decorated text...) - @XmlManaged - @XmlAttribute - @XmlName(value = "empty-text") - @EwolDescription(value = "Text when nothing is written") private String propertyTextWhenNothing = null; - @XmlManaged - @XmlAttribute - @XmlName(value = "value") - @EwolDescription(value = "Value display in the entry (decorated text)") private String propertyValue = "Test Text..."; //!< string that must be displayed private Pattern regex = null; //!< regular expression to check content private GuiShape shape; @@ -584,7 +560,7 @@ public class Entry extends Widget { this.gc.setSize((int) tmpSizeText.x(), (int) tmpSizeText.y()); // if (this.displayCursorPosSelection != this.displayCursorPos) { - // + // // //this.text.setCursorSelection(this.displayCursorPos, this.displayCursorPosSelection); // } else { // this.text.setCursorPos(this.displayCursorPos); @@ -671,6 +647,10 @@ public class Entry extends Widget { markToRedraw(); } + @XmlManaged + @XmlAttribute + @XmlName(value = "config") + @EwolDescription(value = "configuration of the widget") public void setPropertyConfig(final Uri propertyConfig) { if (this.propertyConfig.equals(propertyConfig)) { return; @@ -679,6 +659,10 @@ public class Entry extends Widget { onChangePropertyShaper(); } + @XmlManaged + @XmlAttribute + @XmlName(value = "max") + @EwolDescription(value = "Maximum char that can be set on the Entry") public void setPropertyMaxCharacter(final int propertyMaxCharacter) { if (this.propertyMaxCharacter == propertyMaxCharacter) { return; @@ -687,6 +671,10 @@ public class Entry extends Widget { onChangePropertyMaxCharacter(); } + @XmlManaged + @XmlAttribute + @XmlName(value = "password") + @EwolDescription(value = "Not display content in password mode") public void setPropertyPassword(final boolean propertyPassword) { if (this.propertyPassword == propertyPassword) { return; @@ -695,6 +683,10 @@ public class Entry extends Widget { onChangePropertyPassword(); } + @XmlManaged + @XmlAttribute + @XmlName(value = "regex") + @EwolDescription(value = "Control what it is write with a regular expression") public void setPropertyRegex(final String propertyRegex) { if (this.propertyRegex.equals(propertyRegex)) { return; @@ -703,6 +695,10 @@ public class Entry extends Widget { onChangePropertyRegex(); } + @XmlManaged + @XmlAttribute + @XmlName(value = "empty-text") + @EwolDescription(value = "Text when nothing is written") public void setPropertyTextWhenNothing(final String propertyTextWhenNothing) { if (this.propertyTextWhenNothing.equals(propertyTextWhenNothing)) { return; @@ -711,6 +707,10 @@ public class Entry extends Widget { onChangePropertyTextWhenNothing(); } + @XmlManaged + @XmlAttribute + @XmlName(value = "value") + @EwolDescription(value = "Value display in the entry (decorated text)") public void setPropertyValue(final String propertyValue) { if (this.propertyValue.equals(propertyValue)) { return; diff --git a/src/org/atriasoft/ewol/widget/ImageDisplay.java b/src/org/atriasoft/ewol/widget/ImageDisplay.java index 63905e0..ccd16f0 100644 --- a/src/org/atriasoft/ewol/widget/ImageDisplay.java +++ b/src/org/atriasoft/ewol/widget/ImageDisplay.java @@ -24,22 +24,18 @@ import org.atriasoft.exml.annotation.XmlName; import org.atriasoft.exml.model.XmlElement; import org.atriasoft.gale.key.KeyStatus; -/** - * @ingroup ewolWidgetGroup - */ public class ImageDisplay extends Widget { protected int colorId = -1; //!< Color of the image. protected ResourceColorFile colorProperty = null; //!< theme color property protected CompositingImage compositing = new CompositingImage(); //!< compositing element of the image. protected Vector2f imageRenderSize = Vector2f.ZERO; //!< size of the image when we render it - + protected Dimension propertyBorder = Dimension.ZERO; //!< border to add at the image. protected Dimension propertyImageSize = Dimension.ZERO; //!< border to add at the image. protected boolean propertyKeepRatio = true; //!< keep the image ratio between width and hight protected Vector2f propertyPosStart = Vector2f.ZERO; //!< position in the image to start the sisplay (when we want not to display all the image) protected Vector2f propertyPosStop = Vector2f.ONE; //!< position in the image to start the sisplay (when we want not to display all the image) - protected boolean propertySmooth = true; //!< display is done in the pixel approximation if false protected Uri propertySource = null; //!< file name of the image. protected boolean propertyUseThemeColor = false; //!< Use the themo color management ("THEMECOLOR:///Image.json?lib=ewol") default false @@ -63,7 +59,7 @@ public class ImageDisplay extends Widget { this.minSize = imageBoder.add(imageSize); this.maxSize = this.minSize; } else { - Vector2i imageSizeReal = this.compositing.getRealSize(); + Vector2i imageSizeReal = this.getPropertyMinSize().getPixeli();//.compositing.getRealSize(); Log.verbose(" Real Size = " + imageSizeReal); Vector2f min1 = imageBoder.add(this.propertyMinSize.getPixel()); this.minSize = imageBoder.add(imageSizeReal); @@ -87,7 +83,7 @@ public class ImageDisplay extends Widget { public Dimension getPropertyBorder() { return this.propertyBorder; } - + @XmlManaged @XmlAttribute @XmlName(value = "size") @@ -95,7 +91,7 @@ public class ImageDisplay extends Widget { public Dimension getPropertyImageSize() { return this.propertyImageSize; } - + @XmlManaged @XmlAttribute @XmlName(value = "part-start") @@ -103,6 +99,7 @@ public class ImageDisplay extends Widget { public Vector2f getPropertyPosStart() { return this.propertyPosStart; } + @XmlManaged @XmlAttribute @XmlName(value = "part-stop") @@ -110,7 +107,7 @@ public class ImageDisplay extends Widget { public Vector2f getPropertyPosStop() { return this.propertyPosStop; } - + @XmlManaged @XmlAttribute @XmlName(value = "src") @@ -118,7 +115,7 @@ public class ImageDisplay extends Widget { public Uri getPropertySource() { return this.propertySource; } - + @XmlManaged @XmlAttribute @XmlName(value = "ratio") @@ -126,6 +123,7 @@ public class ImageDisplay extends Widget { public boolean isPropertyKeepRatio() { return this.propertyKeepRatio; } + @XmlManaged @XmlAttribute @XmlName(value = "smooth") @@ -133,7 +131,7 @@ public class ImageDisplay extends Widget { public boolean isPropertySmooth() { return this.propertySmooth; } - + @XmlManaged @XmlAttribute @XmlName(value = "use-theme-color") diff --git a/src/org/atriasoft/ewol/widget/Label.java b/src/org/atriasoft/ewol/widget/Label.java index 9eee268..c71347e 100644 --- a/src/org/atriasoft/ewol/widget/Label.java +++ b/src/org/atriasoft/ewol/widget/Label.java @@ -29,21 +29,9 @@ public class Label extends Widget { protected int colorDefaultBgText = -1; //!< Default Background color of the text protected int colorDefaultFgText = -1; //!< Default color of the text protected ResourceColorFile colorProperty; //!< theme color property - @XmlManaged - @XmlAttribute - @XmlName(value = "auto-translate") - @EwolDescription(value = "Translate the String with the marker {T:xxxxxx}") protected boolean propertyAutoTranslate = true; //!< if at true the data is translate automaticaly translate. - @XmlManaged - @XmlAttribute - @XmlName(value = "font-size") - @EwolDescription(value = "Default font size (0=> system default)") protected int propertyFontSize = 0; //!< default size of the font. - @XmlManaged - @XmlAttribute - @XmlName(value = "value") - @EwolDescription(value = "Displayed value string") protected String propertyValue = ""; //!< decorated text to display. @EwolSignal(name = "pressed") @EwolDescription(value = "Label is pressed") @@ -194,6 +182,10 @@ public class Label extends Widget { this.text.flush(); } + @XmlManaged + @XmlAttribute + @XmlName(value = "auto-translate") + @EwolDescription(value = "Translate the String with the marker {T:xxxxxx}") public void setPropertyAutoTranslate(final boolean propertyAutoTranslate) { if (this.propertyAutoTranslate == propertyAutoTranslate) { return; @@ -208,6 +200,10 @@ public class Label extends Widget { requestUpdateSize(); } + @XmlManaged + @XmlAttribute + @XmlName(value = "font-size") + @EwolDescription(value = "Default font size (0=> system default)") public void setPropertyFontSize(final int propertyFontSize) { if (this.propertyFontSize == propertyFontSize) { return; @@ -217,6 +213,10 @@ public class Label extends Widget { requestUpdateSize(); } + @XmlManaged + @XmlAttribute + @XmlName(value = "value") + @EwolDescription(value = "Displayed value string") public void setPropertyValue(final String propertyValue) { if (this.propertyValue.equals(propertyValue)) { return; diff --git a/src/org/atriasoft/ewol/widget/ProgressBar.java b/src/org/atriasoft/ewol/widget/ProgressBar.java index 120a343..ed2c640 100644 --- a/src/org/atriasoft/ewol/widget/ProgressBar.java +++ b/src/org/atriasoft/ewol/widget/ProgressBar.java @@ -33,6 +33,7 @@ class ProgressBar extends Widget { this.minSize = new Vector2f(Math.max(tmpMin.x(), 40.0f), Math.max(tmpMin.y(), ProgressBar.DOT_RADIUS * 2.0f)); markToRedraw(); } + @XmlManaged @XmlAttribute @XmlName(value = "color-off") @@ -40,7 +41,7 @@ class ProgressBar extends Widget { public Color getPropertyTextColorBgOff() { return this.propertyTextColorBgOff; } - + @XmlManaged @XmlAttribute @XmlName(value = "color-on") @@ -48,7 +49,7 @@ class ProgressBar extends Widget { public Color getPropertyTextColorBgOn() { return this.propertyTextColorBgOn; } - + @XmlManaged @XmlAttribute @XmlName(value = "color-bg") @@ -56,7 +57,7 @@ class ProgressBar extends Widget { public Color getPropertyTextColorFg() { return this.propertyTextColorFg; } - + @XmlManaged @XmlAttribute @XmlName(value = "value") diff --git a/src/org/atriasoft/ewol/widget/Sizer.java b/src/org/atriasoft/ewol/widget/Sizer.java index 4263645..3db7eec 100644 --- a/src/org/atriasoft/ewol/widget/Sizer.java +++ b/src/org/atriasoft/ewol/widget/Sizer.java @@ -80,7 +80,7 @@ public class Sizer extends ContainerN { this.minSize = this.minSize.add(tmpBorderSize.multiply(2)); //Log.error("[" + getId() + "] {" + getObjectType() + "} Result min size : " + this.minSize); } - + @XmlManaged @XmlAttribute @XmlName("border") @@ -89,7 +89,7 @@ public class Sizer extends ContainerN { public Dimension getPropertyBorderSize() { return this.propertyBorderSize; } - + @XmlManaged @XmlAttribute @XmlName("mode") @@ -149,15 +149,19 @@ public class Sizer extends ContainerN { countCalculation = nbWidgetExpand.y(); } // -4.1- Update every subWidget size + Widget lastWidget = null; + if (!this.subWidget.isEmpty()) { + lastWidget = this.subWidget.get(this.subWidget.size() - 1); + } for (Widget it : this.subWidget) { if (it == null) { continue; } Vector2f tmpSizeMin = it.getSize(); Vector2f tmpSizeMax = it.getCalculateMaxSize(); - // Now update his size his size in X and the curent sizer size in Y: + // Now update his size his size in X and the current sizer size in Y: if (this.propertyMode == DisplayMode.modeVert) { - if (it.canExpand().y()) { + if (it.canExpand().y() || (it == lastWidget && it.canExpandIfFree().y())) { float sizeExpand = tmpSizeMin.y() + deltaExpandSize; if (sizeExpand > tmpSizeMax.y()) { residualNext += (sizeExpand - tmpSizeMax.y()); @@ -168,7 +172,7 @@ public class Sizer extends ContainerN { } it.setSize(tmpSizeMin); } else { - if (it.canExpand().x()) { + if (it.canExpand().x() || (it == lastWidget && it.canExpandIfFree().x())) { float sizeExpand = tmpSizeMin.x() + deltaExpandSize; if (sizeExpand > tmpSizeMax.x()) { residualNext += (sizeExpand - tmpSizeMax.x()); @@ -203,16 +207,16 @@ public class Sizer extends ContainerN { if (it == null) { continue; } - // Now update his size his size in X and the curent sizer size in Y: + // Now update his size, his size in X and the current sizer size in Y: if (this.propertyMode == DisplayMode.modeVert) { - if (!it.canExpand().x()) { + if (!it.canExpand().x() && !it.canExpandIfFree().x()) { continue; } Vector2f tmpSizeMin = it.getSize(); tmpSizeMin = tmpSizeMin.withX(FMath.avg(tmpSizeMin.x(), localWidgetSize.x(), it.getCalculateMaxSize().x())); it.setSize(tmpSizeMin); } else { - if (!it.canExpand().y()) { + if (!it.canExpand().y() && !it.canExpandIfFree().y()) { continue; } Vector2f tmpSizeMin = it.getSize(); diff --git a/src/org/atriasoft/ewol/widget/Spacer.java b/src/org/atriasoft/ewol/widget/Spacer.java index 94115b2..f2af69c 100644 --- a/src/org/atriasoft/ewol/widget/Spacer.java +++ b/src/org/atriasoft/ewol/widget/Spacer.java @@ -15,9 +15,6 @@ import org.atriasoft.exml.annotation.XmlAttribute; import org.atriasoft.exml.annotation.XmlManaged; import org.atriasoft.exml.annotation.XmlName; -/** - * @ingroup ewolWidgetGroup - */ public class Spacer extends Widget { private final CompositingDrawing draw = new CompositingDrawing(); //!< Compositing drawing element @XmlManaged diff --git a/src/org/atriasoft/ewol/widget/Widget.java b/src/org/atriasoft/ewol/widget/Widget.java index 83646ec..494d939 100644 --- a/src/org/atriasoft/ewol/widget/Widget.java +++ b/src/org/atriasoft/ewol/widget/Widget.java @@ -33,6 +33,8 @@ import org.atriasoft.ewol.internal.Log; import org.atriasoft.ewol.object.EwolObject; import org.atriasoft.exml.annotation.XmlAttribute; import org.atriasoft.exml.annotation.XmlDefaultManaged; +import org.atriasoft.exml.annotation.XmlDefaultOptional; +import org.atriasoft.exml.annotation.XmlIgnoreUnknow; import org.atriasoft.exml.annotation.XmlManaged; import org.atriasoft.exml.annotation.XmlName; import org.atriasoft.exml.model.XmlElement; @@ -41,18 +43,20 @@ import org.atriasoft.gale.context.ClipboardList; import org.atriasoft.gale.context.Cursor; import org.atriasoft.gale.key.KeyKeyboard; import org.atriasoft.gale.key.KeySpecial; - import org.lwjgl.opengl.GL11; /** - * Widget class is the main widget interface, it has so me generic properties: + * Widget class is the main widget interface, it has so me generic properties: * :** known his parent * :** Can be display at a special position with a special scale * :** Can get focus * :** Receive Event (keyboard / mouse / ...) * */ + @XmlDefaultManaged(value = false) +@XmlDefaultOptional +@XmlIgnoreUnknow public class Widget extends EwolObject { // ---------------------------------------------------------------------------------------------------------------- // -- keyboard event properties Area @@ -90,6 +94,7 @@ public class Widget extends EwolObject { protected boolean propertyCanFocus = false; //!< the focus can be done on this widget protected Vector2b propertyExpand = new Vector2b(false, false); //!< the widget will expand if possible + protected Vector2b propertyExpandIfFree = new Vector2b(false, false); //!< the widget will expand if possible protected Vector2b propertyFill = new Vector2b(true, true); //!< the widget will fill all the space provided by the parent. protected Gravity propertyGravity = Gravity.BUTTOM_LEFT; //!< Gravity of the widget protected boolean propertyHide = false; //!< hide a widget on the display @@ -141,6 +146,18 @@ public class Widget extends EwolObject { return new Vector2b(false, false); } + /** + * get the expend if free capabilities (xy) + * @return 2D boolean represents the capacity to expend (if some free space is available) + * @note : INTERNAL EWOL SYSTEM + */ + public Vector2b canExpandIfFree() { + if (!this.propertyHide) { + return this.propertyExpandIfFree; + } + return new Vector2b(false, false); + } + /** * get the filling capabilities xy * @return Vector2b repensent the capacity to xy filling @@ -179,11 +196,12 @@ public class Widget extends EwolObject { } public void drawWidgetTree(final int level) { - String space = ""; + StringBuilder space = new StringBuilder(); for (int iii = 0; iii < level; ++iii) { - space += " "; + space.append(" "); } - Log.print(space + "[" + getId() + "] name='" + this.name + "' type=" + getClass().getCanonicalName() + " o=" + this.origin + " s=" + this.size + " hide=" + this.propertyHide); + Log.print(space.append("[").append(getId()).append("] name='").append(this.name).append("' type=").append(getClass().getCanonicalName()).append(" o=").append(this.origin).append(" s=") + .append(this.size).append(" hide=").append(this.propertyHide).toString()); } /** @@ -218,14 +236,6 @@ public class Widget extends EwolObject { return this.cursorDisplay; } - /** - * get the focus state of the widget - * @return focus state - */ - public boolean isFocused() { - return this.hasFocus; - } - /** * get the grabbing status of the cursor. * @return true if the cursor is currently grabbed @@ -283,6 +293,14 @@ public class Widget extends EwolObject { return this.propertyExpand; } + @XmlManaged + @XmlAttribute + @XmlName(value = "expand-free") + @EwolDescription(value = "Request the widget Expand size while free space is detected (does not generate expand in upper wideget)") + public Vector2b getPropertyExpandIfFree() { + return this.propertyExpandIfFree; + } + @XmlManaged @XmlAttribute @XmlName(value = "fill") @@ -390,6 +408,14 @@ public class Widget extends EwolObject { EwolObject.getContext().keyboardHide(); } + /** + * get the focus state of the widget + * @return focus state + */ + public boolean isFocused() { + return this.hasFocus; + } + /** * keep the focus on this widget == > this remove the previous focus on all other widget */ @@ -671,6 +697,15 @@ public class Widget extends EwolObject { requestUpdateSize(); } + public void setPropertyExpandIfFree(final Vector2b value) { + if (this.propertyExpandIfFree.equals(value)) { + return; + } + this.propertyExpandIfFree = value; + markToRedraw(); + requestUpdateSize(); + } + public void setPropertyFill(final Vector2b value) { if (this.propertyFill.equals(value)) { return; @@ -899,7 +934,7 @@ public class Widget extends EwolObject { } final Vector2f displayOrigin = this.origin.add(this.offset); - // check if the element is displayable in the windows : + // check if the element is displayable in the windows : if (displayProp.windowsSize().x() < this.origin.x() || displayProp.windowsSize().y() < this.origin.y()) { // out of the windows == > nothing to display ... return;