Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.impl / src / main / java / org / gvsig / tools / swing / impl / DefaultToolsSwingManager.java @ 1632

History | View | Annotate | Download (4.83 KB)

1

    
2
package org.gvsig.tools.swing.impl;
3

    
4
import java.awt.Color;
5
import java.awt.Dimension;
6
import java.awt.image.BufferedImage;
7
import java.awt.image.WritableRaster;
8
import javax.swing.ComboBoxModel;
9
import javax.swing.JButton;
10
import javax.swing.JComboBox;
11
import javax.swing.JList;
12
import javax.swing.JSlider;
13
import javax.swing.JTextField;
14
import javax.swing.tree.TreeModel;
15
import org.gvsig.tools.swing.api.ActionListenerSupport;
16
import org.gvsig.tools.swing.api.ColorChooserController;
17
import org.gvsig.tools.swing.api.JListWithCheckbox;
18
import org.gvsig.tools.swing.api.ToolsSwingManager;
19
import org.gvsig.tools.swing.impl.bufferedImage.VirtualBufferedImageHelper;
20
import org.gvsig.tools.swing.impl.bufferedImage.VirtualBufferedImageHelper.VirtualDataBuffer;
21

    
22

    
23
public class DefaultToolsSwingManager implements ToolsSwingManager {
24

    
25
    private Dimension maxPhysicalSizeOfBufferedImage;
26

    
27
    @Override
28
    public ActionListenerSupport createActionListenerSupport() {
29
        return new DefaultActionListenerSupport();
30
    }
31

    
32
    @Override
33
    public JListWithCheckbox createJListWithCheckbox(JList wrappedList) {
34
        return new DefaultJListWithCheckbox(wrappedList);
35
    }
36

    
37
    @Override
38
    public void setTreeModel(JComboBox comboBox, TreeModel aTreeModel) {
39
        TreeComboUtils.setTreeModel(comboBox, aTreeModel);
40
    }
41

    
42
    @Override
43
    public ComboBoxModel createComboBoxModel(TreeModel treeModel) {
44
        return TreeComboUtils.createComboBoxModel(treeModel);
45
    }
46

    
47

    
48
    @Override
49
    public BufferedImage createBufferedImage(int w, int h, int type) {
50
        if(getMaxPhysicalSizeOfBufferedImage().getWidth() < w || getMaxPhysicalSizeOfBufferedImage().getHeight() < h){
51
            return createVirtualBufferedImage(w,h,type);
52
        }
53
        return new BufferedImage(w,h,type);
54
    }
55

    
56
    @Override
57
    public BufferedImage createVirtualBufferedImage(int w, int h, int type) {
58
        return VirtualBufferedImageHelper.createVirtualBufferedImage(w, h, type);
59
    }
60

    
61
    @Override
62
    public BufferedImage copyBufferedImage(BufferedImage img) {
63
        WritableRaster sourceRaster = img.getRaster();
64

    
65
        BufferedImage newImage;
66
        if(sourceRaster.getDataBuffer() instanceof VirtualDataBuffer ){
67
            newImage = VirtualBufferedImageHelper.createVirtualBufferedImage(
68
                img.getWidth(), 
69
                img.getHeight(), 
70
                img.getSampleModel(), 
71
                img.getColorModel()
72
            );
73
        } else {
74
            newImage = createBufferedImage(img.getWidth(), img.getHeight(), img.getType());
75
        }
76

    
77
        WritableRaster raster = newImage.getRaster();
78
        img.copyData(raster);
79
        return newImage;
80
    }
81

    
82
    @Override
83
    public void setMaxPhysicalSizeOfBufferedImage(Dimension dimension) {
84
        this.maxPhysicalSizeOfBufferedImage = dimension;
85
    }
86

    
87
    @Override
88
    public Dimension getMaxPhysicalSizeOfBufferedImage() {
89
        if(this.maxPhysicalSizeOfBufferedImage == null){
90
            this.maxPhysicalSizeOfBufferedImage = new Dimension(2000, 2000);
91
        }
92
        return this.maxPhysicalSizeOfBufferedImage;
93
    }
94

    
95
    @Override
96
    public ColorChooserController createColorChooserController(JTextField txtLabel, JButton btnShowDialog, JSlider sldAlpha, boolean allowNull) {
97
        return new DefaultColorChooserController(txtLabel, btnShowDialog, sldAlpha, allowNull);
98
    }
99

    
100
    @Override
101
    public ColorChooserController createColorChooserController(JTextField txtLabel, JButton btnShowDialog) {
102
        return new DefaultColorChooserController(txtLabel, btnShowDialog);
103
    }
104

    
105
    @Override
106
    public ColorChooserController createColorChooserController(JTextField txtLabel, JButton btnShowDialog, JSlider sldAlpha) {
107
        return new DefaultColorChooserController(txtLabel, btnShowDialog, sldAlpha);
108
    }
109

    
110
    @Override
111
    public Color alphaBlendingWithOpaqueBackground(Color bgColor, Color fgColor) {
112
        // https://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending
113
        Color src = fgColor;
114
        Color dst = bgColor;
115

    
116
        // double outa = 1;
117
        double srca = src.getAlpha() / 255.0;
118
        double srca_1 = (1 - srca);
119

    
120
        Color color = new Color(
121
            (int)(src.getRed()  * srca + dst.getRed()  * srca_1) & 0xff,
122
            (int)(src.getGreen()* srca + dst.getGreen()* srca_1) & 0xff,
123
            (int)(src.getBlue() * srca + dst.getBlue() * srca_1) & 0xff
124
        );
125
        return color;        
126
    }
127
    
128
    @Override
129
    public Color opaqueColor(Color src) {
130
        // https://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending
131
        double srca = src.getAlpha() / 255.0;
132
        double srca_1 = (1 - srca);
133

    
134
        Color color = new Color(
135
            (int)(src.getRed()  * srca + 255  * srca_1) & 0xff,
136
            (int)(src.getGreen()* srca + 255 * srca_1) & 0xff,
137
            (int)(src.getBlue() * srca + 255 * srca_1) & 0xff
138
        );
139
        return color;
140
    }
141
}