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.