modules/graphics/src/main/java/com/sun/javafx/tk/quantum/EmbeddedScene.java
Print this page
@@ -58,17 +58,19 @@
// TODO: synchronize access to embedder from ET and RT
private HostInterface host;
private UploadingPainter painter;
private PaintRenderJob paintRenderJob;
- private float renderScale;
+ private float renderScaleX;
+ private float renderScaleY;
private final EmbeddedSceneDnD embeddedDnD;
private volatile IntBuffer texBits;
private volatile int texLineStride; // pre-scaled
- private volatile float texScaleFactor = 1.0f;
+ 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,28 +149,35 @@
System.err.println("EmbeddedScene.finishInputMethodComposition");
}
}
@Override
- public void setPixelScaleFactor(float scale) {
- renderScale = scale;
+ public void setPixelScaleFactors(float scalex, float scaley) {
+ renderScaleX = scalex;
+ renderScaleY = scaley;
entireSceneNeedsRepaint();
}
- public float getRenderScale() {
- return renderScale;
+ 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();
- texScaleFactor = pixels.getScaleUnsafe();
+ texScaleFactorX = pixels.getScaleXUnsafe();
+ texScaleFactorY = pixels.getScaleYUnsafe();
if (host != null) {
host.repaint();
}
}
@@ -214,15 +223,18 @@
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) {
+ if (getRenderScaleX() != texScaleFactorX ||
+ getRenderScaleY() != texScaleFactorY ||
+ texBits == null)
+ {
return false;
}
- scaledWidth = (int)Math.round(scaledWidth * texScaleFactor);
- scaledHeight = (int)Math.round(scaledHeight * texScaleFactor);
+ 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.