From 62a72a30c97c37dd80f0734756291a1e9804f679 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Wed, 4 Aug 2021 00:13:03 +0200 Subject: [PATCH] [DEV] set imaghe drawer updated --- .classpath | 26 +----- resources/resources/ewol/data/textured3D.frag | 5 +- resources/resources/ewol/data/textured3D.vert | 22 +++-- samples/.classpath | 3 +- samples/.gitignore | 1 + samples/resources/test-ewol/data/mireA.png | Bin 0 -> 34526 bytes samples/resources/test-ewol/data/mireB.jpg | Bin 0 -> 29445 bytes samples/src/module-info.java | 1 + .../ewol/simpleWindowsLabel/Appl.java | 80 ++++++++++++++++ .../ewol/simpleWindowsLabel/Log.java | 39 ++++++++ .../ewol/simpleWindowsLabel/MainWindows.java | 31 +++++++ .../SimpleWindowsLabelMain.java | 15 +++ .../simpleWindowsWithImage/MainWindows.java | 29 +++--- .../SimpleWindowsWithImageMain.java | 4 +- .../ewol/annotation/EwolObjectProperty.java | 13 +++ .../ewol/compositing/CompositingImage.java | 75 +++++++-------- .../ewol/compositing/CompositingText.java | 2 +- src/org/atriasoft/ewol/widget/Button.java | 6 +- src/org/atriasoft/ewol/widget/ContainerN.java | 4 +- src/org/atriasoft/ewol/widget/Entry.java | 14 +-- .../atriasoft/ewol/widget/ImageDisplay.java | 87 +++++++++--------- src/org/atriasoft/ewol/widget/Label.java | 8 +- .../atriasoft/ewol/widget/ProgressBar.java | 42 ++++----- src/org/atriasoft/ewol/widget/Sizer.java | 29 +++--- src/org/atriasoft/ewol/widget/Spacer.java | 4 +- src/org/atriasoft/ewol/widget/Widget.java | 16 ++-- src/org/atriasoft/ewol/widget/Windows.java | 6 +- 27 files changed, 365 insertions(+), 197 deletions(-) create mode 100644 samples/resources/test-ewol/data/mireA.png create mode 100644 samples/resources/test-ewol/data/mireB.jpg create mode 100644 samples/src/sample/atriasoft/ewol/simpleWindowsLabel/Appl.java create mode 100644 samples/src/sample/atriasoft/ewol/simpleWindowsLabel/Log.java create mode 100644 samples/src/sample/atriasoft/ewol/simpleWindowsLabel/MainWindows.java create mode 100644 samples/src/sample/atriasoft/ewol/simpleWindowsLabel/SimpleWindowsLabelMain.java create mode 100644 src/org/atriasoft/ewol/annotation/EwolObjectProperty.java diff --git a/.classpath b/.classpath index 71d2e6b..ece7b32 100644 --- a/.classpath +++ b/.classpath @@ -23,17 +23,7 @@ - - - - - - - - - - - + @@ -43,12 +33,12 @@ - + - + @@ -58,15 +48,5 @@ - - - - - - - - - - diff --git a/resources/resources/ewol/data/textured3D.frag b/resources/resources/ewol/data/textured3D.frag index 90e2702..da71b96 100644 --- a/resources/resources/ewol/data/textured3D.frag +++ b/resources/resources/ewol/data/textured3D.frag @@ -1,3 +1,5 @@ +#version 400 core + #ifdef GL_ES precision mediump float; precision mediump int; @@ -10,6 +12,7 @@ varying vec2 io_texcoord; varying vec4 io_color; void main(void) { - gl_FragColor = texture2D(in_texID, io_texcoord) * io_color; + vec4 map = texture2D(in_texID, io_texcoord); + gl_FragColor = map * io_color; //gl_FragColor = vec4(1.0,1.0,0.2,0.6); } diff --git a/resources/resources/ewol/data/textured3D.vert b/resources/resources/ewol/data/textured3D.vert index 542ecc6..bfe04d9 100644 --- a/resources/resources/ewol/data/textured3D.vert +++ b/resources/resources/ewol/data/textured3D.vert @@ -1,21 +1,27 @@ +#version 400 core + #ifdef GL_ES precision mediump float; precision mediump int; #endif -// Input : -attribute vec3 in_coord3d; -attribute vec2 in_texture2d; -attribute vec4 in_color; -uniform mat4 in_MatrixTransformation; + +// VBA Input : +layout (location = 0) in vec3 in_position; +layout (location = 1) in vec2 in_textureCoords; +layout (location = 3) in vec4 in_colors; +uniform mat4 in_matrixTransformation; +uniform mat4 in_matrixProjection; +uniform mat4 in_matrixView; // output : varying vec4 io_color; varying vec2 io_texcoord; void main(void) { - gl_Position = in_MatrixTransformation * vec4(in_coord3d, 1.0); + gl_Position = in_matrixProjection * in_matrixView * in_matrixTransformation * vec4(in_position, 1.0); + //gl_Position = in_MatrixTransformation * vec4(in_position, 1.0); // set texture output coord - io_texcoord = in_texture2d; + io_texcoord = in_textureCoords; // set output color : - io_color = in_color; + io_color = in_colors; } diff --git a/samples/.classpath b/samples/.classpath index 90b1099..ba2572c 100644 --- a/samples/.classpath +++ b/samples/.classpath @@ -6,10 +6,11 @@ + - + diff --git a/samples/.gitignore b/samples/.gitignore index ae3c172..f6df409 100644 --- a/samples/.gitignore +++ b/samples/.gitignore @@ -1 +1,2 @@ /bin/ +/out/ diff --git a/samples/resources/test-ewol/data/mireA.png b/samples/resources/test-ewol/data/mireA.png new file mode 100644 index 0000000000000000000000000000000000000000..3943c455830f9b7380cd6e609cf6ac318186a31e GIT binary patch literal 34526 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 ?rBmO_ewNLzSG#W0j}o4$UX=?NABACf9qb_tod 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 literal 0 HcmV?d00001 diff --git a/samples/resources/test-ewol/data/mireB.jpg b/samples/resources/test-ewol/data/mireB.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1077ac0c1a9cb0436d90d6885f46bbc0309da2b4 GIT binary patch literal 29445 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 L##=KA`RYFa6Z?!G literal 0 HcmV?d00001 diff --git a/samples/src/module-info.java b/samples/src/module-info.java index 269a2aa..7f5ae2f 100644 --- a/samples/src/module-info.java +++ b/samples/src/module-info.java @@ -1,4 +1,5 @@ module sample.atriasoft.ewol { //exports sample.atriasoft.ewol.simpleWindowsWithImage; requires org.atriasoft.ewol; + requires org.atriasoft.etk; } \ No newline at end of file diff --git a/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/Appl.java b/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/Appl.java new file mode 100644 index 0000000..19f8beb --- /dev/null +++ b/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/Appl.java @@ -0,0 +1,80 @@ +package sample.atriasoft.ewol.simpleWindowsLabel; + +import org.atriasoft.etk.Configs; +import org.atriasoft.etk.math.Vector2f; +import org.atriasoft.ewol.context.EwolApplication; +import org.atriasoft.ewol.context.EwolContext; + +public class Appl implements EwolApplication { + + //! [ewol_sample_HW_main_application] + private void localCreate(final EwolContext context) { + //! [ewol_sample_HW_main_parse_arguments] + // parse all the argument of the application + for (int iii = 0; iii < context.getCmd().size(); iii++) { + String tmpppp = context.getCmd().get(iii); + if (tmpppp == "-h" || tmpppp == "--help") { + Log.print(" -h/--help display this help"); + System.exit(0); + } + } + //! [ewol_sample_HW_main_parse_arguments] + //! [ewol_sample_HW_main_set_windows_size] + // TODO : Remove this: Move if in the windows properties + context.setSize(new Vector2f(800, 600)); + //! [ewol_sample_HW_main_set_windows_size] + //! [ewol_sample_HW_main_set_font_property] + // select font preference of der with a basic application size + Configs.getConfigFonts().set("FreeSherif", 12); + //! [ewol_sample_HW_main_set_font_property] + //! [ewol_sample_HW_main_set_windows] + // Create the windows + MainWindows basicWindows = new MainWindows(); + // configure the ewol context to use the new windows + context.setWindows(basicWindows); + //! [ewol_sample_HW_main_set_windows] + } + + @Override + public void onCreate(final EwolContext context) { + Log.info("Application onCreate: [BEGIN]"); + localCreate(context); + Log.info("Application onCreate: [ END ]"); + } + + @Override + public void onDestroy(final EwolContext context) { + Log.info("Application onDestroy: [BEGIN]"); + + Log.info("Application onDestroy: [ END ]"); + } + + @Override + public void onPause(final EwolContext context) { + Log.info("Application onPause: [BEGIN]"); + + Log.info("Application onPause: [ END ]"); + } + + @Override + public void onResume(final EwolContext context) { + Log.info("Application onResume: [BEGIN]"); + + Log.info("Application onResume: [ END ]"); + } + + @Override + public void onStart(final EwolContext context) { + Log.info("Application onStart: [BEGIN]"); + + Log.info("Application onStart: [ END ]"); + } + + @Override + public void onStop(final EwolContext context) { + Log.info("Application onStop: [BEGIN]"); + + Log.info("Application onStop: [ END ]"); + } + +} \ No newline at end of file diff --git a/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/Log.java b/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/Log.java new file mode 100644 index 0000000..59b9f42 --- /dev/null +++ b/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/Log.java @@ -0,0 +1,39 @@ +package sample.atriasoft.ewol.simpleWindowsLabel; + +public class Log { + private static final String LIBNAME = "LoxelEngine"; + + public static void critical(final String data) { + System.out.println("[C] " + Log.LIBNAME + " | " + data); + } + + public static void debug(final String data) { + System.out.println("[D] " + Log.LIBNAME + " | " + data); + } + + public static void error(final String data) { + System.out.println("[E] " + Log.LIBNAME + " | " + data); + } + + public static void info(final String data) { + System.out.println("[I] " + Log.LIBNAME + " | " + data); + } + + public static void print(final String data) { + System.out.println(data); + } + + public static void todo(final String data) { + System.out.println("[TODO] " + Log.LIBNAME + " | " + data); + } + + public static void verbose(final String data) { + System.out.println("[V] " + Log.LIBNAME + " | " + data); + } + + public static void warning(final String data) { + System.out.println("[W] " + Log.LIBNAME + " | " + data); + } + + private Log() {} +} diff --git a/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/MainWindows.java b/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/MainWindows.java new file mode 100644 index 0000000..d0c5246 --- /dev/null +++ b/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/MainWindows.java @@ -0,0 +1,31 @@ +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 { + + public MainWindows() { + //! [ewol_sample_HW_windows_title] + setPropertyTitle("Simple sample test"); + //EwolObject.getContext().getFontDefault().setName("FreeSans"); + //! [ewol_sample_HW_windows_label] + if (true) { + //! [ewol_sample_HW_windows_title] + Label simpleLabel = new Label(); + simpleLabel.setPropertyValue( + "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); + //! [ewol_sample_HW_windows_label] + } else { + Spacer simpleSpacer = new Spacer(); + simpleSpacer.setPropertyExpand(new Vector2b(true, true)); + simpleSpacer.setPropertyFill(new Vector2b(true, true)); + setSubWidget(simpleSpacer); + } + } +} diff --git a/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/SimpleWindowsLabelMain.java b/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/SimpleWindowsLabelMain.java new file mode 100644 index 0000000..6434b8a --- /dev/null +++ b/samples/src/sample/atriasoft/ewol/simpleWindowsLabel/SimpleWindowsLabelMain.java @@ -0,0 +1,15 @@ +package sample.atriasoft.ewol.simpleWindowsLabel; + +import org.atriasoft.etk.Uri; +import org.atriasoft.ewol.Ewol; + +public class SimpleWindowsLabelMain { + public static void main(final String[] args) { + Ewol.init(); + //Uri.addLibrary("ne", MainCollisionTest.class, "testDataLoxelEngine/"); + Uri.setApplication(SimpleWindowsLabelMain.class); + Ewol.run(new Appl(), args); + } + + private SimpleWindowsLabelMain() {} +} diff --git a/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/MainWindows.java b/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/MainWindows.java index e716a5a..7c8f13a 100644 --- a/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/MainWindows.java +++ b/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/MainWindows.java @@ -1,31 +1,24 @@ package sample.atriasoft.ewol.simpleWindowsWithImage; +import org.atriasoft.etk.Uri; import org.atriasoft.etk.math.Vector2b; -import org.atriasoft.ewol.widget.Label; -import org.atriasoft.ewol.widget.Spacer; +import org.atriasoft.ewol.widget.ImageDisplay; import org.atriasoft.ewol.widget.Windows; public class MainWindows extends Windows { public MainWindows() { //! [ewol_sample_HW_windows_title] - setPropertyTitle("Simple sample test"); + setPropertyTitle("Simple label"); //EwolObject.getContext().getFontDefault().setName("FreeSans"); //! [ewol_sample_HW_windows_label] - if (true) { - //! [ewol_sample_HW_windows_title] - Label simpleLabel = new Label(); - simpleLabel.setPropertyValue( - "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); - //! [ewol_sample_HW_windows_label] - } else { - Spacer simpleSpacer = new Spacer(); - simpleSpacer.setPropertyExpand(new Vector2b(true, true)); - simpleSpacer.setPropertyFill(new Vector2b(true, true)); - setSubWidget(simpleSpacer); - } + //! [ewol_sample_HW_windows_title] + ImageDisplay testWidget = new ImageDisplay(); + testWidget.setPropertySource(new Uri("DATA", "mireA.png")); + testWidget.setPropertyExpand(new Vector2b(true, true)); + testWidget.setPropertyFill(new Vector2b(true, true)); + setSubWidget(testWidget); + //! [ewol_sample_HW_windows_label] + } } diff --git a/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/SimpleWindowsWithImageMain.java b/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/SimpleWindowsWithImageMain.java index b1b93ac..5f1261a 100644 --- a/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/SimpleWindowsWithImageMain.java +++ b/samples/src/sample/atriasoft/ewol/simpleWindowsWithImage/SimpleWindowsWithImageMain.java @@ -6,8 +6,8 @@ import org.atriasoft.ewol.Ewol; public class SimpleWindowsWithImageMain { public static void main(final String[] args) { Ewol.init(); - //Uri.addLibrary("ne", MainCollisionTest.class, "testDataLoxelEngine/"); - Uri.setApplication(SimpleWindowsWithImageMain.class); + //Uri.addLibrary("test-data", SimpleWindowsWithImageMain.class, "test-ewol/"); + Uri.setApplication(SimpleWindowsWithImageMain.class, "test-ewol/"); Ewol.run(new Appl(), args); } diff --git a/src/org/atriasoft/ewol/annotation/EwolObjectProperty.java b/src/org/atriasoft/ewol/annotation/EwolObjectProperty.java new file mode 100644 index 0000000..1b405f0 --- /dev/null +++ b/src/org/atriasoft/ewol/annotation/EwolObjectProperty.java @@ -0,0 +1,13 @@ +package org.atriasoft.ewol.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ ElementType.FIELD, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@EwolAnnotation +public @interface EwolObjectProperty { + +} diff --git a/src/org/atriasoft/ewol/compositing/CompositingImage.java b/src/org/atriasoft/ewol/compositing/CompositingImage.java index 1e15544..ca9cfce 100644 --- a/src/org/atriasoft/ewol/compositing/CompositingImage.java +++ b/src/org/atriasoft/ewol/compositing/CompositingImage.java @@ -19,7 +19,7 @@ import org.atriasoft.gale.backend3d.OpenGL.RenderMode; import org.atriasoft.gale.resource.ResourceProgram; import org.atriasoft.gale.resource.ResourceTexture2; import org.atriasoft.gale.resource.ResourceTextureFile; -import org.atriasoft.gale.resource.ResourceVirtualBufferObject; +import org.atriasoft.gale.resource.ResourceVirtualArrayObject; public class CompositingImage extends Compositing { public static final int NB_VBO = 3; @@ -30,26 +30,28 @@ public class CompositingImage extends Compositing { public static final int VBO_ID_COORD_TEX = 1; private float angle = 0; //!< Angle to set at the axes private boolean clippingEnable = true; //!< true if the clipping must be activated - private Vector3f clippingPosStart = new Vector3f(0, 0, 0); //!< Clipping start position - private Vector3f clippingPosStop = new Vector3f(0, 0, 0); //!< Clipping stop position + private Vector3f clippingPosStart = Vector3f.ZERO; //!< Clipping start position + private Vector3f clippingPosStop = Vector3f.ZERO; //!< Clipping stop position private Color color = new Color(1, 1, 1); //!< The text foreground color private Uri filename; - private int oGLColor = -1; //!< openGL id on the element (color buffer) - private int oGLMatrix = -1; //!< openGL id on the element (transformation matrix) + private final int oGLColor = -1; //!< openGL id on the element (color buffer) + protected int oGLMatrixProjection = -1; //!< openGL id on the element (Projection matrix) + protected int oGLMatrixTransformation = -1; //!< openGL id on the element (transformation matrix) + protected int oGLMatrixView = -1; //!< openGL id on the element (view matrix) private int oGLPosition = -1; //!< openGL id on the element (vertex buffer) private ResourceProgram oGLprogram = null; //!< pointer on the opengl display program private int oGLtexID = -1; //!< openGL id on the element (texture ID) - private int oGLtexture = -1; //!< openGL id on the element (Texture position) - private Vector3f position = new Vector3f(0, 0, 0); //!< The current position to draw + private final int oGLtexture = -1; //!< openGL id on the element (Texture position) + private Vector3f position = Vector3f.ZERO; //!< The current position to draw private Vector2i requestSize = new Vector2i(2, 2); private ResourceTextureFile resource = null; //!< texture resources private ResourceTexture2 resourceImage = null; //!< texture resources - private ResourceVirtualBufferObject vbo = null; + private ResourceVirtualArrayObject vbo = null; - final Color[] vboDataColors = new Color[6]; - final Vector3f[] vboDataCoords = new Vector3f[6]; - final Vector2f[] vboDataCoordsTex = new Vector2f[6]; + private Color[] vboDataColors = null; + private Vector3f[] vboDataCoords = null; + private Vector2f[] vboDataCoordsTex = null; public CompositingImage() { this(new Uri("DATA", ""), CompositingImage.SIZE_AUTO); @@ -63,7 +65,7 @@ public class CompositingImage extends Compositing { public CompositingImage(final Uri uri, final int size) { this.filename = uri; // Create the VBO: - this.vbo = ResourceVirtualBufferObject.create(CompositingImage.NB_VBO); + this.vbo = ResourceVirtualArrayObject.createDynamic(); if (this.vbo == null) { Log.error("can not instanciate VBO ..."); return; @@ -84,9 +86,9 @@ public class CompositingImage extends Compositing { // reset Buffer : this.vbo.clear(); // reset temporal variables : - this.position = new Vector3f(0, 0, 0); - this.clippingPosStart = new Vector3f(0, 0, 0); - this.clippingPosStop = new Vector3f(0, 0, 0); + this.position = Vector3f.ZERO; + this.clippingPosStart = Vector3f.ZERO; + this.clippingPosStop = Vector3f.ZERO; this.clippingEnable = false; this.color = Color.WHITE; this.angle = 0; @@ -119,9 +121,13 @@ public class CompositingImage extends Compositing { OpenGL.enable(OpenGL.Flag.flag_depthTest); } // set Matrix : translation/positionMatrix - final Matrix4f tmpMatrix = OpenGL.getMatrix().multiply(this.matrixApply); + final Matrix4f projMatrix = OpenGL.getMatrix(); + final Matrix4f camMatrix = OpenGL.getCameraMatrix(); this.oGLprogram.use(); - this.oGLprogram.uniformMatrix(this.oGLMatrix, tmpMatrix); + this.vbo.bindForRendering(); + this.oGLprogram.uniformMatrix(this.oGLMatrixProjection, projMatrix); + this.oGLprogram.uniformMatrix(this.oGLMatrixTransformation, this.matrixApply); + this.oGLprogram.uniformMatrix(this.oGLMatrixView, camMatrix); // TextureID if (this.resourceImage != null) { this.resourceImage.bindForRendering(0); @@ -130,25 +136,17 @@ public class CompositingImage extends Compositing { } else { Log.error("FONT type error Request normal and display distance field ..."); } - // position: - this.oGLprogram.sendAttributePointer(this.oGLPosition, this.vbo, CompositingImage.VBO_ID_COORD); - // Texture: - this.oGLprogram.sendAttributePointer(this.oGLtexture, this.vbo, CompositingImage.VBO_ID_COORD_TEX); - // color: - this.oGLprogram.sendAttributePointer(this.oGLColor, this.vbo, CompositingImage.VBO_ID_COLOR); - // Request the draw of the elements: - OpenGL.drawArrays(RenderMode.TRIANGLE, 0, this.vbo.bufferSize(CompositingImage.VBO_ID_COORD)); - + this.vbo.renderArrays(RenderMode.TRIANGLE); + this.vbo.unBindForRendering(); this.oGLprogram.unUse(); } @Override public void flush() { - - this.vbo.setVboData(CompositingImage.VBO_ID_COORD, this.vboDataCoords); - this.vbo.setVboData(CompositingImage.VBO_ID_COORD_TEX, this.vboDataCoordsTex); - this.vbo.setVboData(CompositingImage.VBO_ID_COLOR, this.vboDataColors); - + this.vbo.setPosition(this.vboDataCoords); + this.vbo.setTextureCoordinate(this.vboDataCoordsTex); + this.vbo.setColors(this.vboDataColors); + this.vbo.setVertexCount(this.vboDataCoords.length); this.vbo.flush(); } @@ -190,16 +188,15 @@ public class CompositingImage extends Compositing { this.oGLPosition = 0; this.oGLprogram = ResourceProgram.create(new Uri("DATA", "textured3D.vert", "ewol"), new Uri("DATA", "textured3D.frag", "ewol")); if (this.oGLprogram != null) { - this.oGLPosition = this.oGLprogram.getAttribute("in_coord3d"); - this.oGLColor = this.oGLprogram.getAttribute("in_color"); - this.oGLtexture = this.oGLprogram.getAttribute("in_texture2d"); - this.oGLMatrix = this.oGLprogram.getUniform("in_MatrixTransformation"); + this.oGLMatrixTransformation = this.oGLprogram.getUniform("in_matrixTransformation"); + this.oGLMatrixProjection = this.oGLprogram.getUniform("in_matrixProjection"); + this.oGLMatrixView = this.oGLprogram.getUniform("in_matrixView"); this.oGLtexID = this.oGLprogram.getUniform("in_texID"); } } public void print(final Vector2f size) { - printPart(size, new Vector2f(0, 0), new Vector2f(1, 1)); + printPart(size, Vector2f.ZERO, Vector2f.ONE); } /** @@ -226,6 +223,10 @@ public class CompositingImage extends Compositing { final Vector2f sourcePosStart = sourcePosStartIn.multiply(ratio); final Vector2f sourcePosStop = sourcePosStopIn.multiply(ratio); Log.verbose(" openGLSize=" + openGLSize + " usableSize=" + usefullSize + " start=" + sourcePosStart + " stop=" + sourcePosStop); + + this.vboDataColors = new Color[6]; + this.vboDataCoords = new Vector3f[6]; + this.vboDataCoordsTex = new Vector2f[6]; if (this.angle == 0.0f) { Vector3f point = this.position; @@ -276,7 +277,7 @@ public class CompositingImage extends Compositing { final Vector3f limitedSize = new Vector3f(size.x() * 0.5f, size.y() * 0.5f, 0.0f); - Vector3f point = new Vector3f(0, 0, 0); + Vector3f point = Vector3f.ZERO; Vector2f tex = new Vector2f(sourcePosStart.x(), sourcePosStop.y()); diff --git a/src/org/atriasoft/ewol/compositing/CompositingText.java b/src/org/atriasoft/ewol/compositing/CompositingText.java index 3cbec18..7b42c0e 100644 --- a/src/org/atriasoft/ewol/compositing/CompositingText.java +++ b/src/org/atriasoft/ewol/compositing/CompositingText.java @@ -356,7 +356,7 @@ public class CompositingText extends TextBase { fontName = Configs.getConfigFonts().getName(); } Uri fontUri = Configs.getConfigFonts().getFontUri(fontName).clone(); - fontUri.setproperty("size", Integer.toString(fontSize)); + fontUri.setProperty("size", Integer.toString(fontSize)); Log.verbose("plop : " + fontName + " size=" + fontSize + " result :" + fontName); // link to new one this.font = ResourceTexturedFont.create(fontUri); diff --git a/src/org/atriasoft/ewol/widget/Button.java b/src/org/atriasoft/ewol/widget/Button.java index 9f17bd6..d98cf5e 100644 --- a/src/org/atriasoft/ewol/widget/Button.java +++ b/src/org/atriasoft/ewol/widget/Button.java @@ -16,9 +16,9 @@ import org.atriasoft.ewol.event.EventInput; import org.atriasoft.ewol.event.EventTime; import org.atriasoft.ewol.internal.Log; import org.atriasoft.ewol.object.EwolObject; +import org.atriasoft.exml.annotation.XmlAttribute; import org.atriasoft.exml.annotation.XmlManaged; import org.atriasoft.exml.annotation.XmlName; -import org.atriasoft.exml.annotation.XmlProperty; import org.atriasoft.gale.key.KeyStatus; /** @@ -39,13 +39,13 @@ public class Button extends Widget { /// Periodic call handle to remove it when needed protected Connection periodicConnectionHanble = new Connection(); @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "config") @EwolDescription(value = "configuration of the widget") private Uri propertyConfig = new Uri("THEME", "shape/Button.json", "ewol"); @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "value") @EwolDescription(value = "Value display in the entry (decorated text)") private String propertyValue = "Test Text..."; //!< string that must be displayed diff --git a/src/org/atriasoft/ewol/widget/ContainerN.java b/src/org/atriasoft/ewol/widget/ContainerN.java index 8d9da0a..0bb64e0 100644 --- a/src/org/atriasoft/ewol/widget/ContainerN.java +++ b/src/org/atriasoft/ewol/widget/ContainerN.java @@ -16,9 +16,9 @@ import org.atriasoft.ewol.DrawProperty; import org.atriasoft.ewol.annotation.EwolDescription; import org.atriasoft.ewol.internal.Log; import org.atriasoft.ewol.object.EwolObject; +import org.atriasoft.exml.annotation.XmlAttribute; import org.atriasoft.exml.annotation.XmlManaged; import org.atriasoft.exml.annotation.XmlName; -import org.atriasoft.exml.annotation.XmlProperty; import org.atriasoft.exml.model.XmlElement; import org.atriasoft.exml.model.XmlNode; @@ -29,7 +29,7 @@ import org.atriasoft.exml.model.XmlNode; public class ContainerN extends Widget { @XmlManaged - @XmlProperty + @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 diff --git a/src/org/atriasoft/ewol/widget/Entry.java b/src/org/atriasoft/ewol/widget/Entry.java index ecb3499..6286cbf 100644 --- a/src/org/atriasoft/ewol/widget/Entry.java +++ b/src/org/atriasoft/ewol/widget/Entry.java @@ -21,9 +21,9 @@ import org.atriasoft.ewol.event.EventInput; import org.atriasoft.ewol.event.EventTime; import org.atriasoft.ewol.internal.Log; import org.atriasoft.ewol.object.EwolObject; +import org.atriasoft.exml.annotation.XmlAttribute; import org.atriasoft.exml.annotation.XmlManaged; import org.atriasoft.exml.annotation.XmlName; -import org.atriasoft.exml.annotation.XmlProperty; import org.atriasoft.gale.context.ClipBoard; import org.atriasoft.gale.context.ClipboardList; import org.atriasoft.gale.key.KeyKeyboard; @@ -60,36 +60,36 @@ public class Entry extends Widget { /// Periodic call handle to remove it when needed protected Connection periodicConnectionHanble = new Connection(); @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "config") @EwolDescription(value = "configuration of the widget") private Uri propertyConfig = new Uri("THEME", "shape/Entry.json", "ewol"); @XmlManaged - @XmlProperty + @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 - @XmlProperty + @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 - @XmlProperty + @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 - @XmlProperty + @XmlAttribute @XmlName(value = "empty-text") @EwolDescription(value = "Text when nothing is written") private String propertyTextWhenNothing = null; @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "value") @EwolDescription(value = "Value display in the entry (decorated text)") private String propertyValue = "Test Text..."; //!< string that must be displayed diff --git a/src/org/atriasoft/ewol/widget/ImageDisplay.java b/src/org/atriasoft/ewol/widget/ImageDisplay.java index bbae8cc..63905e0 100644 --- a/src/org/atriasoft/ewol/widget/ImageDisplay.java +++ b/src/org/atriasoft/ewol/widget/ImageDisplay.java @@ -18,9 +18,9 @@ import org.atriasoft.ewol.compositing.CompositingImage; import org.atriasoft.ewol.event.EventInput; import org.atriasoft.ewol.internal.Log; import org.atriasoft.ewol.resource.ResourceColorFile; +import org.atriasoft.exml.annotation.XmlAttribute; import org.atriasoft.exml.annotation.XmlManaged; import org.atriasoft.exml.annotation.XmlName; -import org.atriasoft.exml.annotation.XmlProperty; import org.atriasoft.exml.model.XmlElement; import org.atriasoft.gale.key.KeyStatus; @@ -32,46 +32,16 @@ public class ImageDisplay extends Widget { 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 - @XmlManaged - @XmlProperty - @XmlName(value = "border") - @EwolDescription(value = "Border of the image") + protected Dimension propertyBorder = Dimension.ZERO; //!< border to add at the image. - @XmlManaged - @XmlProperty - @XmlName(value = "size") - @EwolDescription(value = "Basic display size of the image") protected Dimension propertyImageSize = Dimension.ZERO; //!< border to add at the image. - @XmlManaged - @XmlProperty - @XmlName(value = "ratio") - @EwolDescription(value = "Keep ratio of the image") protected boolean propertyKeepRatio = true; //!< keep the image ratio between width and hight - @XmlManaged - @XmlProperty - @XmlName(value = "part-start") - @EwolDescription(value = "Start display position in the image") protected Vector2f propertyPosStart = Vector2f.ZERO; //!< position in the image to start the sisplay (when we want not to display all the image) - @XmlManaged - @XmlProperty - @XmlName(value = "part-stop") - @EwolDescription(value = "Start display position in the image") - protected Vector2f propertyPosStop = 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) - @XmlManaged - @XmlProperty - @XmlName(value = "smooth") - @EwolDescription(value = "Smooth display of the image") - protected boolean propertySmooth = true; //!< display is done in the pixed approximation if false - @XmlManaged - @XmlProperty - @XmlName(value = "src") - @EwolDescription(value = "Image source path") + + protected boolean propertySmooth = true; //!< display is done in the pixel approximation if false protected Uri propertySource = null; //!< file name of the image. - @XmlManaged - @XmlProperty - @XmlName(value = "use-theme-color") - @EwolDescription(value = "Use the theme color to display images") protected boolean propertyUseThemeColor = false; //!< Use the themo color management ("THEMECOLOR:///Image.json?lib=ewol") default false @EwolSignal(name = "pressed") @EwolDescription(value = "Image is pressed") @@ -110,34 +80,64 @@ public class ImageDisplay extends Widget { markToRedraw(); } + @XmlManaged + @XmlAttribute + @XmlName(value = "border") + @EwolDescription(value = "Border of the image") public Dimension getPropertyBorder() { return this.propertyBorder; } - + + @XmlManaged + @XmlAttribute + @XmlName(value = "size") + @EwolDescription(value = "Basic display size of the image") public Dimension getPropertyImageSize() { return this.propertyImageSize; } - + + @XmlManaged + @XmlAttribute + @XmlName(value = "part-start") + @EwolDescription(value = "Start display position in the image") public Vector2f getPropertyPosStart() { return this.propertyPosStart; } - + @XmlManaged + @XmlAttribute + @XmlName(value = "part-stop") + @EwolDescription(value = "Start display position in the image") public Vector2f getPropertyPosStop() { return this.propertyPosStop; } - + + @XmlManaged + @XmlAttribute + @XmlName(value = "src") + @EwolDescription(value = "Image source path") public Uri getPropertySource() { return this.propertySource; } - + + @XmlManaged + @XmlAttribute + @XmlName(value = "ratio") + @EwolDescription(value = "Keep ratio of the image") public boolean isPropertyKeepRatio() { return this.propertyKeepRatio; } - + @XmlManaged + @XmlAttribute + @XmlName(value = "smooth") + @EwolDescription(value = "Smooth display of the image") public boolean isPropertySmooth() { return this.propertySmooth; } - + + @XmlManaged + @XmlAttribute + @XmlName(value = "use-theme-color") + @EwolDescription(value = "Use the theme color to display images") public boolean isPropertyUseThemeColor() { return this.propertyUseThemeColor; } @@ -263,6 +263,7 @@ public class ImageDisplay extends Widget { Log.debug("Paint Image at : " + origin + " size=" + imageRealSize); Log.debug("Paint Image :" + this.propertySource + " realsize=" + this.compositing.getRealSize() + " origin=" + origin + " size=" + imageRealSize); Log.debug(" start=" + this.propertyPosStart + " stop=" + this.propertyPosStop); + this.compositing.flush(); } /** @@ -343,7 +344,7 @@ public class ImageDisplay extends Widget { } public void setPropertySource(final Uri propertySource) { - if (this.propertySource.equals(propertySource)) { + if (this.propertySource != null && this.propertySource.equals(propertySource)) { return; } this.propertySource = propertySource; diff --git a/src/org/atriasoft/ewol/widget/Label.java b/src/org/atriasoft/ewol/widget/Label.java index 4270415..9eee268 100644 --- a/src/org/atriasoft/ewol/widget/Label.java +++ b/src/org/atriasoft/ewol/widget/Label.java @@ -19,9 +19,9 @@ import org.atriasoft.ewol.compositing.CompositingText; import org.atriasoft.ewol.event.EventInput; import org.atriasoft.ewol.internal.Log; import org.atriasoft.ewol.resource.ResourceColorFile; +import org.atriasoft.exml.annotation.XmlAttribute; import org.atriasoft.exml.annotation.XmlManaged; import org.atriasoft.exml.annotation.XmlName; -import org.atriasoft.exml.annotation.XmlProperty; import org.atriasoft.exml.model.XmlElement; import org.atriasoft.gale.key.KeyStatus; @@ -30,18 +30,18 @@ public class Label extends Widget { protected int colorDefaultFgText = -1; //!< Default color of the text protected ResourceColorFile colorProperty; //!< theme color property @XmlManaged - @XmlProperty + @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 - @XmlProperty + @XmlAttribute @XmlName(value = "font-size") @EwolDescription(value = "Default font size (0=> system default)") protected int propertyFontSize = 0; //!< default size of the font. @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "value") @EwolDescription(value = "Displayed value string") protected String propertyValue = ""; //!< decorated text to display. diff --git a/src/org/atriasoft/ewol/widget/ProgressBar.java b/src/org/atriasoft/ewol/widget/ProgressBar.java index 513cd8a..120a343 100644 --- a/src/org/atriasoft/ewol/widget/ProgressBar.java +++ b/src/org/atriasoft/ewol/widget/ProgressBar.java @@ -10,32 +10,17 @@ import org.atriasoft.etk.math.Vector2f; import org.atriasoft.etk.math.Vector3f; import org.atriasoft.ewol.annotation.EwolDescription; import org.atriasoft.ewol.compositing.CompositingDrawing; +import org.atriasoft.exml.annotation.XmlAttribute; import org.atriasoft.exml.annotation.XmlManaged; import org.atriasoft.exml.annotation.XmlName; -import org.atriasoft.exml.annotation.XmlProperty; class ProgressBar extends Widget { private static final int DOT_RADIUS = 6; private final CompositingDrawing draw = new CompositingDrawing(); // basic drawing element - @XmlManaged - @XmlProperty - @XmlName(value = "color-off") - @EwolDescription(value = "Color of the false value") + protected Color propertyTextColorBgOff = Color.NONE; - @XmlManaged - @XmlProperty - @XmlName(value = "color-on") - @EwolDescription(value = "Color of the true value") protected Color propertyTextColorBgOn = Color.GREEN; - @XmlManaged - @XmlProperty - @XmlName(value = "color-bg") - @EwolDescription(value = "ackground color") protected Color propertyTextColorFg = Color.BLACK; - @XmlManaged - @XmlProperty - @XmlName(value = "value") - @EwolDescription(value = "Value of the progress bar [0..1]") protected float propertyValue = 0; public ProgressBar() { @@ -48,19 +33,34 @@ 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") + @EwolDescription(value = "Color of the false value") public Color getPropertyTextColorBgOff() { return this.propertyTextColorBgOff; } - + + @XmlManaged + @XmlAttribute + @XmlName(value = "color-on") + @EwolDescription(value = "Color of the true value") public Color getPropertyTextColorBgOn() { return this.propertyTextColorBgOn; } - + + @XmlManaged + @XmlAttribute + @XmlName(value = "color-bg") + @EwolDescription(value = "ackground color") public Color getPropertyTextColorFg() { return this.propertyTextColorFg; } - + + @XmlManaged + @XmlAttribute + @XmlName(value = "value") + @EwolDescription(value = "Value of the progress bar [0..1]") public float getPropertyValue() { return this.propertyValue; } diff --git a/src/org/atriasoft/ewol/widget/Sizer.java b/src/org/atriasoft/ewol/widget/Sizer.java index 2a422d0..4263645 100644 --- a/src/org/atriasoft/ewol/widget/Sizer.java +++ b/src/org/atriasoft/ewol/widget/Sizer.java @@ -13,10 +13,11 @@ import org.atriasoft.etk.math.Vector2f; import org.atriasoft.etk.math.Vector2i; import org.atriasoft.ewol.Gravity; import org.atriasoft.ewol.annotation.EwolDescription; +import org.atriasoft.ewol.annotation.EwolObjectProperty; import org.atriasoft.ewol.internal.Log; +import org.atriasoft.exml.annotation.XmlAttribute; import org.atriasoft.exml.annotation.XmlManaged; import org.atriasoft.exml.annotation.XmlName; -import org.atriasoft.exml.annotation.XmlProperty; public class Sizer extends ContainerN { public enum DisplayMode { @@ -24,17 +25,9 @@ public class Sizer extends ContainerN { modeVert; //!< Horizontal mode } - @XmlManaged - @XmlProperty - @XmlName(value = "border") - @EwolDescription(value = "The sizer border size") - public Dimension propertyBorderSize = new Dimension(Vector2f.ZERO, Distance.PIXEL); //!< Border size needed for all the display + protected Dimension propertyBorderSize = new Dimension(Vector2f.ZERO, Distance.PIXEL); //!< Border size needed for all the display - @XmlManaged - @XmlProperty - @XmlName(value = "mode") - @EwolDescription(value = "The display mode") - public DisplayMode propertyMode = DisplayMode.modeHori; //!< Methode to display the widget list (vert/hory ...) + protected DisplayMode propertyMode = DisplayMode.modeHori; //!< Methode to display the widget list (vert/hory ...) /** * Constructor @@ -87,11 +80,21 @@ 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") + @EwolObjectProperty + @EwolDescription("The sizer border size") public Dimension getPropertyBorderSize() { return this.propertyBorderSize; } - + + @XmlManaged + @XmlAttribute + @XmlName("mode") + @EwolObjectProperty + @EwolDescription("The display mode") public DisplayMode getPropertyMode() { return this.propertyMode; } diff --git a/src/org/atriasoft/ewol/widget/Spacer.java b/src/org/atriasoft/ewol/widget/Spacer.java index b3a6986..94115b2 100644 --- a/src/org/atriasoft/ewol/widget/Spacer.java +++ b/src/org/atriasoft/ewol/widget/Spacer.java @@ -11,9 +11,9 @@ import org.atriasoft.etk.math.Vector2f; import org.atriasoft.etk.math.Vector3f; import org.atriasoft.ewol.annotation.EwolDescription; import org.atriasoft.ewol.compositing.CompositingDrawing; +import org.atriasoft.exml.annotation.XmlAttribute; import org.atriasoft.exml.annotation.XmlManaged; import org.atriasoft.exml.annotation.XmlName; -import org.atriasoft.exml.annotation.XmlProperty; /** * @ingroup ewolWidgetGroup @@ -21,7 +21,7 @@ import org.atriasoft.exml.annotation.XmlProperty; public class Spacer extends Widget { private final CompositingDrawing draw = new CompositingDrawing(); //!< Compositing drawing element @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "color") @EwolDescription(value = "background of the spacer") protected Color propertyColor = Color.GREEN; //!< Background color diff --git a/src/org/atriasoft/ewol/widget/Widget.java b/src/org/atriasoft/ewol/widget/Widget.java index 93764c9..9dc0c7a 100644 --- a/src/org/atriasoft/ewol/widget/Widget.java +++ b/src/org/atriasoft/ewol/widget/Widget.java @@ -31,10 +31,10 @@ import org.atriasoft.ewol.event.EventShortCut; import org.atriasoft.ewol.event.InputSystem; 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.XmlManaged; import org.atriasoft.exml.annotation.XmlName; -import org.atriasoft.exml.annotation.XmlProperty; import org.atriasoft.exml.model.XmlElement; import org.atriasoft.gale.backend3d.OpenGL; import org.atriasoft.gale.context.ClipboardList; @@ -89,43 +89,43 @@ public class Widget extends EwolObject { protected Vector2f origin = new Vector2f(0, 0); //!< internal ... I do not really known how if can use it ... @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "focus") @EwolDescription(value = "enable the widget to have the focus capacity") protected boolean propertyCanFocus = false; //!< the focus can be done on this widget @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "expand") @EwolDescription(value = "Request the widget Expand size while space is available") protected Vector2b propertyExpand = new Vector2b(false, false); //!< the widget will expand if possible @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "fill") @EwolDescription(value = "Fill the widget available size") protected Vector2b propertyFill = new Vector2b(true, true); //!< the widget will fill all the space provided by the parent. @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "gravity") @EwolDescription(value = "Gravity orientation") protected Gravity propertyGravity = Gravity.buttomLeft; //!< Gravity of the widget @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "hide") @EwolDescription(value = "The widget start hided") protected boolean propertyHide = false; //!< hide a widget on the display @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "max-size") @EwolDescription(value = "User maximum size") protected Dimension propertyMaxSize = new Dimension(new Vector2f(999999, 999999), Distance.PIXEL); //!< user define the maximum size of the widget @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "min-size") @EwolDescription(value = "User minimum size") protected Dimension propertyMinSize = new Dimension(new Vector2f(0, 0), Distance.PIXEL); //!< user define the minimum size of the widget diff --git a/src/org/atriasoft/ewol/widget/Windows.java b/src/org/atriasoft/ewol/widget/Windows.java index 7339f74..6e44b21 100644 --- a/src/org/atriasoft/ewol/widget/Windows.java +++ b/src/org/atriasoft/ewol/widget/Windows.java @@ -21,9 +21,9 @@ import org.atriasoft.ewol.context.EwolContext; import org.atriasoft.ewol.internal.Log; import org.atriasoft.ewol.object.EwolObject; import org.atriasoft.ewol.resource.ResourceColorFile; +import org.atriasoft.exml.annotation.XmlAttribute; import org.atriasoft.exml.annotation.XmlManaged; import org.atriasoft.exml.annotation.XmlName; -import org.atriasoft.exml.annotation.XmlProperty; import org.atriasoft.gale.backend3d.OpenGL; /** @@ -36,12 +36,12 @@ public class Windows extends Widget { protected List popUpWidgetList = new ArrayList(); @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "file-color") @EwolDescription(value = "File color of the Windows") public Uri propertyColorConfiguration = new Uri("THEME", "color/Windows.json", "ewol"); //!< Configuration file of the windows theme @XmlManaged - @XmlProperty + @XmlAttribute @XmlName(value = "title") @EwolDescription(value = "Title of the windows") public String propertyTitle = "No title"; //!< Current title of the windows