1 | package org.openstreetmap.josm.gui.layer.markerlayer;
|
---|
2 |
|
---|
3 | import java.awt.Graphics;
|
---|
4 | import java.awt.Insets;
|
---|
5 | import java.awt.Point;
|
---|
6 | import java.awt.Rectangle;
|
---|
7 |
|
---|
8 | import javax.swing.BorderFactory;
|
---|
9 | import javax.swing.border.BevelBorder;
|
---|
10 | import javax.swing.border.Border;
|
---|
11 |
|
---|
12 | import org.openstreetmap.josm.Main;
|
---|
13 | import org.openstreetmap.josm.data.coor.LatLon;
|
---|
14 | import org.openstreetmap.josm.gui.MapView;
|
---|
15 |
|
---|
16 | /**
|
---|
17 | * Marker class with button look-and-feel.
|
---|
18 | *
|
---|
19 | * @author Frederik Ramm <frederik@remote.org>
|
---|
20 | *
|
---|
21 | */
|
---|
22 | public class ButtonMarker extends Marker {
|
---|
23 |
|
---|
24 | private Rectangle buttonRectangle;
|
---|
25 |
|
---|
26 | public ButtonMarker(LatLon ll, String buttonImage) {
|
---|
27 | super(ll, null, buttonImage);
|
---|
28 | buttonRectangle = new Rectangle(0, 0, symbol.getIconWidth(), symbol.getIconHeight());
|
---|
29 | }
|
---|
30 |
|
---|
31 | @Override public boolean containsPoint(Point p) {
|
---|
32 | Point screen = Main.map.mapView.getPoint(eastNorth);
|
---|
33 | buttonRectangle.setLocation(screen.x+4, screen.y+2);
|
---|
34 | return buttonRectangle.contains(p);
|
---|
35 | }
|
---|
36 |
|
---|
37 | @Override public void paint(Graphics g, MapView mv, boolean mousePressed, String show) {
|
---|
38 | Point screen = mv.getPoint(eastNorth);
|
---|
39 | buttonRectangle.setLocation(screen.x+4, screen.y+2);
|
---|
40 | symbol.paintIcon(mv, g, screen.x+4, screen.y+2);
|
---|
41 | Border b;
|
---|
42 | Point mousePosition = mv.getMousePosition();
|
---|
43 | if (mousePosition == null)
|
---|
44 | return; // mouse outside the whole window
|
---|
45 |
|
---|
46 | if (mousePressed) {
|
---|
47 | b = BorderFactory.createBevelBorder(BevelBorder.LOWERED);
|
---|
48 | } else {
|
---|
49 | b = BorderFactory.createBevelBorder(BevelBorder.RAISED);
|
---|
50 | }
|
---|
51 | Insets inset = b.getBorderInsets(mv);
|
---|
52 | Rectangle r = new Rectangle(buttonRectangle);
|
---|
53 | r.grow((inset.top+inset.bottom)/2, (inset.left+inset.right)/2);
|
---|
54 | b.paintBorder(mv, g, r.x, r.y, r.width, r.height);
|
---|
55 | }
|
---|
56 | }
|
---|