Adapt Scilab to new SciRenderer API (merge of Sprite and texture objects). 39/6739/8
Pierre LANDO [Wed, 21 Mar 2012 16:34:23 +0000 (17:34 +0100)]
Change-Id: I558cda29f024ea89a3a6295a9c159ca30062e550

33 files changed:
scilab/modules/graphic_objects/includes/ColorComputer.hxx
scilab/modules/graphic_objects/includes/DataLoader.hxx
scilab/modules/graphic_objects/includes/MatPlotDecomposer.hxx
scilab/modules/graphic_objects/src/cpp/ColorComputer.cpp
scilab/modules/graphic_objects/src/cpp/DataLoader.cpp
scilab/modules/graphic_objects/src/cpp/MatPlotDecomposer.cpp
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/DataLoader.java
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/DataLoaderJNI.java
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/MainDataLoader.java
scilab/modules/graphic_objects/src/jni/DataLoader.i
scilab/modules/graphic_objects/src/jni/DataLoader_wrap.c
scilab/modules/graphic_objects/src/jni/ScilabNativeView_wrap.c
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/AxisDrawer.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/DrawerVisitor.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/FecDrawer.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/ScilabTextureManager.java [moved from scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/TextureManager.java with 89% similarity]
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/axes/ruler/AxesRulerDrawer.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/axes/ruler/AxesRulerSpriteFactory.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/axes/ruler/RulerDrawerManager.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/contouredObject/ContouredObjectDrawer.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/label/AxisLabelPositioner.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/label/LabelManager.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/label/LabelPositioner.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/label/LabelSpriteDrawer.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/label/TitlePositioner.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/legend/LegendDrawer.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/legend/LegendSpriteDrawer.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/mark/MarkSpriteFactory.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/mark/MarkSpriteManager.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/text/TextManager.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/text/TextSpriteDrawer.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/util/FormattedTextSpriteDrawer.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/util/TextObjectSpriteDrawer.java

index 931f5fd..489c071 100644 (file)
@@ -71,6 +71,19 @@ public :
     static void getDirectColor(double s, double* colormap, int colormapSize, float* returnedColor);
 
     /**
+     * Outputs an RGB color directly mapped to a scalar value s.
+     * The output color is looked up in an RGB colormap, using s as a direct index.
+     * White and black are respectively output when s <= -3 and -3 < s < 0 ; s is also
+     * clamped to the colormap's upper bound (colormapSize-1). If s is a Nan value, black is also
+     * output.
+     * @param[in] the scalar value used as an index.
+     * @param[in] a pointer to the colormap used.
+     * @param[in] the colormap's size.
+     * @param[out] a pointer to the array into which the resulting color is output (its R, G, B components are written consecutively).
+     */
+    static void getDirectByteColor(double s, double* colormap, int colormapSize, unsigned char* returnedColor);
+
+    /**
      * Returns a colormap index from a scalar value s.
      * Indices corresponding to white and black are respectively output when -4 < s <= -3 and -3 < s < 0;
      * if s <= -4, the lower colormap index is returned (0).
index c711341..db006d1 100644 (file)
 #ifndef DATA_LOADER_HXX
 #define DATA_LOADER_HXX
 
+#ifdef __cplusplus
 extern "C"
 {
+#endif
 
   /**
    * Return the texture width for the given object.
@@ -37,7 +39,7 @@ extern "C"
    * @param[in] the buffer length in number of elements.
    * @return the length of writed data.
    */
-  int fillTextureData(char *id, float* buffer, int bufferLength);
+  int fillTextureData(char *id, unsigned char* buffer, int bufferLength);
 
   /**
    * Fill the given buffer with sub-texture data.
@@ -50,7 +52,7 @@ extern "C"
    * @param[in] the length of the sub-texture.
    * @return the length of writed data.
    */
-  int fillSubTextureData(char* id, float* buffer, int bufferLength, int x, int y, int width, int height);
+  int fillSubTextureData(char* id, unsigned char* buffer, int bufferLength, int x, int y, int width, int height);
 
   /**
    * Return the number of data elements for the given object.
@@ -70,7 +72,7 @@ extern "C"
    * @param[in] the conversion translation factor to apply to data.
    * @param[in] the bit mask specifying whether logarithmic coordinates are used.
    */
-  void fillVertices(char* id, float* BUFF, int bufferLength, int elementsSize, int coordinateMask, double* scale, double* translation, int logMask);
+  void fillVertices(char* id, float* buffer, int bufferLength, int elementsSize, int coordinateMask, double scale[], double translation[], int logMask);
 
   /**
    * Fill the given buffer with color data from the given object.
@@ -79,7 +81,7 @@ extern "C"
    * @param[in] the buffer length in number of elements.
    * @param[in] the number of coordinate taken by one element in the buffer (3 for RGB, 4 for RGBA).
    */
-  void fillColors(char* id, float* BUFF, int bufferLength, int elementsSize);
+  void fillColors(char* id, float* buffer, int bufferLength, int elementsSize);
 
   /**
    * Fill the given buffer with texture coordinates data from the given object.
@@ -104,7 +106,7 @@ extern "C"
    * @param[in] the bit mask specifying whether logarithmic coordinates are used.
    * @return the number of indices actually written.
    */
-  int fillIndices(char* id, int* BUFF, int bufferLength, int logMask);
+  int fillIndices(char* id, int* buffer, int bufferLength, int logMask);
 
   /**
    * Return the number of indices for the wire of the given object.
@@ -121,7 +123,7 @@ extern "C"
    * @param[in] the bit mask specifying whether logarithmic coordinates are used.
    * @return the number of indices actually written.
    */
-  int fillWireIndices(char* id, int* BUFF, int bufferLength, int logMask);
+  int fillWireIndices(char* id, int* buffer, int bufferLength, int logMask);
 
   /**
    * Return the number of mark indices of the given object.
@@ -137,9 +139,10 @@ extern "C"
    * @param[in] the buffer length.
    * @return the number of indices actually written.
    */
-  int fillMarkIndices(char* id, int* BUFF, int bufferLength);
+  int fillMarkIndices(char* id, int* buffer, int bufferLength);
 
-}
+#ifdef __cplusplus
+} //extern "C"
+#endif
 
 #endif /* DATA_LOADER_HXX */
-
index bcff709..cf9efba 100644 (file)
@@ -18,8 +18,8 @@ class MatPlotDecomposer
 public:
   static int getTextureWidth(char* id);
   static int getTextureHeight(char* id);
-  static int fillTextureData(char* id, float* buffer, int bufferLength);
-  static int fillTextureData(char* id, float* buffer, int bufferLength, int x, int y, int width, int height);
+  static int fillTextureData(char* id, unsigned char* buffer, int bufferLength);
+  static int fillTextureData(char* id, unsigned char* buffer, int bufferLength, int x, int y, int width, int height);
 };
 
 #endif
index 6e1e46a..e32927e 100644 (file)
@@ -183,6 +183,16 @@ double ColorComputer::getDirectIndex(double s, int colormapSize)
     return index;
 }
 
+void ColorComputer::getDirectByteColor(double s, double* colormap, int colormapSize, unsigned char* returnedColor)
+{
+  float color[3];
+  getDirectColor(s, colormap, colormapSize, color);
+
+  returnedColor[0] = color[0] * 255;
+  returnedColor[1] = color[1] * 255;
+  returnedColor[2] = color[2] * 255;
+}
+
 double ColorComputer::getClampedDirectIndex(double s, int colormapSize)
 {
     double index = s;
index dab2029..471b539 100644 (file)
@@ -60,7 +60,7 @@ int getTextureHeight(char* id)
   }
 }
 
-int fillTextureData(char* id, float* buffer, int bufferLength)
+int fillTextureData(char* id, unsigned char* buffer, int bufferLength)
 {
   char* type;
   getGraphicObjectProperty(id, __GO_TYPE__, jni_string, (void**) &type);
@@ -74,7 +74,7 @@ int fillTextureData(char* id, float* buffer, int bufferLength)
   }
 }
 
-int fillSubTextureData(char* id, float* buffer, int bufferLength, int x, int y, int width, int height)
+int fillSubTextureData(char* id, unsigned char* buffer, int bufferLength, int x, int y, int width, int height)
 {
   char* type;
   getGraphicObjectProperty(id, __GO_TYPE__, jni_string, (void**) &type);
index bdd829b..6dc5408 100644 (file)
@@ -39,7 +39,7 @@ int MatPlotDecomposer::getTextureHeight(char* id)
 }
 
 
-int MatPlotDecomposer::fillTextureData(char* id, float* buffer, int bufferLength)
+int MatPlotDecomposer::fillTextureData(char* id, unsigned char* buffer, int bufferLength)
 {
   double* value;
   getGraphicObjectProperty(id, __GO_DATA_MODEL_Z__, jni_double_vector, (void**) &value);
@@ -62,8 +62,8 @@ int MatPlotDecomposer::fillTextureData(char* id, float* buffer, int bufferLength
     {
       for (int j = 0 ; j < textureHeight ; j++)
       {
-        ColorComputer::getDirectColor(value[j + i * textureHeight] - 1, colormap, colormapSize, &buffer[4 * (i + j * textureWidth)]);
-        buffer[4 * (i + j * textureWidth) + 3] = 1;
+        ColorComputer::getDirectByteColor(value[j + i * textureHeight] - 1, colormap, colormapSize, &buffer[4 * (i + j * textureWidth)]);
+        buffer[4 * (i + j * textureWidth) + 3] = 255;
       }
     }
 
@@ -76,7 +76,7 @@ int MatPlotDecomposer::fillTextureData(char* id, float* buffer, int bufferLength
 }
 
 
-int MatPlotDecomposer::fillTextureData(char* id, float* buffer, int bufferLength, int x, int y, int width, int height)
+int MatPlotDecomposer::fillTextureData(char* id, unsigned char* buffer, int bufferLength, int x, int y, int width, int height)
 {
   double* value;
   getGraphicObjectProperty(id, __GO_DATA_MODEL_Z__, jni_double_vector, (void**) &value);
@@ -95,8 +95,8 @@ int MatPlotDecomposer::fillTextureData(char* id, float* buffer, int bufferLength
     {
       for (int i = x ; i < x + width ; i++)
       {
-        ColorComputer::getDirectColor(value[j + i * textureHeight] - 1, colormap, colormapSize, &buffer[k]);
-        buffer[k + 3] = 1;
+        ColorComputer::getDirectByteColor(value[j + i * textureHeight] - 1, colormap, colormapSize, &buffer[k]);
+        buffer[k + 3] = 255;
         k += 4;
       }
     }
index e32e8e1..70b883a 100644 (file)
@@ -17,14 +17,14 @@ public class DataLoader {
     return DataLoaderJNI.getTextureHeight(id);
   }
 
-  public static int fillTextureData(String id, java.nio.FloatBuffer buffer, int bufferLength) {
+  public static int fillTextureData(String id, java.nio.ByteBuffer buffer, int bufferLength) {
     assert buffer.isDirect() : "Buffer must be allocated direct.";
     {
       return DataLoaderJNI.fillTextureData(id, buffer, bufferLength);
     }
   }
 
-  public static int fillSubTextureData(String id, java.nio.FloatBuffer buffer, int bufferLength, int x, int y, int width, int height) {
+  public static int fillSubTextureData(String id, java.nio.ByteBuffer buffer, int bufferLength, int x, int y, int width, int height) {
     assert buffer.isDirect() : "Buffer must be allocated direct.";
     {
       return DataLoaderJNI.fillSubTextureData(id, buffer, bufferLength, x, y, width, height);
@@ -60,10 +60,10 @@ public class DataLoader {
     return DataLoaderJNI.getIndicesSize(id);
   }
 
-  public static int fillIndices(String id, java.nio.IntBuffer BUFF, int bufferLength, int logMask) {
-    assert BUFF.isDirect() : "Buffer must be allocated direct.";
+  public static int fillIndices(String id, java.nio.IntBuffer buffer, int bufferLength, int logMask) {
+    assert buffer.isDirect() : "Buffer must be allocated direct.";
     {
-      return DataLoaderJNI.fillIndices(id, BUFF, bufferLength, logMask);
+      return DataLoaderJNI.fillIndices(id, buffer, bufferLength, logMask);
     }
   }
 
@@ -71,10 +71,10 @@ public class DataLoader {
     return DataLoaderJNI.getWireIndicesSize(id);
   }
 
-  public static int fillWireIndices(String id, java.nio.IntBuffer BUFF, int bufferLength, int logMask) {
-    assert BUFF.isDirect() : "Buffer must be allocated direct.";
+  public static int fillWireIndices(String id, java.nio.IntBuffer buffer, int bufferLength, int logMask) {
+    assert buffer.isDirect() : "Buffer must be allocated direct.";
     {
-      return DataLoaderJNI.fillWireIndices(id, BUFF, bufferLength, logMask);
+      return DataLoaderJNI.fillWireIndices(id, buffer, bufferLength, logMask);
     }
   }
 
@@ -82,10 +82,10 @@ public class DataLoader {
     return DataLoaderJNI.getMarkIndicesSize(id);
   }
 
-  public static int fillMarkIndices(String id, java.nio.IntBuffer BUFF, int bufferLength) {
-    assert BUFF.isDirect() : "Buffer must be allocated direct.";
+  public static int fillMarkIndices(String id, java.nio.IntBuffer buffer, int bufferLength) {
+    assert buffer.isDirect() : "Buffer must be allocated direct.";
     {
-      return DataLoaderJNI.fillMarkIndices(id, BUFF, bufferLength);
+      return DataLoaderJNI.fillMarkIndices(id, buffer, bufferLength);
     }
   }
 
index 08e4475..d5677d0 100644 (file)
@@ -21,8 +21,8 @@ class DataLoaderJNI {
 
   public final static native int getTextureWidth(String jarg1);
   public final static native int getTextureHeight(String jarg1);
-  public final static native int fillTextureData(String jarg1, java.nio.FloatBuffer jarg2, int jarg3);
-  public final static native int fillSubTextureData(String jarg1, java.nio.FloatBuffer jarg2, int jarg3, int jarg4, int jarg5, int jarg6, int jarg7);
+  public final static native int fillTextureData(String jarg1, java.nio.ByteBuffer jarg2, int jarg3);
+  public final static native int fillSubTextureData(String jarg1, java.nio.ByteBuffer jarg2, int jarg3, int jarg4, int jarg5, int jarg6, int jarg7);
   public final static native int getDataSize(String jarg1);
   public final static native void fillVertices(String jarg1, java.nio.FloatBuffer jarg2, int jarg3, int jarg4, int jarg5, double[] jarg6, double[] jarg7, int jarg8);
   public final static native void fillColors(String jarg1, java.nio.FloatBuffer jarg2, int jarg3, int jarg4);
index 7d38950..ff7764c 100644 (file)
@@ -17,6 +17,7 @@ import org.scilab.modules.graphic_objects.graphicController.GraphicController;
 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
 import org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties;
 
+import java.nio.ByteBuffer;
 import java.nio.FloatBuffer;
 import java.nio.IntBuffer;
 import java.util.Arrays;
@@ -65,18 +66,19 @@ public class MainDataLoader {
         DataLoader.fillTextureCoordinates(id, buffer, bufferLength);
     }
 
-    public static void fillTextureData(String id, FloatBuffer buffer, int bufferLength) {
+    public static void fillTextureData(String id, ByteBuffer buffer, int bufferLength) {
         DataLoader.fillTextureData(id, buffer, bufferLength);
     }
 
-    public static void fillTextureData(String identifier, FloatBuffer buffer, int bufferLength, int x, int y, int width, int height) {
+    public static void fillTextureData(String identifier, ByteBuffer buffer, int bufferLength, int x, int y, int width, int height) {
         DataLoader.fillSubTextureData(identifier, buffer, bufferLength, x, y, width, height);
     }
 
     /**
      * Returns the number of data elements for the given object.
-     * @param the id of the given object.
+     * @param id id of the given object.
      * @return the number of data elements.
+     * @throws ObjectRemovedException if the object no longer exist.
      */
     public static int getDataSize(String id) throws ObjectRemovedException {
             String type = (String) GraphicController.getController().getProperty(id, GraphicObjectProperties.__GO_TYPE__);
@@ -94,13 +96,14 @@ public class MainDataLoader {
 
     /**
      * Fills the given buffer with vertex data from the given object.
-     * @param the id of the given object.
-     * @param the buffer to fill.
-     * @param the number of coordinates taken by one element in the buffer.
-     * @param the bit mask specifying which coordinates are filled (1 for X, 2 for Y, 4 for Z).
-     * @param the conversion scale factor to apply to data.
-     * @param the conversion translation value to apply to data.
-     * @param the bit mask specifying whether logarithmic coordinates are used.
+     * @param id id of the given object.
+     * @param buffer buffer to fill.
+     * @param elementsSize number of coordinates taken by one element in the buffer.
+     * @param coordinateMask bit mask specifying which coordinates are filled (1 for X, 2 for Y, 4 for Z).
+     * @param scale conversion scale factor to apply to data.
+     * @param translation conversion translation value to apply to data.
+     * @param logMask bit mask specifying whether logarithmic coordinates are used.
+     * @throws ObjectRemovedException if the object no longer exist.
      */
     public static void fillVertices(String id, FloatBuffer buffer, int elementsSize,
             int coordinateMask, double[] scale, double[] translation, int logMask) throws ObjectRemovedException {
@@ -119,9 +122,10 @@ public class MainDataLoader {
 
     /**
      * Fills the given buffer with color data from the given object.
-     * @param the id of the given object.
-     * @param the buffer to fill.
-     * @param the number of components taken by one element in the buffer (3 or 4).
+     * @param id id of the given object.
+     * @param buffer buffer to fill.
+     * @param elementsSize number of components taken by one element in the buffer (3 or 4).
+     * @throws ObjectRemovedException if the object no longer exist.
      */
     public static void fillColors(String id, FloatBuffer buffer, int elementsSize) throws ObjectRemovedException {
             String type = (String) GraphicController.getController().getProperty(id, GraphicObjectProperties.__GO_TYPE__);
@@ -139,8 +143,9 @@ public class MainDataLoader {
 
     /**
      * Returns the number of indices for the given object.
-     * @param the id of the given object.
+     * @param id id of the given object.
      * @return the object's number of indices.
+     * @throws ObjectRemovedException if the object no longer exist.
      */
     public static int getIndicesSize(String id) throws ObjectRemovedException {
             String type = (String) GraphicController.getController().getProperty(id, GraphicObjectProperties.__GO_TYPE__);
@@ -158,10 +163,11 @@ public class MainDataLoader {
 
     /**
      * Fills the given buffer with indices data of the given object.
-     * @param the id of the given object.
-     * @param the buffer to fill.
-     * @param the bit mask specifying whether logarithmic coordinates are used.
+     * @param id id of the given object.
+     * @param buffer buffer to fill.
+     * @param logMask bit mask specifying whether logarithmic coordinates are used.
      * @return the number of indices actually written.
+     * @throws ObjectRemovedException if the object no longer exist.
      */
     public static int fillIndices(String id, IntBuffer buffer, int logMask) throws ObjectRemovedException {
             String type = (String) GraphicController.getController().getProperty(id, GraphicObjectProperties.__GO_TYPE__);
@@ -178,9 +184,10 @@ public class MainDataLoader {
     }
 
     /**
-     * Returns the number of wireframe indices of the given object.
-     * @param the id of the given object.
+     * Returns the number of wire-frame indices of the given object.
+     * @param id id of the given object.
      * @return the object's number of indices.
+     * @throws ObjectRemovedException if the object no longer exist.
      */
     public static int getWireIndicesSize(String id) throws ObjectRemovedException {
             String type = (String) GraphicController.getController().getProperty(id, GraphicObjectProperties.__GO_TYPE__);
@@ -198,11 +205,12 @@ public class MainDataLoader {
     }
 
     /**
-     * Fills the given buffer with wireframe index data of the given object.
-     * @param the id of the given object.
-     * @param the buffer to fill.
-     * @param the bit mask specifying whether logarithmic coordinates are used.
+     * Fills the given buffer with wire-frame index data of the given object.
+     * @param id id of the given object.
+     * @param buffer buffer to fill.
+     * @param logMask bit mask specifying whether logarithmic coordinates are used.
      * @return the number of indices actually written.
+     * @throws ObjectRemovedException if the object no longer exist.
      */
     public static int fillWireIndices(String id, IntBuffer buffer, int logMask) throws ObjectRemovedException {
             String type = (String) GraphicController.getController().getProperty(id, GraphicObjectProperties.__GO_TYPE__);
@@ -221,7 +229,7 @@ public class MainDataLoader {
     /**
      * Returns the number of mark indices of the given object.
      * To implement.
-     * @param the id of the given object.
+     * @param id id of the given object.
      * @return the number of mark indices.
      */
     public static int getMarkIndicesSize(String id) {
@@ -231,8 +239,8 @@ public class MainDataLoader {
     /**
      * Fills the given buffer with mark index data of the given object.
      * To implement.
-     * @param the id of the given object.
-     * @param the buffer to fill.
+     * @param id id of the given object.
+     * @param buffer buffer to fill.
      * @return the number of indices actually written.
      */
     public static int fillMarkIndices(String id, IntBuffer buffer) {
index 3076af2..b35f9d6 100644 (file)
@@ -48,6 +48,7 @@ NIO_BUFFER_TYPEMAP(long long, BUFF, java.nio.LongBuffer);
 NIO_BUFFER_TYPEMAP(double, BUFF, java.nio.DoubleBuffer);
 */
 NIO_BUFFER_TYPEMAP(int, BUFF, java.nio.IntBuffer);
+NIO_BUFFER_TYPEMAP(unsigned char, BUFF, java.nio.ByteBuffer);
 NIO_BUFFER_TYPEMAP(float, BUFF, java.nio.FloatBuffer);
 #undef NIO_BUFFER_TYPEMAP
 
@@ -62,26 +63,13 @@ NIO_BUFFER_TYPEMAP(float, BUFF, java.nio.FloatBuffer);
   }
 %}
 
-%apply float *BUFF {float *buffer};
-%apply int   *BUFF {int   *buffer};
+%apply int* BUFF {int* buffer};
+%apply unsigned char* BUFF {unsigned char* buffer};
+%apply float* BUFF {float* buffer};
 
-%inline %{
-    extern int getTextureWidth(char* id);
-    extern int getTextureHeight(char* id);
-    extern int fillTextureData(char* id, float* buffer, int bufferLength);
-    extern int fillSubTextureData(char* id, float* buffer, int bufferLength, int x, int y, int width, int height);
+%include "../../includes/DataLoader.hxx"
 
-    extern int getDataSize(char* id);
-    extern void fillVertices(char* id, float* buffer, int bufferLength, int elementsSize, int coordinateMask, double scale[], double translation[], int logMask);
-    extern void fillColors(char* id, float* buffer, int bufferLength, int elementsSize);
-    extern void fillTextureCoordinates(char* id, float* buffer, int bufferLength);
-    
-    extern int getIndicesSize(char* id);    
-    extern int fillIndices(char* id, int* BUFF, int bufferLength, int logMask);
-    
-    extern int getWireIndicesSize(char* id);    
-    extern int fillWireIndices(char* id, int* BUFF, int bufferLength, int logMask);
-
-    extern int getMarkIndicesSize(char* id);
-    extern int fillMarkIndices(char* id, int* BUFF, int bufferLength);
+%inline
+%{
+  #include "DataLoader.hxx"
 %}
index f8fc3a2..fa4f36e 100644 (file)
@@ -757,24 +757,7 @@ jdoubleArray SWIG_JavaArrayOutDouble (JNIEnv *jenv, double *result, jsize sz) {
 #endif
 
 
-    extern int getTextureWidth(char* id);
-    extern int getTextureHeight(char* id);
-    extern int fillTextureData(char* id, float* buffer, int bufferLength);
-    extern int fillSubTextureData(char* id, float* buffer, int bufferLength, int x, int y, int width, int height);
-
-    extern int getDataSize(char* id);
-    extern void fillVertices(char* id, float* buffer, int bufferLength, int elementsSize, int coordinateMask, double scale[], double translation[], int logMask);
-    extern void fillColors(char* id, float* buffer, int bufferLength, int elementsSize);
-    extern void fillTextureCoordinates(char* id, float* buffer, int bufferLength);
-    
-    extern int getIndicesSize(char* id);    
-    extern int fillIndices(char* id, int* BUFF, int bufferLength, int logMask);
-    
-    extern int getWireIndicesSize(char* id);    
-    extern int fillWireIndices(char* id, int* BUFF, int bufferLength, int logMask);
-
-    extern int getMarkIndicesSize(char* id);
-    extern int fillMarkIndices(char* id, int* BUFF, int bufferLength);
+  #include "DataLoader.hxx"
 
 
 #ifdef __cplusplus
@@ -822,7 +805,7 @@ SWIGEXPORT jint JNICALL Java_org_scilab_modules_graphic_1objects_DataLoaderJNI_g
 SWIGEXPORT jint JNICALL Java_org_scilab_modules_graphic_1objects_DataLoaderJNI_fillTextureData(JNIEnv *jenv, jclass jcls, jstring jarg1, jobject jarg2, jint jarg3) {
   jint jresult = 0 ;
   char *arg1 = (char *) 0 ;
-  float *arg2 = (float *) 0 ;
+  unsigned char *arg2 = (unsigned char *) 0 ;
   int arg3 ;
   int result;
   
@@ -850,7 +833,7 @@ SWIGEXPORT jint JNICALL Java_org_scilab_modules_graphic_1objects_DataLoaderJNI_f
 SWIGEXPORT jint JNICALL Java_org_scilab_modules_graphic_1objects_DataLoaderJNI_fillSubTextureData(JNIEnv *jenv, jclass jcls, jstring jarg1, jobject jarg2, jint jarg3, jint jarg4, jint jarg5, jint jarg6, jint jarg7) {
   jint jresult = 0 ;
   char *arg1 = (char *) 0 ;
-  float *arg2 = (float *) 0 ;
+  unsigned char *arg2 = (unsigned char *) 0 ;
   int arg3 ;
   int arg4 ;
   int arg5 ;
index 00f7c78..8a71af5 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 2.0.4
+ * Version 1.3.40
  * 
  * This file is not intended to be easily readable and contains a number of 
  * coding conventions designed to improve portability and efficiency. Do not make
index fed9584..6eb4ba6 100644 (file)
@@ -17,8 +17,8 @@ import org.scilab.forge.scirenderer.ruler.RulerDrawer;
 import org.scilab.forge.scirenderer.ruler.RulerSpriteFactory;
 import org.scilab.forge.scirenderer.ruler.graduations.AbstractGraduations;
 import org.scilab.forge.scirenderer.ruler.graduations.Graduations;
-import org.scilab.forge.scirenderer.sprite.Sprite;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
+import org.scilab.forge.scirenderer.texture.Texture;
+import org.scilab.forge.scirenderer.texture.TextureManager;
 import org.scilab.forge.scirenderer.tranformations.Vector3d;
 import org.scilab.modules.graphic_objects.axis.Axis;
 import org.scilab.modules.graphic_objects.textObject.FormattedText;
@@ -96,7 +96,7 @@ public class AxisDrawer {
 
         DrawingTools drawingTools = drawerVisitor.getDrawingTools();
 
-        RulerDrawer rulerDrawer = new RulerDrawer(drawerVisitor.getCanvas().getSpriteManager());
+        RulerDrawer rulerDrawer = new RulerDrawer(drawerVisitor.getCanvas().getTextureManager());
         rulerDrawer.setSpriteFactory(new AxisSpriteFactory(axis, min, max));
         rulerDrawer.draw(drawingTools, rulerModel);
 
@@ -321,18 +321,18 @@ public class AxisDrawer {
         }
 
         @Override
-        public Sprite create(double value, DecimalFormat adaptedFormat, SpriteManager spriteManager) {
+        public Texture create(double value, DecimalFormat adaptedFormat, TextureManager spriteManager) {
             String label = getLabel(value);
             if (label != null) {
                 FormattedText formattedText = new FormattedText();
                 formattedText.setFont(axis.getFont());
                 formattedText.setText(getLabel(value));
 
-                FormattedTextSpriteDrawer spriteDrawer = new FormattedTextSpriteDrawer(drawerVisitor.getColorMap(), spriteManager, formattedText);
-                Sprite sprite = spriteManager.createSprite(spriteDrawer.getSpriteSize());
-                sprite.setDrawer(spriteDrawer);
-            
-                return sprite;
+                FormattedTextSpriteDrawer textureDrawer = new FormattedTextSpriteDrawer(drawerVisitor.getColorMap(), formattedText);
+                Texture texture = spriteManager.createTexture();
+                texture.setDrawer(textureDrawer);
+
+                return texture;
             } else {
                 return null;
             }
index ec8c8a1..d2e18c4 100644 (file)
 
 package org.scilab.modules.renderer.JoGLView;
 
-import com.sun.opengl.util.BufferUtil;
 import org.scilab.forge.scirenderer.Canvas;
 import org.scilab.forge.scirenderer.Drawer;
 import org.scilab.forge.scirenderer.DrawingTools;
 import org.scilab.forge.scirenderer.SciRendererException;
 import org.scilab.forge.scirenderer.buffers.ElementsBuffer;
+import org.scilab.forge.scirenderer.data.AbstractDataProvider;
 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
 import org.scilab.forge.scirenderer.shapes.geometry.DefaultGeometry;
 import org.scilab.forge.scirenderer.shapes.geometry.Geometry;
-import org.scilab.forge.scirenderer.sprite.Sprite;
-import org.scilab.forge.scirenderer.sprite.SpriteAnchorPosition;
-import org.scilab.forge.scirenderer.texture.AbstractDataProvider;
+import org.scilab.forge.scirenderer.texture.AnchorPosition;
 import org.scilab.forge.scirenderer.texture.Texture;
 import org.scilab.forge.scirenderer.texture.TextureDataProvider;
 import org.scilab.forge.scirenderer.tranformations.Transformation;
@@ -68,8 +66,7 @@ import org.scilab.modules.renderer.utils.textRendering.FontManager;
 
 import java.awt.Component;
 import java.awt.Dimension;
-import java.nio.Buffer;
-import java.nio.FloatBuffer;
+import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -122,7 +119,7 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
 
     private final ColorMapTextureDataProvider colorMapTextureDataProvider;
 
-    private final TextureManager textureManager;
+    private final ScilabTextureManager textureManager;
     private final MarkSpriteManager markManager;
     private final LabelManager labelManager;
     private final DataManager dataManager;
@@ -158,15 +155,15 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
 
         this.interactionManager = new InteractionManager(this);
         this.dataManager = new DataManager(canvas);
-        this.textureManager = new TextureManager(this);
-        this.markManager = new MarkSpriteManager(canvas.getSpriteManager());
-        this.textManager = new TextManager(canvas.getSpriteManager());
-        this.labelManager = new LabelManager(canvas.getSpriteManager());
+        this.textureManager = new ScilabTextureManager(this);
+        this.markManager = new MarkSpriteManager(canvas.getTextureManager());
+        this.textManager = new TextManager(canvas.getTextureManager());
+        this.labelManager = new LabelManager(canvas.getTextureManager());
         this.axesDrawer = new AxesDrawer(this);
         this.axisDrawer = new AxisDrawer(this);
         this.arrowDrawer = new ArrowDrawer(this);
         this.contouredObjectDrawer = new ContouredObjectDrawer(this, this.dataManager, this.markManager);
-        this.legendDrawer = new LegendDrawer(this, canvas.getSpriteManager(), this.markManager);
+        this.legendDrawer = new LegendDrawer(this);
         this.fecDrawer = new FecDrawer(this);
         this.colorMapTextureDataProvider = new ColorMapTextureDataProvider();
 
@@ -203,6 +200,14 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
     }
 
     /**
+     * Mark manager getter.
+     * @return the mark manager.
+     */
+    public MarkSpriteManager getMarkManager() {
+        return markManager;
+    }
+
+    /**
      * @return the AxesDrawer
      */
     public AxesDrawer getAxesDrawer() {
@@ -403,7 +408,11 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
     @Override
     public void visit(Label label) {
         if (label.getVisible()) {
-            labelManager.draw(drawingTools, colorMap, label, axesDrawer);
+            try {
+                labelManager.draw(drawingTools, colorMap, label, axesDrawer);
+            } catch (Exception e) {
+                System.err.println("A '" + label.getType() + "' is not drawable because: '" + e.getMessage() + "'");
+            }
         }
     }
 
@@ -460,9 +469,9 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
                 }
 
                 if (polyline.getMarkMode()) {
-                    Sprite sprite = markManager.getMarkSprite(polyline, colorMap);
+                    Texture sprite = markManager.getMarkSprite(polyline, colorMap);
                     ElementsBuffer positions = dataManager.getVertexBuffer(polyline.getIdentifier());
-                    drawingTools.draw(sprite, SpriteAnchorPosition.CENTER, positions);
+                    drawingTools.draw(sprite, AnchorPosition.CENTER, positions);
                 }
 
                 axesDrawer.disableClipping(polyline.getClipProperty());
@@ -543,9 +552,9 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
                 }
 
                 if (fac3d.getMarkMode()) {
-                    Sprite sprite = markManager.getMarkSprite(fac3d, colorMap);
+                    Texture texture = markManager.getMarkSprite(fac3d, colorMap);
                     ElementsBuffer positions = dataManager.getVertexBuffer(fac3d.getIdentifier());
-                    drawingTools.draw(sprite, SpriteAnchorPosition.CENTER, positions);
+                    drawingTools.draw(texture, AnchorPosition.CENTER, positions);
                 }
                 axesDrawer.disableClipping(fac3d.getClipProperty());
             } catch (Exception e) {
@@ -611,9 +620,9 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
                 }
 
                 if (plot3d.getMarkMode()) {
-                    Sprite sprite = markManager.getMarkSprite(plot3d, colorMap);
+                    Texture texture = markManager.getMarkSprite(plot3d, colorMap);
                     ElementsBuffer positions = dataManager.getVertexBuffer(plot3d.getIdentifier());
-                    drawingTools.draw(sprite, SpriteAnchorPosition.CENTER, positions);
+                    drawingTools.draw(texture, AnchorPosition.CENTER, positions);
                 }
 
                 axesDrawer.disableClipping(plot3d.getClipProperty());
@@ -627,15 +636,13 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
 
     @Override
     public void visit(Text text) {
-        synchronized (text) {
-            if (text.getVisible()) {
-                try {
-                    axesDrawer.enableClipping(currentAxes, text.getClipProperty());
-                    textManager.draw(drawingTools, colorMap, text, axesDrawer);
-                    axesDrawer.disableClipping(text.getClipProperty());
-                } catch (Exception e) {
-                    System.err.println("A '" + text.getType() + "' is not drawable because: '" + e.getMessage() + "'");
-                }
+        if (text.getVisible()) {
+            try {
+                axesDrawer.enableClipping(currentAxes, text.getClipProperty());
+                textManager.draw(drawingTools, colorMap, text);
+                axesDrawer.disableClipping(text.getClipProperty());
+            } catch (SciRendererException e) {
+                System.err.println("A '" + text.getType() + "' is not drawable because: '" + e.getMessage() + "'");
             }
         }
     }
@@ -717,9 +724,9 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
                  * in order to obtain the latter's Mark (all arrows are supposed to have the same contour properties for now).
                  */
                 if (segs.getMarkMode()) {
-                    Sprite sprite = markManager.getMarkSprite(segs.getIdentifier(), segs.getArrows().get(0).getMark(), colorMap);
+                    Texture texture = markManager.getMarkSprite(segs.getIdentifier(), segs.getArrows().get(0).getMark(), colorMap);
                     ElementsBuffer positions = dataManager.getVertexBuffer(segs.getIdentifier());
-                    drawingTools.draw(sprite, SpriteAnchorPosition.CENTER, positions);
+                    drawingTools.draw(texture, AnchorPosition.CENTER, positions);
                 }
 
                 /* Draw the arrows */
@@ -882,8 +889,8 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
     }
 
     private class ColorMapTextureDataProvider extends AbstractDataProvider<Texture> implements TextureDataProvider {
-        float[] whiteColor = {1.0f, 1.0f, 1.0f, 1.0f};
-        float[] blackColor = {0.0f, 0.0f, 0.0f, 1.0f};
+        byte[] whiteColor = {(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF};
+        byte[] blackColor = {0x00, 0x00, 0x00, (byte) 0xFF};
 
         @Override
         public Dimension getTextureSize() {
@@ -891,26 +898,26 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
         }
 
         @Override
-        public Buffer getData() {
+        public ByteBuffer getData() {
             Double[] data = colorMap.getData();
-            FloatBuffer buffer = BufferUtil.newFloatBuffer(4 * ((data.length / 3) + 2));
+            ByteBuffer buffer = ByteBuffer.allocate(4 * ((data.length / 3) + 2));
 
             /* White and black are written in the first and second positions */
             buffer.put(whiteColor);
             buffer.put(blackColor);
 
             for (int i = 0 ; i < data.length / 3 ; i++) {
-                buffer.put(data[i].floatValue());
-                buffer.put(data[i + colorMap.getSize()].floatValue());
-                buffer.put(data[i + 2 * colorMap.getSize()].floatValue());
-                buffer.put(1);
+                buffer.put(toByte(data[i]));
+                buffer.put(toByte(data[i + colorMap.getSize()].floatValue()));
+                buffer.put(toByte(data[i + 2 * colorMap.getSize()].floatValue()));
+                buffer.put(toByte(1));
             }
             buffer.rewind();
             return buffer;
         }
 
         @Override
-        public Buffer getSubData(int x, int y, int width, int height) {
+        public ByteBuffer getSubData(int x, int y, int width, int height) {
             /*
              * For the moment, we presuppose that x and y are 0 and that
              * width is equal to the colormap's total size (with height == 1).
index 7ba5b01..be91b0f 100644 (file)
@@ -2,10 +2,10 @@ package org.scilab.modules.renderer.JoGLView;
 
 import org.scilab.forge.scirenderer.DrawingTools;
 import org.scilab.forge.scirenderer.SciRendererException;
+import org.scilab.forge.scirenderer.data.AbstractDataProvider;
 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
 import org.scilab.forge.scirenderer.shapes.geometry.DefaultGeometry;
 import org.scilab.forge.scirenderer.shapes.geometry.Geometry;
-import org.scilab.forge.scirenderer.texture.AbstractDataProvider;
 import org.scilab.forge.scirenderer.texture.Texture;
 import org.scilab.forge.scirenderer.texture.TextureDataProvider;
 import org.scilab.modules.graphic_objects.ObjectRemovedException;
@@ -15,8 +15,7 @@ import org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties;
 import org.scilab.modules.renderer.JoGLView.util.ColorFactory;
 
 import java.awt.Dimension;
-import java.nio.Buffer;
-import java.nio.FloatBuffer;
+import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -191,11 +190,11 @@ class FecDrawer {
         }
 
         @Override
-        public FloatBuffer getData() {
+        public ByteBuffer getData() {
             ColorMap colorMap = drawerVisitor.getColorMap();
             Integer[] outsideColor = fec.getOutsideColor();
 
-            FloatBuffer buffer = FloatBuffer.allocate(4 * getTextureLength());
+            ByteBuffer buffer = ByteBuffer.allocate(4 * getTextureLength());
 
             int min;
             int max;
@@ -210,25 +209,25 @@ class FecDrawer {
 
 
             if (outsideColor[0] == 0) {
-                buffer.put(ColorFactory.createRGBAColor(colorMap, min));
+                buffer.put(toByte(ColorFactory.createRGBAColor(colorMap, min)));
             } else if (outsideColor[0] > 0) {
-                buffer.put(ColorFactory.createRGBAColor(colorMap, outsideColor[0]));
+                buffer.put(toByte(ColorFactory.createRGBAColor(colorMap, outsideColor[0])));
             } else {
                 // TODO: transparency.
-                buffer.put(ColorFactory.createRGBAColor(colorMap, -2));
+                buffer.put(toByte(ColorFactory.createRGBAColor(colorMap, -2)));
             }
 
             for (int i = min; i <= max; i++) {
-                buffer.put(ColorFactory.createRGBAColor(colorMap, i));
+                buffer.put(toByte(ColorFactory.createRGBAColor(colorMap, i)));
             }
 
             if (outsideColor[1] == 0) {
-                buffer.put(ColorFactory.createRGBAColor(colorMap, max));
+                buffer.put(toByte(ColorFactory.createRGBAColor(colorMap, max)));
             } else if (outsideColor[1] > 0) {
-                buffer.put(ColorFactory.createRGBAColor(colorMap, outsideColor[1]));
+                buffer.put(toByte(ColorFactory.createRGBAColor(colorMap, outsideColor[1])));
             } else {
                 // TODO: transparency.
-                buffer.put(ColorFactory.createRGBAColor(colorMap, -2));
+                buffer.put(toByte(ColorFactory.createRGBAColor(colorMap, -2)));
             }
 
             buffer.rewind();
@@ -236,11 +235,11 @@ class FecDrawer {
         }
 
         @Override
-        public Buffer getSubData(int x, int y, int width, int height) {
-            FloatBuffer buffer = getData();
-            FloatBuffer tempBuffer = FloatBuffer.allocate(4 * width * height);
+        public ByteBuffer getSubData(int x, int y, int width, int height) {
+            ByteBuffer buffer = getData();
+            ByteBuffer tempBuffer = ByteBuffer.allocate(4 * width * height);
             buffer.position(x + y * getTextureLength());
-            float[] data = new float[4];
+            byte[] data = new byte[4];
             for (int i = x; i < x + width; i++) {
                 for (int j = y; j < y + height; j++) {
                     buffer.get(data);
@@ -13,7 +13,7 @@ package org.scilab.modules.renderer.JoGLView;
 
 import com.sun.opengl.util.BufferUtil;
 import org.scilab.forge.scirenderer.Canvas;
-import org.scilab.forge.scirenderer.texture.AbstractDataProvider;
+import org.scilab.forge.scirenderer.data.AbstractDataProvider;
 import org.scilab.forge.scirenderer.texture.Texture;
 import org.scilab.forge.scirenderer.texture.TextureDataProvider;
 import org.scilab.modules.graphic_objects.MainDataLoader;
@@ -21,19 +21,18 @@ import org.scilab.modules.graphic_objects.graphicController.GraphicController;
 import org.scilab.modules.graphic_objects.graphicView.GraphicView;
 
 import java.awt.Dimension;
-import java.nio.Buffer;
-import java.nio.FloatBuffer;
+import java.nio.ByteBuffer;
 import java.util.HashMap;
 
 /**
  * @author Pierre Lando
  */
-public class TextureManager {
+public class ScilabTextureManager {
 
     private final HashMap<String, Texture> hashMap = new HashMap<String, Texture>();
     private final Canvas canvas;
 
-    public TextureManager(DrawerVisitor drawerVisitor) {
+    public ScilabTextureManager(DrawerVisitor drawerVisitor) {
         this.canvas = drawerVisitor.getCanvas();
     }
 
@@ -87,11 +86,11 @@ public class TextureManager {
         }
 
         @Override
-        public Buffer getData() {
+        public ByteBuffer getData() {
             int bufferLength = dimension.width * dimension.height * 4;
-            FloatBuffer buffer;
+            ByteBuffer buffer;
             try {
-                buffer = BufferUtil.newFloatBuffer(bufferLength);
+                buffer = BufferUtil.newByteBuffer(bufferLength);
             } catch (OutOfMemoryError error) {
                 // TODO: Scilab error.
                 System.out.println("Java heap space to small, can't get " + bufferLength / (1024*1024) + "MBytes");
@@ -103,11 +102,11 @@ public class TextureManager {
         }
 
         @Override
-        public Buffer getSubData(int x, int y, int width, int height) {
+        public ByteBuffer getSubData(int x, int y, int width, int height) {
             int bufferLength = width * height * 4;
-            FloatBuffer buffer;
+            ByteBuffer buffer;
             try {
-                buffer = BufferUtil.newFloatBuffer(bufferLength);
+                buffer = BufferUtil.newByteBuffer(bufferLength);
             } catch (OutOfMemoryError error) {
                 // TODO: Scilab error.
                 System.out.println("Java heap space to small, can't get " + bufferLength / (1024*1024) + "MBytes");
index 60cd663..71ce1e5 100644 (file)
@@ -65,7 +65,7 @@ public class AxesRulerDrawer {
     private final RulerDrawerManager rulerDrawerManager;
 
     public AxesRulerDrawer(Canvas canvas) {
-        this.rulerDrawerManager = new RulerDrawerManager(canvas.getSpriteManager());
+        this.rulerDrawerManager = new RulerDrawerManager(canvas.getTextureManager());
     }
 
     /**
index 42d1b6e..0100421 100644 (file)
 package org.scilab.modules.renderer.JoGLView.axes.ruler;
 
 import org.scilab.forge.scirenderer.ruler.RulerSpriteFactory;
-import org.scilab.forge.scirenderer.sprite.Sprite;
-import org.scilab.forge.scirenderer.sprite.SpriteDrawer;
-import org.scilab.forge.scirenderer.sprite.SpriteDrawingTools;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
-import org.scilab.forge.scirenderer.sprite.TextEntity;
+import org.scilab.forge.scirenderer.texture.TextEntity;
+import org.scilab.forge.scirenderer.texture.Texture;
+import org.scilab.forge.scirenderer.texture.TextureDrawer;
+import org.scilab.forge.scirenderer.texture.TextureDrawingTools;
+import org.scilab.forge.scirenderer.texture.TextureManager;
 import org.scilab.modules.graphic_objects.axes.Axes;
 import org.scilab.modules.graphic_objects.axes.AxisProperty;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
@@ -77,7 +77,7 @@ class AxesRulerSpriteFactory implements RulerSpriteFactory {
     }
 
     @Override
-    public Sprite create(double value, DecimalFormat adaptedFormat, SpriteManager spriteManager) {
+    public Texture create(double value, DecimalFormat adaptedFormat, TextureManager textureManager) {
         // Simple ack to avoid ticks with "-0" as label.
         if (value == -0) {
             value = 0;
@@ -86,16 +86,16 @@ class AxesRulerSpriteFactory implements RulerSpriteFactory {
         if (axisProperty.getAutoTicks()) {
             setScilabStyle(adaptedFormat);
             if (axisProperty.getLogFlag()) {
-                return createScientificStyleSprite(value, spriteManager);
+                return createScientificStyleSprite(value, textureManager);
             } else {
-                return createSimpleSprite(adaptedFormat.format(value), spriteManager);
+                return createSimpleSprite(adaptedFormat.format(value), textureManager);
             }
         } else {
             FormattedText formattedText = getTextAtValue(value);
-            FormattedTextSpriteDrawer textObjectSpriteDrawer = new FormattedTextSpriteDrawer(colorMap, spriteManager, formattedText);
-            Sprite sprite = spriteManager.createSprite(textObjectSpriteDrawer.getSpriteSize());
-            sprite.setDrawer(textObjectSpriteDrawer);
-            return sprite;
+            FormattedTextSpriteDrawer textObjectSpriteDrawer = new FormattedTextSpriteDrawer(colorMap, formattedText);
+            Texture texture = textureManager.createTexture();
+            texture.setDrawer(textObjectSpriteDrawer);
+            return texture;
         }
     }
 
@@ -111,13 +111,13 @@ class AxesRulerSpriteFactory implements RulerSpriteFactory {
     }
 
     /**
-     * Create and return a sprite representing the given value.
+     * Create and return a texture representing the given value.
      * The returned sprites will look like "5x10^2"
      * @param value, the given value.
-     * @param spriteManager used sprite manager.
-     * @return a simple sprite representing the given value with the adapted format.
+     * @param textureManager used texture manager.
+     * @return a simple texture representing the given value with the adapted format.
      */
-    private Sprite createScientificStyleSprite(double value, SpriteManager spriteManager) {
+    private Texture createScientificStyleSprite(double value, TextureManager textureManager) {
         Integer exponent = (int) Math.floor(Math.log10(value));
         Double mantissa = value / Math.pow(10, exponent);
 
@@ -136,7 +136,7 @@ class AxesRulerSpriteFactory implements RulerSpriteFactory {
         mantissaTextEntity.setTextUseFractionalMetrics(axisProperty.getFontFractional());
         mantissaTextEntity.setTextColor(ColorFactory.createColor(colorMap, axisProperty.getFontColor()));
         mantissaTextEntity.setFont(mantissaFont);
-        final Dimension mantissaSize = spriteManager.getSize(mantissaTextEntity);
+        final Dimension mantissaSize = mantissaTextEntity.getSize();
 
         /**
          * Create exponent.
@@ -147,37 +147,42 @@ class AxesRulerSpriteFactory implements RulerSpriteFactory {
         exponentTextEntity.setTextUseFractionalMetrics(axisProperty.getFontFractional());
         exponentTextEntity.setTextColor(ColorFactory.createColor(colorMap, axisProperty.getFontColor()));
         exponentTextEntity.setFont(exponentFont);
-        final Dimension exponentSize = spriteManager.getSize(exponentTextEntity);
+        final Dimension exponentSize = exponentTextEntity.getSize();
 
-        Sprite sprite = spriteManager.createSprite(
-                            exponentSize.width + mantissaSize.width,
-                            exponentSize.height + mantissaSize.height
-                        );
+        Texture texture = textureManager.createTexture();
 
-        sprite.setDrawer(new SpriteDrawer() {
+        texture.setDrawer(new TextureDrawer() {
 
             @Override
-            public void draw(SpriteDrawingTools drawingTools) {
+            public void draw(TextureDrawingTools drawingTools) {
                 drawingTools.draw(mantissaTextEntity, 0, exponentSize.height);
                 drawingTools.draw(exponentTextEntity, mantissaSize.width, 0);
             }
 
             @Override
-            public OriginPosition getOriginPosition() {
-                return SpriteDrawer.OriginPosition.UPPER_LEFT;
+            public Dimension getTextureSize() {
+                return new Dimension(
+                        exponentSize.width + mantissaSize.width,
+                        exponentSize.height + mantissaSize.height
+                );
+            }
+
+            @Override
+            public TextureDrawer.OriginPosition getOriginPosition() {
+                return TextureDrawer.OriginPosition.UPPER_LEFT;
             }
         });
 
-        return sprite;
+        return texture;
     }
 
     /**
-     * Create and return a simple sprite representing the given value.
+     * Create and return a simple texture representing the given value.
      * @param text the formatted string representing the value.
-     * @param spriteManager used sprite manager.
-     * @return a simple sprite representing the given value with the adapted format.
+     * @param textureManager used texture manager.
+     * @return a simple texture representing the given value with the adapted format.
      */
-    private Sprite createSimpleSprite(String text, SpriteManager spriteManager) {
+    private Texture createSimpleSprite(String text, TextureManager textureManager) {
         Font font = FontManager.getSciFontManager().getFontFromIndex(axisProperty.getFontStyle(), axisProperty.getFontSize());
         final TextEntity textEntity = new TextEntity(text);
         textEntity.setTextAntiAliased(false);
@@ -185,22 +190,26 @@ class AxesRulerSpriteFactory implements RulerSpriteFactory {
         textEntity.setTextColor(ColorFactory.createColor(colorMap, axisProperty.getFontColor()));
         textEntity.setFont(font);
 
-        Dimension dimension = spriteManager.getSize(textEntity);
-        Sprite sprite = spriteManager.createSprite(dimension.width, dimension.height);
-        sprite.setDrawer(new SpriteDrawer() {
+        Texture texture = textureManager.createTexture();
+        texture.setDrawer(new TextureDrawer() {
 
             @Override
-            public void draw(SpriteDrawingTools drawingTools) {
+            public void draw(TextureDrawingTools drawingTools) {
                 drawingTools.draw(textEntity, 0, 0);
             }
 
             @Override
-            public OriginPosition getOriginPosition() {
-                return SpriteDrawer.OriginPosition.UPPER_LEFT;
+            public Dimension getTextureSize() {
+                return textEntity.getSize();
+            }
+
+            @Override
+            public TextureDrawer.OriginPosition getOriginPosition() {
+                return TextureDrawer.OriginPosition.UPPER_LEFT;
             }
         });
 
-        return sprite;
+        return texture;
     }
 
     /**
index 64df106..7d4690b 100644 (file)
@@ -12,7 +12,7 @@
 package org.scilab.modules.renderer.JoGLView.axes.ruler;
 
 import org.scilab.forge.scirenderer.ruler.RulerDrawer;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
+import org.scilab.forge.scirenderer.texture.TextureManager;
 import org.scilab.modules.graphic_objects.axes.Axes;
 import org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties;
 
@@ -52,17 +52,15 @@ class RulerDrawerManager {
      */
     private final Map<String, RulerDrawer[]> rulerSpriteManagerMap = new HashMap<String, RulerDrawer[]>();
 
-    /**
-     * The {@see SpriteManager} of the current {@see Canvas}.
-     */
-    private final SpriteManager spriteManager;
+    /** The {@see TextureManager} of the current {@see Canvas}. */
+    private final TextureManager textureManager;
 
     /**
      * Default constructor.
-     * @param spriteManager the {@see SpriteManager} of the current {@see Canvas}.
+     * @param textureManager the {@see TextureManager} of the current {@see Canvas}.
      */
-    public RulerDrawerManager(SpriteManager spriteManager) {
-        this.spriteManager = spriteManager;
+    public RulerDrawerManager(TextureManager textureManager) {
+        this.textureManager = textureManager;
     }
 
     /**
@@ -73,7 +71,7 @@ class RulerDrawerManager {
     public RulerDrawer[] get(Axes axes) {
         RulerDrawer[] rulerSpriteManager = rulerSpriteManagerMap.get(axes.getIdentifier());
         if (rulerSpriteManager == null) {
-            rulerSpriteManager = new RulerDrawer[]{new RulerDrawer(spriteManager), new RulerDrawer(spriteManager), new RulerDrawer(spriteManager)};
+            rulerSpriteManager = new RulerDrawer[]{new RulerDrawer(textureManager), new RulerDrawer(textureManager), new RulerDrawer(textureManager)};
             rulerSpriteManager[0].setSpriteFactory(new AxesRulerSpriteFactory(axes, 0));
             rulerSpriteManager[1].setSpriteFactory(new AxesRulerSpriteFactory(axes, 1));
             rulerSpriteManager[2].setSpriteFactory(new AxesRulerSpriteFactory(axes, 2));
index 888fd1b..03015d8 100644 (file)
@@ -17,8 +17,8 @@ import org.scilab.forge.scirenderer.buffers.ElementsBuffer;
 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
 import org.scilab.forge.scirenderer.shapes.geometry.DefaultGeometry;
 import org.scilab.forge.scirenderer.shapes.geometry.Geometry;
-import org.scilab.forge.scirenderer.sprite.Sprite;
-import org.scilab.forge.scirenderer.sprite.SpriteAnchorPosition;
+import org.scilab.forge.scirenderer.texture.AnchorPosition;
+import org.scilab.forge.scirenderer.texture.Texture;
 import org.scilab.modules.graphic_objects.ObjectRemovedException;
 import org.scilab.modules.graphic_objects.contouredObject.ContouredObject;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
@@ -95,9 +95,9 @@ public class ContouredObjectDrawer {
         drawingTools.draw(geometry, appearance);
 
         if (contouredObject.getMarkMode()) {
-                Sprite sprite = markManager.getMarkSprite(contouredObject, colorMap);
+                Texture texture = markManager.getMarkSprite(contouredObject, colorMap);
                 ElementsBuffer positions = dataManager.getVertexBuffer(contouredObject.getIdentifier());
-                drawingTools.draw(sprite, SpriteAnchorPosition.CENTER, positions);
+                drawingTools.draw(texture, AnchorPosition.CENTER, positions);
         }
     }
 }
index 6a8572b..1689553 100644 (file)
@@ -11,7 +11,7 @@
 
 package org.scilab.modules.renderer.JoGLView.label;
 
-import org.scilab.forge.scirenderer.sprite.SpriteAnchorPosition;
+import org.scilab.forge.scirenderer.texture.AnchorPosition;
 import org.scilab.forge.scirenderer.tranformations.Vector3d;
 
 import java.util.ArrayList;
@@ -58,11 +58,11 @@ public class AxisLabelPositioner extends LabelPositioner {
          * Adding k*90 (respectively -k*90) degrees to its angle amounts to shifing by k elements to the right
          * (respectively to the left) from its location in the array, modulo the array size.
          */
-        private static final SpriteAnchorPosition[] allowedAnchorPositionsArray = {SpriteAnchorPosition.LEFT, SpriteAnchorPosition.DOWN,
-                                                                                    SpriteAnchorPosition.RIGHT, SpriteAnchorPosition.UP};
+        private static final AnchorPosition[] allowedAnchorPositionsArray = {AnchorPosition.LEFT, AnchorPosition.DOWN,
+                                                                                    AnchorPosition.RIGHT, AnchorPosition.UP};
 
         /** The list of allowed anchor positions. */
-        private static final ArrayList<SpriteAnchorPosition> allowedAnchorPositions = new ArrayList<SpriteAnchorPosition>(Arrays.asList(allowedAnchorPositionsArray));
+        private static final ArrayList<AnchorPosition> allowedAnchorPositions = new ArrayList<AnchorPosition>(Arrays.asList(allowedAnchorPositionsArray));
 
         /**
          * Constructor.
@@ -213,8 +213,8 @@ public class AxisLabelPositioner extends LabelPositioner {
          *
          * @return the sprite anchor position.
          */
-        protected SpriteAnchorPosition getAutoAnchorPosition() {
-                SpriteAnchorPosition anchorPosition = getUncorrectedAutoAnchorPosition();
+        protected AnchorPosition getAutoAnchorPosition() {
+                AnchorPosition anchorPosition = getUncorrectedAutoAnchorPosition();
 
                 double tmpRotationAngle;
 
@@ -261,15 +261,15 @@ public class AxisLabelPositioner extends LabelPositioner {
          * It is determined independently of the rotation angle.
          * @return the sprite anchor position.
          */
-        private SpriteAnchorPosition getUncorrectedAutoAnchorPosition() {
+        private AnchorPosition getUncorrectedAutoAnchorPosition() {
                 if (projectedTicksDirection.getY() > Math.abs(projectedTicksDirection.getX())) {
-                        return SpriteAnchorPosition.DOWN;
+                        return AnchorPosition.DOWN;
                 } else if (projectedTicksDirection.getY() < -Math.abs(projectedTicksDirection.getX())) {
-                        return SpriteAnchorPosition.UP;
+                        return AnchorPosition.UP;
                 } else if (projectedTicksDirection.getX() > 0.0) {
-                        return SpriteAnchorPosition.LEFT;
+                        return AnchorPosition.LEFT;
                 } else {
-                        return SpriteAnchorPosition.RIGHT;
+                        return AnchorPosition.RIGHT;
                 }
         }
 
@@ -280,37 +280,37 @@ public class AxisLabelPositioner extends LabelPositioner {
          * more frequent. To be further tested.
          * @return the sprite anchor position.
          */
-        private SpriteAnchorPosition getAutoAnchorPosition2() {
+        private AnchorPosition getAutoAnchorPosition2() {
                 if (projectedTicksDirection.getY() > 0.0) {
                     if (projectedTicksDirection.getY() > Math.sin(3.0 * Math.PI / 8.0)) {
-                            return SpriteAnchorPosition.DOWN;
+                            return AnchorPosition.DOWN;
                     } else if (projectedTicksDirection.getY() > Math.sin(Math.PI / 8.0)) {
                             if (projectedTicksDirection.getX() > 0.0) {
-                                    return SpriteAnchorPosition.LOWER_LEFT;
+                                    return AnchorPosition.LOWER_LEFT;
                             } else {
-                                    return SpriteAnchorPosition.LOWER_RIGHT;
+                                    return AnchorPosition.LOWER_RIGHT;
                             }
                     } else {
                             if (projectedTicksDirection.getX() > 0.0) {
-                                    return SpriteAnchorPosition.LEFT;
+                                    return AnchorPosition.LEFT;
                             } else {
-                                    return SpriteAnchorPosition.RIGHT;
+                                    return AnchorPosition.RIGHT;
                             }
                     }
                 } else {
                     if (projectedTicksDirection.getY() < -Math.sin(3.0 * Math.PI / 8.0)) {
-                            return SpriteAnchorPosition.UP;
+                            return AnchorPosition.UP;
                     } else if (projectedTicksDirection.getY() < -Math.sin(Math.PI / 8.0)) {
                             if (projectedTicksDirection.getX() > 0.0) {
-                                    return SpriteAnchorPosition.UPPER_LEFT;
+                                    return AnchorPosition.UPPER_LEFT;
                             } else {
-                                    return SpriteAnchorPosition.UPPER_RIGHT;
+                                    return AnchorPosition.UPPER_RIGHT;
                             }
                     } else {
                             if (projectedTicksDirection.getX() > 0.0) {
-                                    return SpriteAnchorPosition.LEFT;
+                                    return AnchorPosition.LEFT;
                             } else {
-                                    return SpriteAnchorPosition.RIGHT;
+                                    return AnchorPosition.RIGHT;
                             }
                     }
                }
index 9ae19b3..d17859f 100644 (file)
 package org.scilab.modules.renderer.JoGLView.label;
 
 import org.scilab.forge.scirenderer.DrawingTools;
-import org.scilab.forge.scirenderer.sprite.Sprite;
-import org.scilab.forge.scirenderer.sprite.SpriteAnchorPosition;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
+import org.scilab.forge.scirenderer.SciRendererException;
+import org.scilab.forge.scirenderer.texture.AnchorPosition;
+import org.scilab.forge.scirenderer.texture.Texture;
+import org.scilab.forge.scirenderer.texture.TextureManager;
 import org.scilab.forge.scirenderer.tranformations.Transformation;
 import org.scilab.forge.scirenderer.tranformations.Vector3d;
 import org.scilab.modules.graphic_objects.axes.Axes;
 import org.scilab.modules.graphic_objects.axes.Camera;
-import org.scilab.modules.graphic_objects.graphicController.GraphicController;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
+import org.scilab.modules.graphic_objects.graphicController.GraphicController;
 import org.scilab.modules.graphic_objects.label.Label;
 import org.scilab.modules.graphic_objects.utils.Utils;
 import org.scilab.modules.renderer.JoGLView.axes.AxesDrawer;
-import org.scilab.modules.renderer.JoGLView.label.LabelPositioner;
 
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_POSITION__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_AUTO_POSITION__;
-import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_FONT_ANGLE__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_AUTO_ROTATION__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_FONT_ANGLE__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_POSITION__;
 
 /**
  *
@@ -48,19 +48,19 @@ public class LabelManager {
     /**
      * The {@see Map} of existing {@see Sprite}.
      */
-    private final Map<String, Sprite> spriteMap = new ConcurrentHashMap<String, Sprite>();
+    private final Map<String, Texture> textureMap = new ConcurrentHashMap<String, Texture>();
 
     /**
      * The used sprite manager.
      */
-    private final SpriteManager spriteManager;
+    private final TextureManager textureManager;
 
     /**
      * Default constructor.
-     * @param spriteManager the sprite manager.
+     * @param textureManager the texture manager.
      */
-    public LabelManager(SpriteManager spriteManager) {
-        this.spriteManager = spriteManager;
+    public LabelManager(TextureManager textureManager) {
+        this.textureManager = textureManager;
     }
 
     /**
@@ -69,8 +69,9 @@ public class LabelManager {
      * @param colorMap the current {@see ColorMap}.
      * @param label the given Scilab {@see Label}.
      * @param axesDrawer the Axes drawer used to draw the label's parent Axes.
+     * @throws SciRendererException if the label is not drawable.
      */
-    public void draw(final DrawingTools drawingTools, final ColorMap colorMap, final Label label, AxesDrawer axesDrawer) {
+    public void draw(final DrawingTools drawingTools, final ColorMap colorMap, final Label label, AxesDrawer axesDrawer) throws SciRendererException {
         /* Only the z-axis Label may not be drawn depending on the view mode */
         boolean drawnFlag = true;
         String parentId;
@@ -123,11 +124,12 @@ public class LabelManager {
      * @param parentAxes the label's parent Axes.
      * @param axesDrawer the Axes drawer used to draw the label's parent Axes.
      * @param drawnFlag a flag indicating whether the label must be drawn or not.
+     * @throws SciRendererException if the label is not drawable.
      */
-    public final void positionAndDraw(final DrawingTools drawingTools, final ColorMap colorMap, final Label label, LabelPositioner labelPositioner, Axes parentAxes, AxesDrawer axesDrawer, boolean drawnFlag) {
-        Sprite labelSprite = getSprite(colorMap, label);
+    public final void positionAndDraw(final DrawingTools drawingTools, final ColorMap colorMap, final Label label, LabelPositioner labelPositioner, Axes parentAxes, AxesDrawer axesDrawer, boolean drawnFlag) throws SciRendererException {
+        Texture labelSprite = getTexture(colorMap, label);
 
-        labelPositioner.setLabelSprite(labelSprite);
+        labelPositioner.setLabelTexture(labelSprite);
         labelPositioner.setDrawingTools(drawingTools);
         labelPositioner.setParentAxes(parentAxes);
         labelPositioner.setAutoPosition(label.getAutoPosition());
@@ -142,7 +144,7 @@ public class LabelManager {
         labelPositioner.positionLabel();
 
         Vector3d labelPos = labelPositioner.getAnchorPoint();
-        SpriteAnchorPosition labelAnchor = labelPositioner.getAnchorPosition();
+        AnchorPosition labelAnchor = labelPositioner.getAnchorPosition();
 
         /* Set the lower-left corner position if auto-positioned */
         if (label.getAutoPosition()) {
@@ -271,13 +273,13 @@ public class LabelManager {
      * @param label the given Scilab {@see Label}.
      * @return the SciRenderer {@see Sprite} corresponding to the given Scilab {@see Label}.
      */
-    public Sprite getSprite(final ColorMap colorMap, final Label label) {
-        Sprite sprite = spriteMap.get(label.getIdentifier());
-        if (sprite == null) {
-            sprite = createSprite(colorMap, label);
-            spriteMap.put(label.getIdentifier(), sprite);
+    public Texture getTexture(final ColorMap colorMap, final Label label) {
+        Texture texture = textureMap.get(label.getIdentifier());
+        if (texture == null) {
+            texture = createSprite(colorMap, label);
+            textureMap.put(label.getIdentifier(), texture);
         }
-        return sprite;
+        return texture;
     }
 
     /**
@@ -286,22 +288,22 @@ public class LabelManager {
      * @param label the given label.
      * @return a new sprite for the given label.
      */
-    private Sprite createSprite(final ColorMap colorMap, final Label label) {
-        LabelSpriteDrawer spriteDrawer = new LabelSpriteDrawer(spriteManager, colorMap, label);
-        Sprite sprite = spriteManager.createRotatableSprite(spriteDrawer.getWidth(), spriteDrawer.getHeight());
+    private Texture createSprite(final ColorMap colorMap, final Label label) {
+        LabelSpriteDrawer spriteDrawer = new LabelSpriteDrawer(colorMap, label);
+        Texture sprite = textureManager.createTexture();
         sprite.setDrawer(spriteDrawer);
         return sprite;
     }
 
     /**
-     * Disposes the sprite corresponding to the given id.
+     * Disposes the texture corresponding to the given id.
      * @param id the given id.
      */
     public void dispose(String id) {
-        Sprite sprite = spriteMap.get(id);
-        if (sprite != null) {
-            spriteManager.dispose(sprite);
-            spriteMap.remove(id);
+        Texture texture = textureMap.get(id);
+        if (texture != null) {
+            textureManager.dispose(texture);
+            textureMap.remove(id);
         }
     }
 
@@ -309,7 +311,7 @@ public class LabelManager {
      * Disposes all the label text sprites.
      */
     public void disposeAll() {
-        spriteManager.dispose(spriteMap.values());
-        spriteMap.clear();
+        textureManager.dispose(textureMap.values());
+        textureMap.clear();
     }
 }
index 43e9d29..65a7f5f 100644 (file)
 package org.scilab.modules.renderer.JoGLView.label;
 
 import org.scilab.forge.scirenderer.DrawingTools;
-import org.scilab.forge.scirenderer.sprite.Sprite;
-import org.scilab.forge.scirenderer.sprite.SpriteAnchorPosition;
+import org.scilab.forge.scirenderer.texture.AnchorPosition;
+import org.scilab.forge.scirenderer.texture.Texture;
 import org.scilab.forge.scirenderer.tranformations.DegenerateMatrixException;
 import org.scilab.forge.scirenderer.tranformations.Transformation;
 import org.scilab.forge.scirenderer.tranformations.TransformationFactory;
 import org.scilab.forge.scirenderer.tranformations.Vector3d;
 import org.scilab.modules.graphic_objects.axes.Axes;
 
+import java.awt.Dimension;
+
 /**
  * LabelPositioner class.
  *
@@ -79,10 +81,10 @@ public abstract class LabelPositioner {
         protected Vector3d anchorPoint;
 
         /** The label's sprite anchor position. */
-        protected SpriteAnchorPosition anchorPosition;
+        protected AnchorPosition anchorPosition;
 
         /** The label's associated sprite. */
-        protected Sprite labelSprite;
+        protected Texture labelTexture;
 
         /** The current drawing tools. */
         protected DrawingTools drawingTools;
@@ -123,8 +125,8 @@ public abstract class LabelPositioner {
                 userRotationAngle = 0.0;
                 labelDisplacement = new Vector3d(0.0, 0.0, 0.0);
                 anchorPoint = new Vector3d(0.0, 0.0, 0.0);
-                anchorPosition = SpriteAnchorPosition.LOWER_LEFT;
-                labelSprite = null;
+                anchorPosition = AnchorPosition.LOWER_LEFT;
+                labelTexture = null;
                 drawingTools = null;
                 parentAxes = null;
                 /* Labels are drawn in box coordinates as a default. */
@@ -260,16 +262,16 @@ public abstract class LabelPositioner {
          * Returns the label's sprite anchor position.
          * @return the labe's sprite anchor position.
          */
-        public SpriteAnchorPosition getAnchorPosition() {
+        public AnchorPosition getAnchorPosition() {
                 return anchorPosition;
         }
 
         /**
-         * Sets the label's associated sprite.
-         * @param labelSprite the sprite to set.
+         * Sets the label's associated texture.
+         * @param labelTexture the texture to set.
          */
-        public void setLabelSprite(Sprite labelSprite) {
-                this.labelSprite = labelSprite;
+        public void setLabelTexture(Texture labelTexture) {
+                this.labelTexture = labelTexture;
         }
 
         /**
@@ -368,8 +370,8 @@ public abstract class LabelPositioner {
          * Returns the automatically computed sprite anchor position.
          * @return the sprite anchor position.
          */
-        protected SpriteAnchorPosition getAutoAnchorPosition() {
-                return SpriteAnchorPosition.LEFT;
+        protected AnchorPosition getAutoAnchorPosition() {
+                return AnchorPosition.LEFT;
         }
 
         /**
@@ -380,7 +382,7 @@ public abstract class LabelPositioner {
                 if (autoPosition) {
                         anchorPosition = getAutoAnchorPosition();
                 } else {
-                        anchorPosition = SpriteAnchorPosition.LOWER_LEFT;
+                        anchorPosition = AnchorPosition.LOWER_LEFT;
                 }
         }
 
@@ -396,24 +398,24 @@ public abstract class LabelPositioner {
         private Vector3d computeLowerLeftCornerPosition(Vector3d anchorPoint, Vector3d halfWidth, Vector3d halfHeight) {
                 Vector3d returnedPosition = new Vector3d(anchorPoint);
 
-                if (anchorPosition == SpriteAnchorPosition.LEFT) {
+                if (anchorPosition == AnchorPosition.LEFT) {
                         returnedPosition = returnedPosition.minus(halfHeight);
-                } else if (anchorPosition == SpriteAnchorPosition.RIGHT) {
+                } else if (anchorPosition == AnchorPosition.RIGHT) {
                         returnedPosition = returnedPosition.minus(halfWidth.times(2.0));
                         returnedPosition = returnedPosition.minus(halfHeight);
-                } else if (anchorPosition == SpriteAnchorPosition.UP) {
+                } else if (anchorPosition == AnchorPosition.UP) {
                         returnedPosition = returnedPosition.minus(halfWidth);
                         returnedPosition = returnedPosition.minus(halfHeight.times(2.0));
-                } else if (anchorPosition == SpriteAnchorPosition.DOWN) {
+                } else if (anchorPosition == AnchorPosition.DOWN) {
                         returnedPosition = returnedPosition.minus(halfWidth);
-                } else if (anchorPosition == SpriteAnchorPosition.UPPER_LEFT) {
+                } else if (anchorPosition == AnchorPosition.UPPER_LEFT) {
                         returnedPosition = returnedPosition.minus(halfHeight.times(2.0));
-                } else if (anchorPosition == SpriteAnchorPosition.UPPER_RIGHT) {
+                } else if (anchorPosition == AnchorPosition.UPPER_RIGHT) {
                         returnedPosition = returnedPosition.minus(halfWidth.times(2.0));
                         returnedPosition = returnedPosition.minus(halfHeight.times(2.0));
-                } else if (anchorPosition == SpriteAnchorPosition.LOWER_LEFT) {
+                } else if (anchorPosition == AnchorPosition.LOWER_LEFT) {
                         // Do nothing: in this case, the positions of the anchor point and the lower-left corner are equal.
-                } else if (anchorPosition == SpriteAnchorPosition.LOWER_RIGHT) {
+                } else if (anchorPosition == AnchorPosition.LOWER_RIGHT) {
                         returnedPosition = returnedPosition.minus(halfWidth.times(2.0));
                 }
 
@@ -473,8 +475,9 @@ public abstract class LabelPositioner {
                     winRotation = TransformationFactory.getIdentity();
                 }
 
-                projHalfWidth = new Vector3d(0.5 * (double) labelSprite.getWidth(), 0.0, 0.0);
-                projHalfHeight = new Vector3d(0.0, 0.5 * (double) labelSprite.getHeight(), 0.0);
+                Dimension textureSize = labelTexture.getDataProvider().getTextureSize();
+                projHalfWidth = new Vector3d(0.5 * textureSize.getWidth(), 0.0, 0.0);
+                projHalfHeight = new Vector3d(0.0, 0.5 * textureSize.getHeight(), 0.0);
 
                 projHalfWidth = winRotation.projectDirection(projHalfWidth);
                 projHalfHeight = winRotation.projectDirection(projHalfHeight);
index 520df9e..ddd79a1 100644 (file)
@@ -15,8 +15,7 @@ package org.scilab.modules.renderer.JoGLView.label;
 
 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
 import org.scilab.forge.scirenderer.shapes.appearance.Color;
-import org.scilab.forge.scirenderer.sprite.SpriteDrawer;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
+import org.scilab.forge.scirenderer.texture.TextureDrawer;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
 import org.scilab.modules.graphic_objects.label.Label;
 import org.scilab.modules.renderer.JoGLView.util.ColorFactory;
@@ -29,16 +28,15 @@ import org.scilab.modules.renderer.JoGLView.util.TextObjectSpriteDrawer;
  *    -refactoring
  * @author Pierre Lando
  */
-public class LabelSpriteDrawer extends TextObjectSpriteDrawer implements SpriteDrawer {
+public class LabelSpriteDrawer extends TextObjectSpriteDrawer implements TextureDrawer {
 
      /**
      * Default constructor.
-     * @param spriteManager the sprite manager to use.
      * @param colorMap the color map to use.
      * @param label the scilab {@see Label} to draw.
      */
-    public LabelSpriteDrawer(final SpriteManager spriteManager, final ColorMap colorMap, final Label label) {
-        super(spriteManager, colorMap, label);
+    public LabelSpriteDrawer(final ColorMap colorMap, final Label label) {
+        super(colorMap, label);
         /* Alignment factor set to left */
         setAlignmentFactor(0.0f);
 
index 358b1d2..6893c90 100644 (file)
@@ -11,9 +11,8 @@
 
 package org.scilab.modules.renderer.JoGLView.label;
 
-import org.scilab.forge.scirenderer.sprite.SpriteAnchorPosition;
+import org.scilab.forge.scirenderer.texture.AnchorPosition;
 import org.scilab.forge.scirenderer.tranformations.Transformation;
-import org.scilab.forge.scirenderer.tranformations.TransformationManager;
 import org.scilab.forge.scirenderer.tranformations.Vector3d;
 
 /**
@@ -104,8 +103,8 @@ public class TitlePositioner extends LabelPositioner {
          * Returns the automatically computed sprite anchor position.
          * @return the sprite anchor position.
          */
-        protected SpriteAnchorPosition getAutoAnchorPosition() {
-                return SpriteAnchorPosition.DOWN;
+        protected AnchorPosition getAutoAnchorPosition() {
+                return AnchorPosition.DOWN;
         }
 
 }
index 58959ad..1026be5 100644 (file)
@@ -17,26 +17,27 @@ import org.scilab.forge.scirenderer.SciRendererException;
 import org.scilab.forge.scirenderer.buffers.ElementsBuffer;
 import org.scilab.forge.scirenderer.buffers.IndicesBuffer;
 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
-import org.scilab.forge.scirenderer.shapes.geometry.Geometry;
 import org.scilab.forge.scirenderer.shapes.geometry.DefaultGeometry;
-import org.scilab.forge.scirenderer.sprite.Sprite;
-import org.scilab.forge.scirenderer.sprite.SpriteAnchorPosition;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
+import org.scilab.forge.scirenderer.shapes.geometry.Geometry;
+import org.scilab.forge.scirenderer.texture.AnchorPosition;
+import org.scilab.forge.scirenderer.texture.Texture;
+import org.scilab.forge.scirenderer.texture.TextureManager;
 import org.scilab.forge.scirenderer.tranformations.Transformation;
 import org.scilab.forge.scirenderer.tranformations.TransformationFactory;
 import org.scilab.forge.scirenderer.tranformations.TransformationStack;
 import org.scilab.forge.scirenderer.tranformations.Vector3d;
 import org.scilab.modules.graphic_objects.axes.Axes;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
-import org.scilab.modules.graphic_objects.polyline.Polyline;
 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
 import org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties;
 import org.scilab.modules.graphic_objects.legend.Legend;
 import org.scilab.modules.graphic_objects.legend.Legend.LegendLocation;
+import org.scilab.modules.graphic_objects.polyline.Polyline;
 import org.scilab.modules.renderer.JoGLView.DrawerVisitor;
 import org.scilab.modules.renderer.JoGLView.mark.MarkSpriteManager;
 import org.scilab.modules.renderer.JoGLView.util.ColorFactory;
 
+import java.awt.Dimension;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Map;
@@ -77,7 +78,7 @@ public class LegendDrawer {
         private final DrawerVisitor visitor;
 
         /** The SpriteManager used */
-        private final SpriteManager spriteManager;
+        private final TextureManager textureManager;
 
         /** The MarkSpriteManager used */
         private final MarkSpriteManager markManager;
@@ -116,18 +117,16 @@ public class LegendDrawer {
         private IndicesBuffer rectangleOutlineIndices;
 
         /** The map storing legend text sprites */
-        private Map<String, Sprite> textSpriteMap;
+        private Map<String, Texture> textureMap;
 
         /**
          * Constructor.
          * @param visitor the DrawerVisitor {@see DrawerVisitor}.
-         * @param spriteManager the SpriteManager {@see SpriteManager}.
-         * @param markManager the MarkSpriteManager {@see MarkSpriteManager}.
          */
-        public LegendDrawer(DrawerVisitor visitor, SpriteManager spriteManager, MarkSpriteManager markManager) {
+        public LegendDrawer(DrawerVisitor visitor) {
                 this.visitor = visitor;
-                this.spriteManager = spriteManager;
-                this.markManager = markManager;
+                this.textureManager = visitor.getCanvas().getTextureManager();
+                this.markManager = visitor.getMarkManager();
 
                 rectangleVertices = visitor.getCanvas().getBuffersManager().createElementsBuffer();
                 lineVertices = visitor.getCanvas().getBuffersManager().createElementsBuffer();
@@ -136,7 +135,7 @@ public class LegendDrawer {
                 rectangleIndices = visitor.getCanvas().getBuffersManager().createIndicesBuffer();
                 rectangleOutlineIndices = visitor.getCanvas().getBuffersManager().createIndicesBuffer();
 
-                textSpriteMap = new ConcurrentHashMap<String, Sprite>();
+                textureMap = new ConcurrentHashMap<String, Texture>();
 
                 int[] lineIndexData = new int[]{0, 1, 1, 2};
                 lineIndices.setData(lineIndexData);
@@ -145,6 +144,7 @@ public class LegendDrawer {
         /**
          * Draws the given Legend.
          * @param legend the Legend to draw.
+         * @throws SciRendererException if the draw fail.
          */
         public void draw(Legend legend) throws SciRendererException {
                 /* The coordinates of the legend box's lower-left corner */
@@ -193,10 +193,10 @@ public class LegendDrawer {
                         canvasHeight = 1;
                 }
 
-                Sprite legendSprite = getSprite(colorMap, legend);
-
-                double normSpriteWidth = (double) legendSprite.getWidth() / (double) canvasWidth;
-                double normSpriteHeight = (double) legendSprite.getHeight() / (double) canvasHeight;
+                Texture legendSprite = getTexture(colorMap, legend);
+                Dimension textureSize = legendSprite.getDataProvider().getTextureSize();
+                double normSpriteWidth = textureSize.getWidth() / (double) canvasWidth;
+                double normSpriteHeight = textureSize.getHeight() / (double) canvasHeight;
 
                 double lineWidth;
 
@@ -400,7 +400,7 @@ public class LegendDrawer {
                 /* Legend text */
                 float [] spritePosition = new float[]{lineVertexData[8] + (float) xOffset, (float) (legendCorner[1] + yOffset), Z_FRONT};
 
-                drawingTools.draw(legendSprite, SpriteAnchorPosition.LOWER_LEFT, new Vector3d(spritePosition));
+                drawingTools.draw(legendSprite, AnchorPosition.LOWER_LEFT, new Vector3d(spritePosition));
 
                 /* Restore the transformation stacks */
                 modelViewStack.pop();
@@ -508,12 +508,12 @@ public class LegendDrawer {
             }
 
             if (polyline.getMarkMode()) {
-                Sprite markSprite = markManager.getMarkSprite(polyline, colorMap);
+                Texture markTexture = markManager.getMarkSprite(polyline, colorMap);
 
                 if (barDrawn) {
-                    drawingTools.draw(markSprite, SpriteAnchorPosition.CENTER, barVertices);
+                    drawingTools.draw(markTexture, AnchorPosition.CENTER, barVertices);
                 } else {
-                    drawingTools.draw(markSprite, SpriteAnchorPosition.CENTER, lineVertices);
+                    drawingTools.draw(markTexture, AnchorPosition.CENTER, lineVertices);
                 }
             }
 
@@ -525,7 +525,7 @@ public class LegendDrawer {
          * @param property the property to update.
          */
         public void update(String id, String property) {
-                if (textSpriteMap.containsKey(id)) {
+                if (textureMap.containsKey(id)) {
                         if (SPRITE_PROPERTIES.contains(property)) {
                                 dispose(id);
                         }
@@ -537,45 +537,42 @@ public class LegendDrawer {
          * @param id the legend id.
          */
         public void dispose(String id) {
-                Sprite textSprite = textSpriteMap.get(id);
-
-                if (textSprite != null) {
-                        spriteManager.dispose(textSprite);
-                        textSpriteMap.remove(id);
-                }
+            Texture texture = textureMap.get(id);
+            if (texture != null) {
+                textureManager.dispose(texture);
+                    textureMap.remove(id);
+            }
         }
 
         /**
          * Disposes all the Legend resources.
          */
         public void disposeAll() {
-                visitor.getCanvas().getBuffersManager().dispose(rectangleVertices);
-                visitor.getCanvas().getBuffersManager().dispose(lineVertices);
-                visitor.getCanvas().getBuffersManager().dispose(barVertices);
-                visitor.getCanvas().getBuffersManager().dispose(lineIndices);
-                visitor.getCanvas().getBuffersManager().dispose(rectangleIndices);
-                visitor.getCanvas().getBuffersManager().dispose(rectangleOutlineIndices);
-
-                spriteManager.dispose(textSpriteMap.values());
-                textSpriteMap.clear();
+            visitor.getCanvas().getBuffersManager().dispose(rectangleVertices);
+            visitor.getCanvas().getBuffersManager().dispose(lineVertices);
+            visitor.getCanvas().getBuffersManager().dispose(barVertices);
+            visitor.getCanvas().getBuffersManager().dispose(lineIndices);
+            visitor.getCanvas().getBuffersManager().dispose(rectangleIndices);
+            visitor.getCanvas().getBuffersManager().dispose(rectangleOutlineIndices);
+
+            textureManager.dispose(textureMap.values());
+                textureMap.clear();
         }
 
         /**
-         * Returns the legend text sprite.
+         * Returns the legend text texture.
          * @param colorMap the color map.
          * @param legend the Legend.
          * @return the text sprite.
          */
-        private Sprite getSprite(ColorMap colorMap, Legend legend) {
-                Sprite textSprite = textSpriteMap.get(legend.getIdentifier());
-
-                if (textSprite == null) {
-                        this.legendSpriteDrawer = new LegendSpriteDrawer(this.spriteManager, colorMap, legend);
-                        textSprite = spriteManager.createSprite(legendSpriteDrawer.getWidth(), legendSpriteDrawer.getHeight());
-                        textSprite.setDrawer(legendSpriteDrawer);
-                        textSpriteMap.put(legend.getIdentifier(), textSprite);
-                }
-
-                return textSprite;
+        private Texture getTexture(ColorMap colorMap, Legend legend) {
+            Texture texture = textureMap.get(legend.getIdentifier());
+            if (texture == null) {
+                this.legendSpriteDrawer = new LegendSpriteDrawer(colorMap, legend);
+                texture = textureManager.createTexture();
+                texture.setDrawer(legendSpriteDrawer);
+                textureMap.put(legend.getIdentifier(), texture);
+            }
+            return texture;
         }
 }
index 397165a..90c7c61 100644 (file)
@@ -14,8 +14,7 @@ package org.scilab.modules.renderer.JoGLView.legend;
 
 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
 import org.scilab.forge.scirenderer.shapes.appearance.Color;
-import org.scilab.forge.scirenderer.sprite.SpriteDrawer;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
+import org.scilab.forge.scirenderer.texture.TextureDrawer;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
 import org.scilab.modules.graphic_objects.legend.Legend;
 import org.scilab.modules.renderer.JoGLView.util.ColorFactory;
@@ -28,16 +27,15 @@ import org.scilab.modules.renderer.JoGLView.util.TextObjectSpriteDrawer;
  * To do: refactoring.
  * @author Pierre Lando
  */
-public class LegendSpriteDrawer extends TextObjectSpriteDrawer implements SpriteDrawer {
+public class LegendSpriteDrawer extends TextObjectSpriteDrawer implements TextureDrawer {
 
     /**
      * Default constructor.
-     * @param spriteManager the sprite manager to use.
      * @param colorMap the color map to use.
      * @param legend the scilab {@see Legend} to draw.
      */
-    LegendSpriteDrawer(final SpriteManager spriteManager, final ColorMap colorMap, final Legend legend) {
-        super(spriteManager, colorMap, legend);
+    LegendSpriteDrawer(final ColorMap colorMap, final Legend legend) {
+        super(colorMap, legend);
         Appearance appearance = computeAppearance(colorMap, legend);
         setAppearance(appearance);
         setThickness((int) Math.ceil(appearance.getLineWidth()));
index 6bd6dc4..41d90e3 100644 (file)
@@ -13,14 +13,16 @@ package org.scilab.modules.renderer.JoGLView.mark;
 
 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
 import org.scilab.forge.scirenderer.shapes.appearance.Color;
-import org.scilab.forge.scirenderer.sprite.Sprite;
-import org.scilab.forge.scirenderer.sprite.SpriteDrawer;
-import org.scilab.forge.scirenderer.sprite.SpriteDrawingTools;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
+import org.scilab.forge.scirenderer.texture.Texture;
+import org.scilab.forge.scirenderer.texture.TextureDrawer;
+import org.scilab.forge.scirenderer.texture.TextureDrawingTools;
+import org.scilab.forge.scirenderer.texture.TextureManager;
 import org.scilab.modules.graphic_objects.contouredObject.Mark;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
 import org.scilab.modules.renderer.JoGLView.util.ColorFactory;
 
+import java.awt.Dimension;
+
 /**
  * @author Pierre Lando
  */
@@ -35,7 +37,7 @@ public class MarkSpriteFactory {
      * @param colorMap the scilab color map.
      * @return a mark sprite corresponding to the given scilab mark.
      */
-    public static Sprite getMarkSprite(SpriteManager spriteManager, Mark mark, ColorMap colorMap) {
+    public static Texture getMarkSprite(TextureManager spriteManager, Mark mark, ColorMap colorMap) {
         int finalSize;
 
         /**
@@ -47,17 +49,7 @@ public class MarkSpriteFactory {
             finalSize = mark.getSize();
         }
 
-        /**
-         * Add a margin such that (0, 0) was pixel aligned.
-         */
-        int margin;
-        if (finalSize % 2 == 0) {
-            margin = 3;
-        } else {
-            margin = 2;
-        }
-
-        Sprite sprite = spriteManager.createSprite(finalSize + margin, finalSize + margin);
+        Texture sprite = spriteManager.createTexture();
         sprite.setDrawer(getSpriteDrawer(mark, finalSize, colorMap));
 
         return sprite;
@@ -70,7 +62,7 @@ public class MarkSpriteFactory {
      * @param colorMap the scilab colormap to use.
      * @return the sprite drawer corresponding to the given mark.
      */
-    private static SpriteDrawer getSpriteDrawer(Mark mark, int finalSize, ColorMap colorMap) {
+    private static TextureDrawer getSpriteDrawer(Mark mark, int finalSize, ColorMap colorMap) {
 
         final Appearance appearance = new Appearance();
         Color backgroundColor = ColorFactory.createColor(colorMap, mark.getBackground());
@@ -108,7 +100,7 @@ public class MarkSpriteFactory {
     /**
      * Abstract class for all scilab mark sprites.
      */
-    private static abstract class ScilabSpriteDrawer implements SpriteDrawer {
+    private static abstract class ScilabSpriteDrawer implements TextureDrawer {
         protected final Appearance appearance;
         protected final int size;
 
@@ -119,7 +111,20 @@ public class MarkSpriteFactory {
 
         @Override
         public OriginPosition getOriginPosition() {
-            return OriginPosition.CENTER;
+            return TextureDrawer.OriginPosition.CENTER;
+        }
+
+        @Override
+        public Dimension getTextureSize() {
+
+            /** Add a margin such that (0, 0) was pixel aligned. */
+            int margin;
+            if (size % 2 == 0) {
+                margin = 3;
+            } else {
+                margin = 2;
+            }
+            return new Dimension(size + margin, size + margin);
         }
     }
 
@@ -127,24 +132,17 @@ public class MarkSpriteFactory {
      * Dot sprite
      * Scilab ID = 0
      */
-    private static class DotSpriteDrawer implements SpriteDrawer {
+    private static class DotSpriteDrawer extends ScilabSpriteDrawer {
         private final Color color;
-        private final int size;
-
 
         public DotSpriteDrawer(Color color, int size) {
+            super(null, size);
             this.color = color;
-            this.size = size;
-        }
-
-        @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            spriteDrawingTools.fillDisc(0, 0, size, color);
         }
 
         @Override
-        public OriginPosition getOriginPosition() {
-            return OriginPosition.CENTER;
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            textureDrawingTools.fillDisc(0, 0, size, color);
         }
     }
 
@@ -164,9 +162,9 @@ public class MarkSpriteFactory {
         }
 
         @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            spriteDrawingTools.drawPolyline(coordinate1, appearance);
-            spriteDrawingTools.drawPolyline(coordinate2, appearance);
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            textureDrawingTools.drawPolyline(coordinate1, appearance);
+            textureDrawingTools.drawPolyline(coordinate2, appearance);
         }
     }
 
@@ -186,9 +184,9 @@ public class MarkSpriteFactory {
         }
 
         @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            spriteDrawingTools.drawPolyline(coordinate1, appearance);
-            spriteDrawingTools.drawPolyline(coordinate2, appearance);
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            textureDrawingTools.drawPolyline(coordinate1, appearance);
+            textureDrawingTools.drawPolyline(coordinate2, appearance);
         }
     }
 
@@ -208,11 +206,11 @@ public class MarkSpriteFactory {
         }
 
         @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            spriteDrawingTools.fillDisc(0, 0, size, appearance.getFillColor());
-            spriteDrawingTools.drawCircle(0, 0, size, appearance);
-            spriteDrawingTools.drawPolyline(coordinate1, appearance);
-            spriteDrawingTools.drawPolyline(coordinate2, appearance);
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            textureDrawingTools.fillDisc(0, 0, size, appearance.getFillColor());
+            textureDrawingTools.drawCircle(0, 0, size, appearance);
+            textureDrawingTools.drawPolyline(coordinate1, appearance);
+            textureDrawingTools.drawPolyline(coordinate2, appearance);
         }
     }
 
@@ -220,11 +218,12 @@ public class MarkSpriteFactory {
      * Filled diamond sprite
      * Scilab ID = 4
      */
-    private static class FilledDiamondSpriteDrawer implements SpriteDrawer {
+    private static class FilledDiamondSpriteDrawer extends ScilabSpriteDrawer {
         private final Appearance appearance;
         private final int[] coordinates;
 
         public FilledDiamondSpriteDrawer(Color color, int size) {
+            super(null, size);
             int r = size / 2;
 
             appearance = new Appearance();
@@ -235,13 +234,8 @@ public class MarkSpriteFactory {
         }
 
         @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            spriteDrawingTools.fillPolygon(coordinates, appearance);
-        }
-
-        @Override
-        public OriginPosition getOriginPosition() {
-            return OriginPosition.CENTER;
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            textureDrawingTools.fillPolygon(coordinates, appearance);
         }
     }
 
@@ -265,8 +259,8 @@ public class MarkSpriteFactory {
         }
 
         @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            spriteDrawingTools.fillPolygon(coordinates, appearance);
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            textureDrawingTools.fillPolygon(coordinates, appearance);
         }
     }
 
@@ -285,8 +279,8 @@ public class MarkSpriteFactory {
         }
 
         @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            spriteDrawingTools.fillPolygon(coordinates, appearance);
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            textureDrawingTools.fillPolygon(coordinates, appearance);
         }
     }
 
@@ -329,10 +323,10 @@ public class MarkSpriteFactory {
         }
 
         @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            super.draw(spriteDrawingTools);
-            spriteDrawingTools.drawPolyline(coordinate1, appearance);
-            spriteDrawingTools.drawPolyline(coordinate2, appearance);
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            super.draw(textureDrawingTools);
+            textureDrawingTools.drawPolyline(coordinate1, appearance);
+            textureDrawingTools.drawPolyline(coordinate2, appearance);
         }
     }
 
@@ -347,9 +341,9 @@ public class MarkSpriteFactory {
         }
 
         @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            spriteDrawingTools.fillDisc(0, 0, size, appearance.getFillColor());
-            spriteDrawingTools.drawCircle(0, 0, size, appearance);
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            textureDrawingTools.fillDisc(0, 0, size, appearance.getFillColor());
+            textureDrawingTools.drawCircle(0, 0, size, appearance);
         }
     }
 
@@ -374,11 +368,11 @@ public class MarkSpriteFactory {
         }
 
         @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            spriteDrawingTools.drawPolyline(coordinate1, appearance);
-            spriteDrawingTools.drawPolyline(coordinate2, appearance);
-            spriteDrawingTools.drawPolyline(coordinate3, appearance);
-            spriteDrawingTools.drawPolyline(coordinate4, appearance);
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            textureDrawingTools.drawPolyline(coordinate1, appearance);
+            textureDrawingTools.drawPolyline(coordinate2, appearance);
+            textureDrawingTools.drawPolyline(coordinate3, appearance);
+            textureDrawingTools.drawPolyline(coordinate4, appearance);
         }
     }
 
@@ -396,8 +390,8 @@ public class MarkSpriteFactory {
         }
 
         @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            spriteDrawingTools.fillPolygon(coordinate, appearance);
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            textureDrawingTools.fillPolygon(coordinate, appearance);
         }
     }
 
@@ -465,8 +459,8 @@ public class MarkSpriteFactory {
         }
 
         @Override
-        public void draw(SpriteDrawingTools spriteDrawingTools) {
-            spriteDrawingTools.fillPolygon(coordinates, appearance);
+        public void draw(TextureDrawingTools textureDrawingTools) {
+            textureDrawingTools.fillPolygon(coordinates, appearance);
         }
     }
 }
index 39f5f5e..1b94e92 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2009-2010 - DIGITEO - Pierre Lando
+ * Copyright (C) 2009-2012 - DIGITEO - Pierre Lando
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
@@ -8,11 +8,10 @@
  * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  */
-
 package org.scilab.modules.renderer.JoGLView.mark;
 
-import org.scilab.forge.scirenderer.sprite.Sprite;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
+import org.scilab.forge.scirenderer.texture.Texture;
+import org.scilab.forge.scirenderer.texture.TextureManager;
 import org.scilab.modules.graphic_objects.contouredObject.ContouredObject;
 import org.scilab.modules.graphic_objects.contouredObject.Mark;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
@@ -32,20 +31,20 @@ public class MarkSpriteManager {
     /**
      * The SciRender sprite manager.
      */
-    private final SpriteManager spriteManager;
+    private final TextureManager textureManager;
 
     /**
      * The sprite map.
      */
-    private final Map<String, Sprite> spriteMap = new ConcurrentHashMap<String, Sprite>();
+    private final Map<String, Texture> spriteMap = new ConcurrentHashMap<String, Texture>();
 
 
     /**
      * Default constructor.
-     * @param spriteManager the sprite manager to use.
+     * @param textureManager the texture manager to use.
      */
-    public MarkSpriteManager(SpriteManager spriteManager) {
-        this.spriteManager = spriteManager;
+    public MarkSpriteManager(TextureManager textureManager) {
+        this.textureManager = textureManager;
     }
 
 
@@ -56,11 +55,11 @@ public class MarkSpriteManager {
      * @param colorMap the current color map.
      * @return the mark sprite for the given contoured object.
      */
-    public Sprite getMarkSprite(ContouredObject contouredObject, ColorMap colorMap) {
+    public Texture getMarkSprite(ContouredObject contouredObject, ColorMap colorMap) {
         String id = contouredObject.getIdentifier();
-        Sprite sprite = spriteMap.get(id);
+        Texture sprite = spriteMap.get(id);
         if (sprite == null) {
-            sprite = MarkSpriteFactory.getMarkSprite(spriteManager, contouredObject.getMark(), colorMap);
+            sprite = MarkSpriteFactory.getMarkSprite(textureManager, contouredObject.getMark(), colorMap);
             spriteMap.put(id, sprite);
         }
         return sprite;
@@ -73,10 +72,10 @@ public class MarkSpriteManager {
      * @param colorMap the current color map.
      * @return the mark sprite for the given contoured object.
      */
-    public Sprite getMarkSprite(String id, Mark mark, ColorMap colorMap) {
-        Sprite sprite = spriteMap.get(id);
+    public Texture getMarkSprite(String id, Mark mark, ColorMap colorMap) {
+        Texture sprite = spriteMap.get(id);
         if (sprite == null) {
-            sprite = MarkSpriteFactory.getMarkSprite(spriteManager, mark, colorMap);
+            sprite = MarkSpriteFactory.getMarkSprite(textureManager, mark, colorMap);
             spriteMap.put(id, sprite);
         }
         return sprite;
@@ -103,8 +102,8 @@ public class MarkSpriteManager {
      * @param id the given id.
      */
     public void dispose(String id) {
-        Sprite sprite = spriteMap.get(id);
-        spriteManager.dispose(sprite);
+        Texture sprite = spriteMap.get(id);
+        textureManager.dispose(sprite);
         spriteMap.remove(id);
     }
 
@@ -112,7 +111,7 @@ public class MarkSpriteManager {
      * Dispose all the mark sprite.
      */
     public void disposeAll() {
-        spriteManager.dispose(spriteMap.values());
+        textureManager.dispose(spriteMap.values());
         spriteMap.clear();
     }
 }
index fd3a3da..2610abc 100644 (file)
 package org.scilab.modules.renderer.JoGLView.text;
 
 import org.scilab.forge.scirenderer.DrawingTools;
-import org.scilab.forge.scirenderer.sprite.Sprite;
-import org.scilab.forge.scirenderer.sprite.SpriteAnchorPosition;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
+import org.scilab.forge.scirenderer.SciRendererException;
+import org.scilab.forge.scirenderer.texture.AnchorPosition;
+import org.scilab.forge.scirenderer.texture.Texture;
+import org.scilab.forge.scirenderer.texture.TextureManager;
 import org.scilab.forge.scirenderer.tranformations.DegenerateMatrixException;
 import org.scilab.forge.scirenderer.tranformations.Transformation;
 import org.scilab.forge.scirenderer.tranformations.TransformationFactory;
@@ -24,14 +25,14 @@ import org.scilab.modules.graphic_objects.axes.Axes;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
 import org.scilab.modules.graphic_objects.textObject.Text;
-import org.scilab.modules.renderer.JoGLView.axes.AxesDrawer;
 import org.scilab.modules.renderer.JoGLView.DrawerVisitor;
 
+import java.awt.Dimension;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_POSITION__;
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_FONT_ANGLE__;
+import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_POSITION__;
 
 /**
  *
@@ -48,25 +49,25 @@ public class TextManager {
     /**
      * The {@see Map} off existing {@see TextEntity}.
      */
-    private final Map<String, Sprite> spriteMap = new ConcurrentHashMap<String, Sprite>();
+    private final Map<String, Texture> spriteMap = new ConcurrentHashMap<String, Texture>();
 
     /**
-     * The used sprite manager.
+     * The used texture manager.
      */
-    private final SpriteManager spriteManager;
+    private final TextureManager textureManager;
 
     /**
-     * The bounds of the scale factor range for which the sprite does not
+     * The bounds of the scale factor range for which the texture does not
      * need to be updated.
      */
     private double[] FACTOR_UPDATE_INTERVAL = {0.99, 1.01};
 
     /**
      * Default constructor.
-     * @param spriteManager the sprite manager.
+     * @param textureManager the texture manager.
      */
-    public TextManager(SpriteManager spriteManager) {
-        this.spriteManager = spriteManager;
+    public TextManager(TextureManager textureManager) {
+        this.textureManager = textureManager;
     }
 
     /**
@@ -74,44 +75,42 @@ public class TextManager {
      * @param drawingTools the given {@see DrawingTools}.
      * @param colorMap the current {@see ColorMap}
      * @param text the given Scilab {@see Text}
-     * @throws DegenerateMatrixException 
+     * @throws SciRendererException if the draw fail.
      */
-    public final void draw(final DrawingTools drawingTools, final ColorMap colorMap, final Text text, final AxesDrawer axesDrawer) throws DegenerateMatrixException {
-        Sprite sprite = getSprite(colorMap, text);
+    public final void draw(final DrawingTools drawingTools, final ColorMap colorMap, final Text text) throws SciRendererException {
+        Texture texture = getTexture(colorMap, text);
 
-        /* The unscaled sprite's dimensions */
-        int[] spriteDims = getSpriteDims(colorMap, text);
+        /* The unscaled texture's dimensions */
+        Dimension spriteDims = getSpriteDims(colorMap, text);
 
         Transformation projection = drawingTools.getTransformationManager().getCanvasProjection();
 
-        Vector3d textPosition = new Vector3d(text.getPosition());
-
-        /* Compute the text box vectors and the text box to sprite dimension ratios */
-        Vector3d[] textBoxVectors =  computeTextBoxVectors(projection, text, sprite.getWidth(), sprite.getHeight());
-        double[] ratios = computeRatios(projection, text, textBoxVectors, sprite.getWidth(), sprite.getHeight(), spriteDims[0], spriteDims[1]);
+        /* Compute the text box vectors and the text box to texture dimension ratios */
+        Vector3d[] textBoxVectors =  computeTextBoxVectors(projection, text, texture.getDataProvider().getTextureSize());
+        double[] ratios = computeRatios(projection, text, textBoxVectors, texture.getDataProvider().getTextureSize(), spriteDims);
 
-        /* If text box mode is equal to filled, the sprite must be updated */
+        /* If text box mode is equal to filled, the texture must be updated */
         if (text.getTextBoxMode() == 2 && ratios[0] != 1.0) {
-            sprite = updateSprite(colorMap, text, ratios[0], ratios[1]);
+            texture = updateSprite(colorMap, text, ratios[0], ratios[1]);
         }
 
-        /* Compute the text sprite's actual position, which depends on the object's text box mode property */
-        Vector3d[] cornerPositions = computeTextPosition(projection, text, textBoxVectors, sprite.getWidth(), sprite.getHeight());
+        /* Compute the text texture's actual position, which depends on the object's text box mode property */
+        Vector3d[] cornerPositions = computeTextPosition(projection, text, textBoxVectors, texture.getDataProvider().getTextureSize());
 
         /* Draw in window coordinates */
         drawingTools.getTransformationManager().useWindowCoordinate();
 
         /* The Text object's rotation direction convention is opposite to the standard one, its angle is expressed in radians. */
-        drawingTools.draw(sprite, SpriteAnchorPosition.LOWER_LEFT, cornerPositions[0], -180.0*text.getFontAngle()/Math.PI);
+        drawingTools.draw(texture, AnchorPosition.LOWER_LEFT, cornerPositions[0], -180.0*text.getFontAngle()/Math.PI);
 
         drawingTools.getTransformationManager().useSceneCoordinate();
 
         /* Compute the corners of the text's bounding box in window coordinates */
-        Vector3d[] projCorners = null;
+        Vector3d[] projCorners;
         if (text.getTextBoxMode() == 2) {
             projCorners = computeProjTextBoxCorners(projection, cornerPositions[1], text.getFontAngle(), textBoxVectors);
         } else {
-            projCorners = computeProjCorners(projection, new Vector3d(text.getPosition()), text.getFontAngle(), sprite.getWidth(), sprite.getHeight());
+            projCorners = computeProjCorners(projection, new Vector3d(text.getPosition()), text.getFontAngle(), texture.getDataProvider().getTextureSize());
         }
 
         Vector3d[] corners = computeCorners(projection, projCorners);
@@ -128,11 +127,10 @@ public class TextManager {
      * and side vectors.  The Text's rotation is ignored, as it is not required for now.
      * @param projection the projection from object coordinates to window coordinates.
      * @param text the Scilab {@see Text}.
-     * @param spriteWidth the current text sprite's width (in pixels).
-     * @param spriteHeight the current text sprite's height (in pixels).
+     * @param dimension the current text texture's dimension (in pixels).
      * @return the text box width and height vectors (in object coordinates).
      */
-    private Vector3d[] computeTextBoxVectors(Transformation projection, Text text, int spriteWidth, int spriteHeight) {
+    private Vector3d[] computeTextBoxVectors(Transformation projection, Text text, Dimension dimension) {
         Double[] textBox = text.getTextBox();
 
         Vector3d[] textBoxVectors = new Vector3d[2];
@@ -141,8 +139,8 @@ public class TextManager {
         Vector3d projTextPosition = projection.project(textPosition);
 
         /* Compute the text label vectors in window coordinates */
-        Vector3d width = new Vector3d((double) spriteWidth, 0.0, 0.0);
-        Vector3d height = new Vector3d(0.0, (double) spriteHeight, 0.0);
+        Vector3d width = new Vector3d(dimension.getWidth(), 0.0, 0.0);
+        Vector3d height = new Vector3d(0.0, dimension.getHeight(), 0.0);
 
         Vector3d projTextWidth = projTextPosition.plus(width);
         Vector3d projTextHeight = projTextPosition.plus(height);
@@ -166,20 +164,18 @@ public class TextManager {
     }
 
     /**
-     * Computes and returns the minimum of the ratios between the text box and the text sprite's dimensions.
-     * This minimum ratio is determined for both the current text sprite and the unscaled text sprite.
+     * Computes and returns the minimum of the ratios between the text box and the text texture's dimensions.
+     * This minimum ratio is determined for both the current text texture and the unscaled text texture.
      * @param projection the projection from object coordinates to window coordinates.
      * @param text the Scilab {@see Text}.
      * @param textBoxVectors the text box width and height vectors (in object coordinates).
-     * @param spriteWidth the current text sprite's width (in pixels).
-     * @param spriteHeight the current text sprite's height (in pixels).
-     * @param baseSpriteWidth the unscaled text sprite's width (in pixels).
-     * @param baseSpriteHeight the unscaled text sprite's height (in pixels).
-     * @return the minimum ratios (2 elements: text box to current sprite and text box to unscaled sprite ratios).
+     * @param spriteDimension the current text texture's dimension (in pixels).
+     * @param baseSpriteDimension the unscaled text texture's dimension (in pixels).
+     * @return the minimum ratios (2 elements: text box to current texture and text box to unscaled texture ratios).
      */
-    private double[] computeRatios(Transformation projection, Text text, Vector3d[] textBoxVectors, int spriteWidth, int spriteHeight,
-        int baseSpriteWidth, int baseSpriteHeight) {
-        /* 1st element: ratio for the current sprite, 2nd element: ratio for the unscaled sprite */
+    private double[] computeRatios(Transformation projection, Text text, Vector3d[] textBoxVectors,  Dimension spriteDimension,
+                                   Dimension baseSpriteDimension) {
+        /* 1st element: ratio for the current texture, 2nd element: ratio for the unscaled texture */
         double[] ratios = new double[]{1.0, 1.0};
 
         /* Ratios are relevant only to the filled text box mode */
@@ -188,8 +184,8 @@ public class TextManager {
             Vector3d textBoxHeight = projection.projectDirection(textBoxVectors[1]);
 
             /* Compute the ratios. */
-            double minRatio = Math.min(Math.abs(textBoxWidth.getX() / spriteWidth), Math.abs(textBoxHeight.getY() / spriteHeight));
-            double baseMinRatio = Math.min(Math.abs(textBoxWidth.getX() / baseSpriteWidth), Math.abs(textBoxHeight.getY() / baseSpriteHeight));
+            double minRatio = Math.min(Math.abs(textBoxWidth.getX() / spriteDimension.width), Math.abs(textBoxHeight.getY() / spriteDimension.height));
+            double baseMinRatio = Math.min(Math.abs(textBoxWidth.getX() / baseSpriteDimension.width), Math.abs(textBoxHeight.getY() / baseSpriteDimension.height));
 
             ratios[0] = minRatio;
             ratios[1] = baseMinRatio;
@@ -207,12 +203,11 @@ public class TextManager {
      * @param projection the projection from object coordinates to window coordinates.
      * @param text the Scilab {@see Text}.
      * @param textBoxVectors the text box width and height vectors (in object coordinates).
-     * @param spriteWidth the text sprite's width (in pixels).
-     * @param spriteHeight the text sprite's height (in pixels).
+     * @param spriteDim the text texture's dimension (in pixels).
      * @return the lower-left corners of the Scilab {@see Text}'s text and of its text box in window coordinates (2 elements).
-     * @throws DegenerateMatrixException.
+     * @throws DegenerateMatrixException if the projection is not possible.
      */
-    private Vector3d[] computeTextPosition(Transformation projection, Text text, Vector3d[] textBoxVectors, int spriteWidth, int spriteHeight) throws DegenerateMatrixException {
+    private Vector3d[] computeTextPosition(Transformation projection, Text text, Vector3d[] textBoxVectors, Dimension spriteDim) throws DegenerateMatrixException {
         Vector3d[] cornerPositions = new Vector3d[2];
 
         Vector3d textPosition = new Vector3d(text.getPosition());
@@ -226,15 +221,13 @@ public class TextManager {
         cornerPositions[1] = new Vector3d(textPosition);
 
         if (text.getTextBoxMode() >= 1) {
-            Double[] textBox = text.getTextBox();
-
             Vector3d textBoxWidth = new Vector3d(textBoxVectors[0]);
             Vector3d textBoxHeight = new Vector3d(textBoxVectors[1]);
 
             double[] textBoxWidthData = textBoxWidth.getData();
             double[] textBoxHeightData = textBoxHeight.getData();
 
-            /* Reversed axes must be taken into account to correctly compute the text sprite's lower-left corner. */
+            /* Reversed axes must be taken into account to correctly compute the text texture's lower-left corner. */
             if (parentAxes.getXAxisReverse()) {
                 textBoxWidthData[0] = Math.abs(textBoxWidthData[0]);
                 textBoxHeightData[0] = Math.abs(textBoxHeightData[0]);
@@ -260,7 +253,7 @@ public class TextManager {
             textBoxWidth = projection.projectDirection(textBoxWidth);
             textBoxHeight = projection.projectDirection(textBoxHeight);
 
-            Vector3d[] projCorners = computeProjCorners(textPosition, text.getFontAngle(), spriteWidth, spriteHeight);
+            Vector3d[] projCorners = computeProjCorners(textPosition, text.getFontAngle(), spriteDim);
 
             Vector3d textWidth = projCorners[1].minus(projCorners[0]);
             Vector3d textHeight = projCorners[2].minus(projCorners[0]);
@@ -301,19 +294,13 @@ public class TextManager {
      * @param canvasProj the projection from object coordinates to window coordinates.
      * @param position the text's position in object coordinates.
      * @param fontAngle the text's font angle (radians).
-     * @param spriteWidth the text sprite's width (in pixels).
-     * @param spriteHeight the text sprite's height (in pixels).
+     * @param spriteDim the text texture's dimension (in pixels).
      * @return the corners' window coordinates (4-element array).
-     * @throws DegenerateMatrixException.
+     * @throws DegenerateMatrixException if the projection is not possible..
      */
-    private Vector3d[] computeProjCorners(Transformation canvasProj, Vector3d position, double fontAngle, int spriteWidth, int spriteHeight) throws DegenerateMatrixException {
-        Vector3d[] projCorners = new Vector3d[4];
-
+    private Vector3d[] computeProjCorners(Transformation canvasProj, Vector3d position, double fontAngle, Dimension spriteDim) throws DegenerateMatrixException {
         position = canvasProj.project(position);
-
-        projCorners = computeProjCorners(position, fontAngle, spriteWidth, spriteHeight);
-
-        return projCorners;
+        return computeProjCorners(position, fontAngle, spriteDim);
     }
 
     /**
@@ -321,18 +308,15 @@ public class TextManager {
      * @param canvasProj the projection from object coordinates to window coordinates.
      * @param position the position of the text box's lower-left corner in window cordinates.
      * @param fontAngle the text's font angle (radians).
+     * @param textBoxVectors text box orientation.
      * @return the corners' window coordinates (4-element array).
-     * @throws DegenerateMatrixException.
+     * @throws DegenerateMatrixException if the projection is not possible.
      */
     private Vector3d[] computeProjTextBoxCorners(Transformation canvasProj, Vector3d position, double fontAngle, Vector3d[] textBoxVectors) throws DegenerateMatrixException {
-        Vector3d[] projCorners = new Vector3d[4];
-
         double projTextBoxWidth = canvasProj.projectDirection(textBoxVectors[0]).getNorm();
         double projTextBoxHeight = canvasProj.projectDirection(textBoxVectors[1]).getNorm();
 
-        projCorners = computeProjCorners(position, fontAngle, (int) projTextBoxWidth, (int) projTextBoxHeight);
-
-        return projCorners;
+        return computeProjCorners(position, fontAngle, new Dimension((int) projTextBoxWidth, (int) projTextBoxHeight));
     }
 
     /**
@@ -340,12 +324,11 @@ public class TextManager {
      * The returned corners are in the following order: lower-left, lower-right, upper-left and upper-right.
      * @param projPosition the text's position in window coordinates.
      * @param fontAngle the text's font angle (radians).
-     * @param spriteWidth the text sprite's width (in pixels).
-     * @param spriteHeight the text sprite's height (in pixels).
+     * @param spriteDim the text texture's dimension (in pixels).
      * @return the corners' window coordinates (4-element array).
-     * @throws DegenerateMatrixException.
+     * @throws DegenerateMatrixException if the projection is not possible.
      */
-    private Vector3d[] computeProjCorners(Vector3d projPosition, double fontAngle, int spriteWidth, int spriteHeight) throws DegenerateMatrixException {
+    private Vector3d[] computeProjCorners(Vector3d projPosition, double fontAngle, Dimension spriteDim) throws DegenerateMatrixException {
         Vector3d[] projCorners = new Vector3d[4];
 
         /*
@@ -357,8 +340,8 @@ public class TextManager {
 
         projCorners[0] = projPosition;
 
-        Vector3d width = new Vector3d((double) spriteWidth, 0.0, 0.0);
-        Vector3d height = new Vector3d(0.0, (double) spriteHeight, 0.0);
+        Vector3d width = new Vector3d(spriteDim.width, 0.0, 0.0);
+        Vector3d height = new Vector3d(0.0, spriteDim.height, 0.0);
 
         width = projRotation.projectDirection(width);
         height = projRotation.projectDirection(height);
@@ -429,110 +412,101 @@ public class TextManager {
     }
 
     /**
-     * Return the SciRenderer {@see Sprite} corresponding to the given Scilab {@see Text}.
+     * Return the SciRenderer {@see Texture} corresponding to the given Scilab {@see Text}.
      * @param colorMap the current color map.
      * @param text the given Scilab {@see Text}.
-     * @return the SciRenderer {@see Sprite} corresponding to the given Scilab {@see Text}.
+     * @return the SciRenderer {@see Texture} corresponding to the given Scilab {@see Text}.
      */
-    private Sprite getSprite(final ColorMap colorMap, final Text text) {
-        Sprite sprite = spriteMap.get(text.getIdentifier());
-        if (sprite == null) {
+    private Texture getTexture(final ColorMap colorMap, final Text text) {
+        Texture texture = spriteMap.get(text.getIdentifier());
+        if (texture == null) {
             if (text.getTextBoxMode() == 2) {
-                /* Create an unscaled sprite (scale factor equal to 1) */
-                sprite = createSprite(colorMap, text, 1.0);
+                /* Create an unscaled texture (scale factor equal to 1) */
+                texture = createSprite(colorMap, text, 1.0);
             } else {
-                sprite = createSprite(colorMap, text);
+                texture = createSprite(colorMap, text);
             }
-            spriteMap.put(text.getIdentifier(), sprite);
+            spriteMap.put(text.getIdentifier(), texture);
         }
-        return sprite;
+        return texture;
     }
 
     /**
-     * Updates a sprite according to a scale factor, which is the ratio by which the sprite is enlarged.
+     * Updates a texture according to a scale factor, which is the ratio by which the texture is enlarged.
      * @param colorMap the current color map.
      * @param text the Scilab Text.
-     * @param scaleFactor the scale factor relative to the current sprite's dimensions.
-     * @param baseScaleFactor the scale factor relative to the unscaled sprite's dimensions.
+     * @param scaleFactor the scale factor relative to the current texture's dimensions.
+     * @param baseScaleFactor the scale factor relative to the unscaled texture's dimensions.
+     * @return the corresponding texture.
      */
-    private Sprite updateSprite(final ColorMap colorMap, final Text text, double scaleFactor, double baseScaleFactor) {
-        Sprite sprite = spriteMap.get(text.getIdentifier());
+    private Texture updateSprite(final ColorMap colorMap, final Text text, double scaleFactor, double baseScaleFactor) {
+        Texture texture = spriteMap.get(text.getIdentifier());
 
-        /* Create a new sprite if the scale factor falls outside of the range */
+        /* Create a new texture if the scale factor falls outside of the range */
         if (scaleFactor < FACTOR_UPDATE_INTERVAL[0] || scaleFactor > FACTOR_UPDATE_INTERVAL[1]) {
             dispose(text.getIdentifier());
-            sprite = createSprite(colorMap, text, baseScaleFactor);
-            spriteMap.put(text.getIdentifier(), sprite);
+            texture = createSprite(colorMap, text, baseScaleFactor);
+            spriteMap.put(text.getIdentifier(), texture);
         }
 
-        return sprite;
+        return texture;
     }
 
     /**
-     * Returns the dimensions of the SciRenderer {@see Sprite} corresponding to the given Scilab {@see Text}.
+     * Returns the dimensions of the SciRenderer {@see Texture} corresponding to the given Scilab {@see Text}.
      * The dimensions are in pixels (width, height).
      * @param colorMap the current color map.
      * @param text the given Scilab {@see Text}.
-     * @return the sprite's dimensions (2-element array).
+     * @return the texture's dimensions (2-element array).
      */
-    private int[] getSpriteDims(final ColorMap colorMap, final Text text) {
-        int[] spriteDims = new int[2];
-        Sprite sprite = spriteMap.get(text.getIdentifier());
-        if (sprite == null || true) {
-            TextSpriteDrawer spriteDrawer = null;
-
-            if (text.getTextBoxMode() == 2) {
-                /* Set the scale factor to 1 in order to return the dimensions of an unscaled sprite. */
-                spriteDrawer = new TextSpriteDrawer(spriteManager, colorMap, text, 1.0);
-            } else {
-                spriteDrawer = new TextSpriteDrawer(spriteManager, colorMap, text);
-            }
+    private Dimension getSpriteDims(final ColorMap colorMap, final Text text) {
+        TextSpriteDrawer spriteDrawer;
 
-            spriteDims[0] = spriteDrawer.getWidth();
-            spriteDims[1] = spriteDrawer.getHeight();
+        if (text.getTextBoxMode() == 2) {
+            /* Set the scale factor to 1 in order to return the dimensions of an unscaled texture. */
+            spriteDrawer = new TextSpriteDrawer(colorMap, text, 1.0);
         } else {
-            spriteDims[0] = sprite.getWidth();
-            spriteDims[1] = sprite.getHeight();
+            spriteDrawer = new TextSpriteDrawer(colorMap, text);
         }
 
-        return spriteDims;
+        return spriteDrawer.getTextureSize();
     }
 
     /**
-     * Create a sprite for the given text object.
+     * Create a texture for the given text object.
      * @param colorMap the current colormap.
      * @param textObject the given text object.
-     * @return a new sprite for the given text object.
+     * @return a new texture for the given text object.
      */
-    private Sprite createSprite(final ColorMap colorMap, final Text textObject) {
-        TextSpriteDrawer spriteDrawer = new TextSpriteDrawer(spriteManager, colorMap, textObject);
-        Sprite sprite = spriteManager.createRotatableSprite(spriteDrawer.getWidth(), spriteDrawer.getHeight());
-        sprite.setDrawer(spriteDrawer);
-        return sprite;
+    private Texture createSprite(final ColorMap colorMap, final Text textObject) {
+        TextSpriteDrawer spriteDrawer = new TextSpriteDrawer(colorMap, textObject);
+        Texture texture = textureManager.createTexture();
+        texture.setDrawer(spriteDrawer);
+        return texture;
     }
 
     /**
-     * Creates a sprite for the given text object, scaled by the given scale factor.
+     * Creates a texture for the given text object, scaled by the given scale factor.
      * @param colorMap the current colormap.
      * @param textObject the given text object.
      * @param scaleFactor the scale factor to apply.
-     * @return a new sprite for the given text object.
+     * @return a new texture for the given text object.
      */
-    private Sprite createSprite(final ColorMap colorMap, final Text textObject, double scaleFactor) {
-        TextSpriteDrawer spriteDrawer = new TextSpriteDrawer(spriteManager, colorMap, textObject, scaleFactor);
-        Sprite sprite = spriteManager.createRotatableSprite(spriteDrawer.getWidth(), spriteDrawer.getHeight());
-        sprite.setDrawer(spriteDrawer);
-        return sprite;
+    private Texture createSprite(final ColorMap colorMap, final Text textObject, double scaleFactor) {
+        TextSpriteDrawer spriteDrawer = new TextSpriteDrawer(colorMap, textObject, scaleFactor);
+        Texture texture = textureManager.createTexture();
+        texture.setDrawer(spriteDrawer);
+        return texture;
     }
 
     /**
-     * Dispose the sprite corresponding to the given id.
+     * Dispose the texture corresponding to the given id.
      * @param id the given id.
      */
     public void dispose(String id) {
-        Sprite sprite = spriteMap.get(id);
-        if (sprite != null) {
-            spriteManager.dispose(sprite);
+        Texture texture = spriteMap.get(id);
+        if (texture != null) {
+            textureManager.dispose(texture);
             spriteMap.remove(id);
         }
     }
@@ -541,7 +515,7 @@ public class TextManager {
      * Dispose all the text sprites.
      */
     public void disposeAll() {
-        spriteManager.dispose(spriteMap.values());
+        textureManager.dispose(spriteMap.values());
         spriteMap.clear();
     }
 
@@ -550,24 +524,22 @@ public class TextManager {
      * @param text the given Scilab {@see Text}.
      */
     public static void updateTextCorners(Text text) {
-        double[] retRatio = new double[1];
         Vector3d[] projCorners = null;
 
         DrawerVisitor currentVisitor = DrawerVisitor.getVisitor(text.getParentFigure());
         Transformation currentProj = currentVisitor.getAxesDrawer().getProjection(text.getParentAxes());
 
-        int[] spriteDims = currentVisitor.getTextManager().getSpriteDims(currentVisitor.getColorMap(), text);
-        Vector3d textPosition = new Vector3d(text.getPosition());
+        Dimension spriteDim = currentVisitor.getTextManager().getSpriteDims(currentVisitor.getColorMap(), text);
 
         /* Compute the corners */
         try {
-            Vector3d[] textBoxVectors = currentVisitor.getTextManager().computeTextBoxVectors(currentProj, text, spriteDims[0], spriteDims[1]);
-            Vector3d[] cornerPositions = currentVisitor.getTextManager().computeTextPosition(currentProj, text, textBoxVectors, spriteDims[0], spriteDims[1]);
+            Vector3d[] textBoxVectors = currentVisitor.getTextManager().computeTextBoxVectors(currentProj, text, spriteDim);
+            Vector3d[] cornerPositions = currentVisitor.getTextManager().computeTextPosition(currentProj, text, textBoxVectors, spriteDim);
 
             if (text.getTextBoxMode() == 2) {
                 projCorners = currentVisitor.getTextManager().computeProjTextBoxCorners(currentProj, cornerPositions[1], text.getFontAngle(), textBoxVectors);
             } else {
-                projCorners = currentVisitor.getTextManager().computeProjCorners(cornerPositions[0], text.getFontAngle(), spriteDims[0], spriteDims[1]);
+                projCorners = currentVisitor.getTextManager().computeProjCorners(cornerPositions[0], text.getFontAngle(), spriteDim);
             }
         } catch (DegenerateMatrixException e) {
             // TODO Auto-generated catch block
index a907c79..96fe25d 100644 (file)
@@ -14,32 +14,28 @@ package org.scilab.modules.renderer.JoGLView.text;
 
 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
 import org.scilab.forge.scirenderer.shapes.appearance.Color;
-import org.scilab.forge.scirenderer.sprite.SpriteDrawer;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
+import org.scilab.forge.scirenderer.texture.TextureDrawer;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
 import org.scilab.modules.graphic_objects.textObject.Text;
 import org.scilab.modules.renderer.JoGLView.util.ColorFactory;
 import org.scilab.modules.renderer.JoGLView.util.TextObjectSpriteDrawer;
 
-import java.awt.Font;
-
 /**
- * A {@see SpriteDrawer} who draw a Scilab {@see Text} object.
+ * A {@see TextureDrawer} that draw a Scilab {@see Text} object.
  * @author Pierre Lando
  */
-class TextSpriteDrawer extends TextObjectSpriteDrawer implements SpriteDrawer {
+class TextSpriteDrawer extends TextObjectSpriteDrawer implements TextureDrawer {
 
     /** The scale factor. */
     private double scaleFactor = 1.0;
 
     /**
      * Default constructor.
-     * @param spriteManager the sprite manager to use.
      * @param colorMap the color map to use.
      * @param textObject the scilab {@see Text} to draw.
      */
-    TextSpriteDrawer(final SpriteManager spriteManager, final ColorMap colorMap, final Text textObject) {
-        super(spriteManager, colorMap, textObject);
+    TextSpriteDrawer(final ColorMap colorMap, final Text textObject) {
+        super(colorMap, textObject);
         setAlignmentFactor(computeAlignmentFactor(textObject));
         Appearance appearance = computeAppearance(colorMap, textObject);
         
@@ -50,13 +46,12 @@ class TextSpriteDrawer extends TextObjectSpriteDrawer implements SpriteDrawer {
     /**
      * Constructor.
      * Specifies a scale factor used to scale the text matrix.
-     * @param spriteManager the sprite manager to use.
      * @param colorMap the color map to use.
      * @param textObject the Scilab {@link Text} to draw.
      * @param scaleFactor the scale factor to apply.
      */
-    TextSpriteDrawer(final SpriteManager spriteManager, final ColorMap colorMap, final Text textObject, double scaleFactor) {
-        super(spriteManager, colorMap, textObject, scaleFactor);
+    TextSpriteDrawer(final ColorMap colorMap, final Text textObject, double scaleFactor) {
+        super(colorMap, textObject, scaleFactor);
         setAlignmentFactor(computeAlignmentFactor(textObject));
         Appearance appearance = computeAppearance(colorMap, textObject);
 
index 9c56940..c234c8d 100644 (file)
@@ -12,10 +12,9 @@ package org.scilab.modules.renderer.JoGLView.util;
 
 import org.scilab.forge.jlatexmath.TeXConstants;
 import org.scilab.forge.jlatexmath.TeXFormula;
-import org.scilab.forge.scirenderer.sprite.SpriteDrawer;
-import org.scilab.forge.scirenderer.sprite.SpriteDrawingTools;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
-import org.scilab.forge.scirenderer.sprite.TextEntity;
+import org.scilab.forge.scirenderer.texture.TextEntity;
+import org.scilab.forge.scirenderer.texture.TextureDrawer;
+import org.scilab.forge.scirenderer.texture.TextureDrawingTools;
 import org.scilab.modules.console.utils.ScilabSpecialTextUtilities;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
 import org.scilab.modules.graphic_objects.textObject.Font;
@@ -29,12 +28,12 @@ import java.awt.Dimension;
 /**
  * @author Pierre Lando
  */
-public class FormattedTextSpriteDrawer implements SpriteDrawer {
+public class FormattedTextSpriteDrawer implements TextureDrawer {
     private final TextEntity textEntity;
     private final Dimension dimension;
     private final Icon icon;
 
-    public FormattedTextSpriteDrawer(ColorMap colorMap, SpriteManager spriteManager, FormattedText formattedText) {
+    public FormattedTextSpriteDrawer(ColorMap colorMap, FormattedText formattedText) {
         if (formattedText != null) {
             String text = formattedText.getText();
             Font font = formattedText.getFont();
@@ -61,7 +60,7 @@ public class FormattedTextSpriteDrawer implements SpriteDrawer {
                 textEntity.setTextUseFractionalMetrics(font.getFractional());
                 textEntity.setTextAntiAliased(false);
 
-                dimension = spriteManager.getSize(textEntity);
+                dimension = textEntity.getSize();
             }
         } else {
             icon = null;
@@ -71,7 +70,7 @@ public class FormattedTextSpriteDrawer implements SpriteDrawer {
     }
 
     @Override
-    public void draw(SpriteDrawingTools drawingTools) {
+    public void draw(TextureDrawingTools drawingTools) {
         if (textEntity != null) {
             drawingTools.draw(textEntity, 0, 0);
         } else if (icon != null) {
@@ -80,6 +79,11 @@ public class FormattedTextSpriteDrawer implements SpriteDrawer {
     }
 
     @Override
+    public Dimension getTextureSize() {
+        return new Dimension(dimension);
+    }
+
+    @Override
     public OriginPosition getOriginPosition() {
         return OriginPosition.UPPER_LEFT;
     }
index 70c7961..5b2f492 100644 (file)
@@ -17,10 +17,9 @@ import org.scilab.forge.jlatexmath.TeXFormula;
 import org.scilab.forge.jlatexmath.TeXIcon;
 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
 import org.scilab.forge.scirenderer.shapes.appearance.Color;
-import org.scilab.forge.scirenderer.sprite.SpriteDrawer;
-import org.scilab.forge.scirenderer.sprite.SpriteDrawingTools;
-import org.scilab.forge.scirenderer.sprite.SpriteManager;
-import org.scilab.forge.scirenderer.sprite.TextEntity;
+import org.scilab.forge.scirenderer.texture.TextEntity;
+import org.scilab.forge.scirenderer.texture.TextureDrawer;
+import org.scilab.forge.scirenderer.texture.TextureDrawingTools;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
 import org.scilab.modules.graphic_objects.textObject.Text;
 import org.scilab.modules.graphic_objects.textObject.TextObject;
@@ -34,14 +33,13 @@ import java.awt.Font;
  * A {@see SpriteDrawer} who draw a Scilab {@see Text} object.
  * @author Pierre Lando
  */
-public class TextObjectSpriteDrawer implements SpriteDrawer {
+public class TextObjectSpriteDrawer implements TextureDrawer {
 
     /**
      * Scilab text margin.
      */
     private static final int MARGIN = 2;
 
-    private final SpriteManager spriteManager;
     private Appearance appearance;
     private int thickness;
     private final Object[][] entities;
@@ -56,12 +54,10 @@ public class TextObjectSpriteDrawer implements SpriteDrawer {
 
     /**
      * Default constructor.
-     * @param spriteManager the sprite manager to use.
      * @param colorMap the color map to use.
      * @param textObject the scilab {@see Text} to draw.
      */
-    public TextObjectSpriteDrawer(final SpriteManager spriteManager, final ColorMap colorMap, final TextObject textObject) {
-        this.spriteManager = spriteManager;
+    public TextObjectSpriteDrawer(final ColorMap colorMap, final TextObject textObject) {
         this.spaceWidth = computeSpaceWidth();
 
         String[][] stringArray = computeTextData(textObject);
@@ -88,13 +84,11 @@ public class TextObjectSpriteDrawer implements SpriteDrawer {
     /**
      * Constructor.
      * Specifies a scale factor used to scale the text matrix.
-     * @param spriteManager the sprite manager to use.
      * @param colorMap the color map to used.
      * @param textObject the scilab {@see TextObject} to draw.
      * @param scaleFactor the scale factor to apply.
      */
-    public TextObjectSpriteDrawer(final SpriteManager spriteManager, final ColorMap colorMap, final TextObject textObject, double scaleFactor) {
-        this.spriteManager = spriteManager;
+    public TextObjectSpriteDrawer(final ColorMap colorMap, final TextObject textObject, double scaleFactor) {
         this.spaceWidth = computeSpaceWidth();
 
         String[][] stringArray = computeTextData(textObject);
@@ -145,7 +139,7 @@ public class TextObjectSpriteDrawer implements SpriteDrawer {
                         textEntity.setTextColor(textColor);
                         textEntity.setFont(font);
                         entities[column][line] = textEntity;
-                        dimension = spriteManager.getSize(textEntity);
+                        dimension = textEntity.getSize();
                     }
 
                     if (dimension != null) {
@@ -178,7 +172,7 @@ public class TextObjectSpriteDrawer implements SpriteDrawer {
     }
 
     @Override
-    public void draw(SpriteDrawingTools drawingTools) {
+    public void draw(TextureDrawingTools drawingTools) {
         // Draw background.
         if (appearance.getFillColor().getAlphaAsFloat() != 0) {
             drawingTools.clear(appearance.getFillColor());
@@ -197,7 +191,7 @@ public class TextObjectSpriteDrawer implements SpriteDrawer {
                 if (entity != null) {
                     if (entity instanceof TextEntity) {
                         TextEntity textEntity = (TextEntity) entity;
-                        double deltaX = alignmentFactor * (columnWidth[column] - spriteManager.getSize(textEntity).getWidth());
+                        double deltaX = alignmentFactor * (columnWidth[column] - textEntity.getSize().getWidth());
                         drawingTools.draw(textEntity, (int) (x + deltaX), y);
                         y += lineHeight[line] + currentMargin;
                         line++;
@@ -230,6 +224,11 @@ public class TextObjectSpriteDrawer implements SpriteDrawer {
         return OriginPosition.UPPER_LEFT;
     }
 
+    @Override
+    public Dimension getTextureSize() {
+        return new Dimension(width, height);
+    }
+
     /**
      * Return the sprite width needed by this drawer.
      * @return the sprite width needed by this drawer.
@@ -330,7 +329,7 @@ public class TextObjectSpriteDrawer implements SpriteDrawer {
      */
     private int computeSpaceWidth() {
         TextEntity spaceText = new TextEntity("_");
-        return (int) Math.ceil(spriteManager.getSize(spaceText).getWidth());
+        return (int) Math.ceil(spaceText.getSize().getWidth());
     }
 
     /**