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 |
} |