Commit 40cd2b02 authored by Roman Sedaikin's avatar Roman Sedaikin

Refactored resizing in MetalRedrawer.

parent 1bb1711b
...@@ -49,11 +49,12 @@ internal class MetalRedrawer( ...@@ -49,11 +49,12 @@ internal class MetalRedrawer(
} }
override fun syncSize() { override fun syncSize() {
val globalPosition = convertPoint(layer, layer.x, layer.y, getRootPane(layer)) val rootPane = getRootPane(layer)
val globalPosition = convertPoint(layer, layer.x, layer.y, rootPane)
setContentScale(device, layer.contentScale) setContentScale(device, layer.contentScale)
resizeLayers(device, resizeLayers(device,
globalPosition.x, globalPosition.x,
globalPosition.y, rootPane.height - globalPosition.y - layer.height,
layer.width.coerceAtLeast(0), layer.width.coerceAtLeast(0),
layer.height.coerceAtLeast(0) layer.height.coerceAtLeast(0)
) )
......
...@@ -82,15 +82,10 @@ JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_makeMeta ...@@ -82,15 +82,10 @@ JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_makeMeta
JNIEnv * env, jobject redrawer, jlong devicePtr, jint width, jint height) JNIEnv * env, jobject redrawer, jlong devicePtr, jint width, jint height)
{ {
MetalDevice *device = (MetalDevice *) devicePtr; MetalDevice *device = (MetalDevice *) devicePtr;
device.layer.drawableSize = CGRectMake(0, 0, width, height).size;
id<CAMetalDrawable> currentDrawable = [device.layer nextDrawable]; id<CAMetalDrawable> currentDrawable = [device.layer nextDrawable];
GrMtlTextureInfo info; GrMtlTextureInfo info;
info.fTexture.retain(currentDrawable.texture); info.fTexture.retain(currentDrawable.texture);
GrBackendRenderTarget* renderTarget = new GrBackendRenderTarget(width, height, 0, info); GrBackendRenderTarget* renderTarget = new GrBackendRenderTarget(width, height, 0, info);
device.drawableHandle = currentDrawable; device.drawableHandle = currentDrawable;
return (jlong) renderTarget; return (jlong) renderTarget;
...@@ -135,10 +130,13 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_resizeLay ...@@ -135,10 +130,13 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_resizeLay
JNIEnv *env, jobject redrawer, jlong devicePtr, jint x, jint y, jint width, jint height) JNIEnv *env, jobject redrawer, jlong devicePtr, jint x, jint y, jint width, jint height)
{ {
MetalDevice *device = (MetalDevice *) devicePtr; MetalDevice *device = (MetalDevice *) devicePtr;
y = (int)device.container.frame.size.height - y - height; float scale = device.layer.contentsScale;
CGRect frame = CGRectMake(x, y, width, height);
CGSize drawableSize = CGSizeMake(width * scale, height * scale);
[CATransaction begin]; [CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
device.layer.frame = CGRectMake(x, y, width, height); device.layer.frame = frame;
device.layer.drawableSize = drawableSize;
[CATransaction commit]; [CATransaction commit];
[CATransaction flush]; [CATransaction flush];
} }
...@@ -146,9 +144,13 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_resizeLay ...@@ -146,9 +144,13 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_resizeLay
JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_setContentScale(JNIEnv *env, jobject obj, jlong devicePtr, jfloat contentScale) JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_setContentScale(JNIEnv *env, jobject obj, jlong devicePtr, jfloat contentScale)
{ {
MetalDevice *device = (MetalDevice *) devicePtr; MetalDevice *device = (MetalDevice *) devicePtr;
if (device.layer.contentsScale == contentScale) {
return;
}
[CATransaction begin]; [CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
assert(contentScale != 0); assert(contentScale != 0);
device.container.contentsScale = contentScale;
device.layer.contentsScale = contentScale; device.layer.contentsScale = contentScale;
[CATransaction commit]; [CATransaction commit];
[CATransaction flush]; [CATransaction flush];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment