modules/graphics/src/main/java/com/sun/javafx/tk/quantum/EmbeddedScene.java

Print this page

        

*** 58,74 **** // TODO: synchronize access to embedder from ET and RT private HostInterface host; private UploadingPainter painter; private PaintRenderJob paintRenderJob; ! private float renderScale; private final EmbeddedSceneDnD embeddedDnD; private volatile IntBuffer texBits; private volatile int texLineStride; // pre-scaled ! private volatile float texScaleFactor = 1.0f; private volatile PixelFormat<?> pixelFormat; public EmbeddedScene(HostInterface host, boolean depthBuffer, boolean msaa) { super(depthBuffer, msaa); --- 58,76 ---- // TODO: synchronize access to embedder from ET and RT private HostInterface host; private UploadingPainter painter; private PaintRenderJob paintRenderJob; ! private float renderScaleX; ! private float renderScaleY; private final EmbeddedSceneDnD embeddedDnD; private volatile IntBuffer texBits; private volatile int texLineStride; // pre-scaled ! private volatile float texScaleFactorX = 1.0f; ! private volatile float texScaleFactorY = 1.0f; private volatile PixelFormat<?> pixelFormat; public EmbeddedScene(HostInterface host, boolean depthBuffer, boolean msaa) { super(depthBuffer, msaa);
*** 147,174 **** System.err.println("EmbeddedScene.finishInputMethodComposition"); } } @Override ! public void setPixelScaleFactor(float scale) { ! renderScale = scale; entireSceneNeedsRepaint(); } ! public float getRenderScale() { ! return renderScale; } public PixelFormat<?> getPixelFormat() { return pixelFormat; } // Called by EmbeddedPainter on the render thread under renderLock void uploadPixels(Pixels pixels) { texBits = (IntBuffer)pixels.getPixels(); texLineStride = pixels.getWidthUnsafe(); ! texScaleFactor = pixels.getScaleUnsafe(); if (host != null) { host.repaint(); } } --- 149,183 ---- System.err.println("EmbeddedScene.finishInputMethodComposition"); } } @Override ! public void setPixelScaleFactors(float scalex, float scaley) { ! renderScaleX = scalex; ! renderScaleY = scaley; entireSceneNeedsRepaint(); } ! public float getRenderScaleX() { ! return renderScaleX; } + public float getRenderScaleY() { + return renderScaleY; + } + + @Override public PixelFormat<?> getPixelFormat() { return pixelFormat; } // Called by EmbeddedPainter on the render thread under renderLock void uploadPixels(Pixels pixels) { texBits = (IntBuffer)pixels.getPixels(); texLineStride = pixels.getWidthUnsafe(); ! texScaleFactorX = pixels.getScaleXUnsafe(); ! texScaleFactorY = pixels.getScaleYUnsafe(); if (host != null) { host.repaint(); } }
*** 214,228 **** return QuantumToolkit.runWithRenderLock(() -> { int scaledWidth = width; int scaledHeight = height; // The dest buffer scale factor is expected to match painter.getPixelScaleFactor(). ! if (getRenderScale() != texScaleFactor || texBits == null) { return false; } ! scaledWidth = (int)Math.round(scaledWidth * texScaleFactor); ! scaledHeight = (int)Math.round(scaledHeight * texScaleFactor); dest.rewind(); texBits.rewind(); if (dest.capacity() != texBits.capacity()) { // Calculate the intersection of the dest & src images. --- 223,240 ---- return QuantumToolkit.runWithRenderLock(() -> { int scaledWidth = width; int scaledHeight = height; // The dest buffer scale factor is expected to match painter.getPixelScaleFactor(). ! if (getRenderScaleX() != texScaleFactorX || ! getRenderScaleY() != texScaleFactorY || ! texBits == null) ! { return false; } ! scaledWidth = Math.round(scaledWidth * texScaleFactorX); ! scaledHeight = Math.round(scaledHeight * texScaleFactorY); dest.rewind(); texBits.rewind(); if (dest.capacity() != texBits.capacity()) { // Calculate the intersection of the dest & src images.