| 148 | /// |
| 149 | /// - switchDisabledTrackImage |
| 150 | public class Switch extends Component implements ActionSource, ReleasableComponent { |
| 151 | |
| 152 | private final EventDispatcher dispatcher = new EventDispatcher(); |
| 153 | private final EventDispatcher changeDispatcher = new EventDispatcher(); |
| 154 | private final int valign = CENTER; |
| 155 | private boolean value; |
| 156 | private Image thumbOnImage; |
| 157 | private Image thumbOffImage; |
| 158 | private Image thumbDisabledImage; |
| 159 | private Image trackOnImage; |
| 160 | private Image trackOffImage; |
| 161 | private Image trackDisabledImage; |
| 162 | private boolean dragged; |
| 163 | private long dragStartTime; |
| 164 | private int pressX; |
| 165 | private int pressY; |
| 166 | private int deltaX; //pressX - currentdragX |
| 167 | private int deltaY; |
| 168 | private final ActionListener pointerPressed = new ActionListener() { |
| 169 | @Override |
| 170 | public void actionPerformed(ActionEvent evt) { |
| 171 | Form f = getComponentForm(); |
| 172 | if (f != null) { |
| 173 | f.addComponentAwaitingRelease(Switch.this); |
| 174 | } |
| 175 | dragged = false; |
| 176 | dragStartTime = System.currentTimeMillis(); |
| 177 | deltaX = 0; |
| 178 | deltaY = 0; |
| 179 | pressX = evt.getX(); |
| 180 | pressY = evt.getY(); |
| 181 | } |
| 182 | }; |
| 183 | private final ActionListener pointerDragged = new ActionListener() { |
| 184 | @Override |
| 185 | public void actionPerformed(ActionEvent evt) { |
| 186 | |
| 187 | dragged = true; |
| 188 | deltaX = pressX - evt.getX(); |
| 189 | deltaY = pressY - evt.getY(); |
| 190 | if (Math.abs(deltaY) >= Math.abs(deltaX * 0.5)) { |
| 191 | dragged = false; |
| 192 | deltaX = 0; |
| 193 | deltaY = 0; |
| 194 | } else { |
| 195 | evt.consume(); |
| 196 | } |
| 197 | } |
| 198 | }; |
| 199 | private boolean animationLock; |
| 200 | private final ActionListener pointerReleased = new ActionListener() { |
| 201 | private final int tapThreshold = CN.convertToPixels(1); |
| 202 | |
| 203 | private boolean dragWasActuallyATap() { |
| 204 | return System.currentTimeMillis() - dragStartTime < 60 && Math.abs(deltaX) < tapThreshold; |
| 205 | } |
| 206 | |
| 207 | @Override |