Changeset 16764 in josm
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/tools/ImageProvider.java
r16643 r16764 1330 1330 1331 1331 /** 1332 * The cursor hotspot constants {@link #DEFAULT_HOTSPOT} and {@link #CROSSHAIR_HOTSPOT} are relative to this cursor size 1333 */ 1334 protected static final int CURSOR_SIZE_HOTSPOT_IS_RELATIVE_TO = 32; 1335 private static final Point DEFAULT_HOTSPOT = new Point(3, 2); // FIXME: define better hotspot for rotate.png 1336 private static final Point CROSSHAIR_HOTSPOT = new Point(10, 10); 1337 1338 /** 1332 1339 * Load a cursor image with a given file name, optionally decorated with an overlay image 1333 1340 * … … 1345 1352 .setMaxSize(ImageSizes.CURSOROVERLAY))); 1346 1353 } 1347 hotSpot.setLocation("crosshair".equals(name) ? new Point(10, 10) : new Point(3, 2));1348 1354 ImageIcon imageIcon = imageProvider.get(); 1349 1355 Image image = imageIcon.getImage(); … … 1361 1367 image = image.getScaledInstance(bestCursorSize.width, bestCursorSize.height, Image.SCALE_DEFAULT); 1362 1368 } 1363 1364 hotSpot.x = hotSpot.x * bestCursorSize.width / width; 1365 hotSpot.y = hotSpot.y * bestCursorSize.height / height; 1366 } 1369 } 1370 1371 hotSpot.setLocation("crosshair".equals(name) ? CROSSHAIR_HOTSPOT : DEFAULT_HOTSPOT); 1372 hotSpot.x = hotSpot.x * image.getWidth(null) / CURSOR_SIZE_HOTSPOT_IS_RELATIVE_TO; 1373 hotSpot.y = hotSpot.y * image.getHeight(null) / CURSOR_SIZE_HOTSPOT_IS_RELATIVE_TO; 1367 1374 1368 1375 return image; -
trunk/test/unit/org/openstreetmap/josm/tools/ImageProviderTest.java
r16486 r16764 194 194 } 195 195 196 public static final int ORIGINAL_CURSOR_SIZE = 32;197 198 196 /** 199 197 * Test getting an image for a crosshair cursor. … … 215 213 @Test 216 214 public void testGetCursorImageWithOverlay() { 215 testCursorImageWithOverlay(1.0f); // normal case 216 testCursorImageWithOverlay(1.5f); // user has configured a GUI scale of 1.5 in the JOSM advanced preferences 217 } 218 219 private void testCursorImageWithOverlay(float guiScale) { 217 220 if (GraphicsEnvironment.isHeadless()) { 218 221 // TODO mock Toolkit.getDefaultToolkit().getBestCursorSize() 219 222 return; 220 223 } 224 GuiSizesHelper.setPixelDensity(guiScale); 221 225 Point hotSpot = new Point(); 222 226 Image image = ImageProvider.getCursorImage("normal", "selection", hotSpot); … … 237 241 238 242 private void assertCursorDimensionsCorrect(Point.Double originalHotspot, Image image, Point hotSpot) { 239 Dimension bestCursorSize = Toolkit.getDefaultToolkit().getBestCursorSize(ORIGINAL_CURSOR_SIZE, ORIGINAL_CURSOR_SIZE); 243 int originalCursorSize = ImageProvider.CURSOR_SIZE_HOTSPOT_IS_RELATIVE_TO; 244 Dimension bestCursorSize = Toolkit.getDefaultToolkit().getBestCursorSize(originalCursorSize, originalCursorSize); 240 245 Image bestCursorImage = HiDPISupport.getResolutionVariant(image, bestCursorSize.width, bestCursorSize.height); 241 246 int bestCursorImageWidth = bestCursorImage.getWidth(null); … … 243 248 int bestCursorImageHeight = bestCursorImage.getHeight(null); 244 249 assertEquals((int) Math.round(bestCursorSize.getHeight()), bestCursorImageHeight); 245 assertEquals(originalHotspot.x / ORIGINAL_CURSOR_SIZE* bestCursorImageWidth, hotSpot.x, 1 /* at worst one pixel off */);246 assertEquals(originalHotspot.y / ORIGINAL_CURSOR_SIZE* bestCursorImageHeight, hotSpot.y, 1 /* at worst one pixel off */);250 assertEquals(originalHotspot.x / originalCursorSize * bestCursorImageWidth, hotSpot.x, 1 /* at worst one pixel off */); 251 assertEquals(originalHotspot.y / originalCursorSize * bestCursorImageHeight, hotSpot.y, 1 /* at worst one pixel off */); 247 252 } 248 253
Note:
See TracChangeset
for help on using the changeset viewer.