--- old/src/java.desktop/share/classes/sun/java2d/marlin/MarlinProperties.java 2017-04-22 13:16:05.304539126 +0200 +++ new/src/java.desktop/share/classes/sun/java2d/marlin/MarlinProperties.java 2017-04-22 13:16:05.104537332 +0200 @@ -68,21 +68,21 @@ /** * Return the log(2) corresponding to subpixel on x-axis ( * - * @return 1 (2 subpixels) < initial pixel size < 4 (256 subpixels) + * @return 0 (1 subpixels) < initial pixel size < 4 (256 subpixels) * (3 by default ie 8 subpixels) */ public static int getSubPixel_Log2_X() { - return getInteger("sun.java2d.renderer.subPixel_log2_X", 3, 1, 8); + return getInteger("sun.java2d.renderer.subPixel_log2_X", 3, 0, 8); } /** * Return the log(2) corresponding to subpixel on y-axis ( * - * @return 1 (2 subpixels) < initial pixel size < 8 (256 subpixels) + * @return 0 (1 subpixels) < initial pixel size < 8 (256 subpixels) * (3 by default ie 8 subpixels) */ public static int getSubPixel_Log2_Y() { - return getInteger("sun.java2d.renderer.subPixel_log2_Y", 3, 1, 8); + return getInteger("sun.java2d.renderer.subPixel_log2_Y", 3, 0, 8); } /** @@ -95,6 +95,10 @@ return getInteger("sun.java2d.renderer.tileSize_log2", 5, 3, 8); } + public static int getTileWidth_Log2() { + return getInteger("sun.java2d.renderer.tileWidth_log2", 5, 3, 10); + } + /** * Return the log(2) corresponding to the block size in pixels * @@ -166,6 +170,20 @@ return getBoolean("sun.java2d.renderer.logUnsafeMalloc", "false"); } + // quality settings + + public static float getCubicDecD2() { + return getFloat("sun.java2d.renderer.cubic_dec_d2", 1.0, 0.01, 4.0); + } + + public static float getCubicIncD1() { + return getFloat("sun.java2d.renderer.cubic_inc_d1", 0.4, 0.01, 2.0); + } + + public static float getQuadDecD2() { + return getFloat("sun.java2d.renderer.quad_dec_d2", 0.5, 0.01, 4.0); + } + // system property utilities static boolean getBoolean(final String key, final String def) { return Boolean.valueOf(AccessController.doPrivileged( @@ -200,4 +218,33 @@ final int ceil = FloatMath.ceil_int( ((float)val) / norm); return ceil * norm; } + + public static double getDouble(final String key, final double def, + final double min, final double max) + { + double value = def; + final String property = AccessController.doPrivileged( + new GetPropertyAction(key)); + + if (property != null) { + try { + value = Double.parseDouble(property); + } catch (NumberFormatException nfe) { + logInfo("Invalid value for " + key + " = " + property + " !"); + } + } + // check for invalid values + if (value < min || value > max) { + logInfo("Invalid value for " + key + " = " + value + + "; expect value in range[" + min + ", " + max + "] !"); + value = def; + } + return value; + } + + public static float getFloat(final String key, final double def, + final double min, final double max) + { + return (float)getDouble(key, def, min, max); + } }