Adds possibility to color marks in scatter plots
[scilab.git] / scilab / modules / renderer / src / java / org / scilab / modules / renderer / JoGLView / mark / MarkSpriteManager.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009-2012 - DIGITEO - Pierre Lando
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  */
11 package org.scilab.modules.renderer.JoGLView.mark;
12
13 import org.scilab.forge.scirenderer.shapes.appearance.Appearance;
14 import org.scilab.forge.scirenderer.texture.Texture;
15 import org.scilab.forge.scirenderer.texture.TextureManager;
16 import org.scilab.modules.graphic_objects.contouredObject.ContouredObject;
17 import org.scilab.modules.graphic_objects.contouredObject.Mark;
18 import org.scilab.modules.graphic_objects.figure.ColorMap;
19 import org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties;
20
21 import java.util.Map;
22 import java.util.concurrent.ConcurrentHashMap;
23
24 /**
25  *
26  * This class maintains a mark sprite for graphic entities.
27  *
28  * @author Pierre Lando
29  */
30 public class MarkSpriteManager {
31
32     /**
33      * The SciRender sprite manager.
34      */
35     private final TextureManager textureManager;
36
37     /**
38      * The sprite map.
39      */
40     private final Map<Integer, Texture> spriteMap = new ConcurrentHashMap<Integer, Texture>();
41
42
43     /**
44      * Default constructor.
45      * @param textureManager the texture manager to use.
46      */
47     public MarkSpriteManager(TextureManager textureManager) {
48         this.textureManager = textureManager;
49     }
50
51     /**
52      * Return the mark sprite for the given contoured object.
53      *
54      * @param contouredObject the given contoured object.
55      * @param colorMap the current color map.
56      * @return the mark sprite for the given contoured object.
57      */
58     public Texture getMarkSprite(ContouredObject contouredObject, ColorMap colorMap, Appearance appearance) {
59         Integer id = contouredObject.getIdentifier();
60         Texture sprite = spriteMap.get(id);
61         if (sprite == null) {
62             Integer selectedColor = contouredObject.getSelected() ? contouredObject.getSelectedColor() : null;
63             sprite = MarkSpriteFactory.getMarkSprite(textureManager, contouredObject.getMark(), selectedColor, colorMap, appearance);
64             spriteMap.put(id, sprite);
65         }
66         return sprite;
67     }
68
69     /**
70      * Return the mark sprite for the given contoured object.
71      * @param id the given contoured object's identifier.
72      * @param mark the given contoured object's Mark.
73      * @param colorMap the current color map.
74      * @return the mark sprite for the given contoured object.
75      */
76     public Texture getMarkSprite(Integer id, Mark mark, ColorMap colorMap, Appearance appearance) {
77         Texture sprite = spriteMap.get(id);
78         if (sprite == null) {
79             sprite = MarkSpriteFactory.getMarkSprite(textureManager, mark, null, colorMap, appearance);
80             spriteMap.put(id, sprite);
81         }
82         return sprite;
83     }
84
85     /**
86      * Update the data if needed.
87      * @param id the modified object.
88      * @param property the changed property.
89      */
90     public void update(Integer id, int property) {
91
92         /**
93          * If the Mark properties have changed.
94          * Dispose the involved mark sprite.
95          */
96         if (property == GraphicObjectProperties.__GO_MARK_MODE__
97                 || property == GraphicObjectProperties.__GO_MARK_STYLE__
98                 || property == GraphicObjectProperties.__GO_MARK_SIZE_UNIT__
99                 || property == GraphicObjectProperties.__GO_MARK_SIZE__
100                 || property == GraphicObjectProperties.__GO_MARK_FOREGROUND__
101                 || property == GraphicObjectProperties.__GO_MARK_BACKGROUND__
102                 || property == GraphicObjectProperties.__GO_LINE_THICKNESS__
103                 || property == GraphicObjectProperties.__GO_SELECTED__
104                 || property == GraphicObjectProperties.__GO_COLOR_SET__) {
105             dispose(id);
106         }
107     }
108
109     /**
110      * Dispose the sprite corresponding to the given id.
111      * @param id the given id.
112      */
113     public void dispose(Integer id) {
114         Texture sprite = spriteMap.get(id);
115         textureManager.dispose(sprite);
116         spriteMap.remove(id);
117     }
118
119     /**
120      * Dispose all the mark sprite.
121      */
122     public void disposeAll() {
123         textureManager.dispose(spriteMap.values());
124         spriteMap.clear();
125     }
126 }