aboutsummaryrefslogtreecommitdiffstats
path: root/src/newt
diff options
context:
space:
mode:
Diffstat (limited to 'src/newt')
-rw-r--r--src/newt/classes/jogamp/newt/driver/ios/ScreenDriver.java2
-rw-r--r--src/newt/classes/jogamp/newt/driver/ios/WindowDriver.java41
-rw-r--r--src/newt/classes/jogamp/newt/driver/macosx/ScreenDriver.java2
-rw-r--r--src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java40
-rw-r--r--src/newt/native/MacNewtNSWindow.m50
5 files changed, 74 insertions, 61 deletions
diff --git a/src/newt/classes/jogamp/newt/driver/ios/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/ios/ScreenDriver.java
index 47280865d..daa033edb 100644
--- a/src/newt/classes/jogamp/newt/driver/ios/ScreenDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/ios/ScreenDriver.java
@@ -82,7 +82,7 @@ public class ScreenDriver extends ScreenImpl {
//
for(int crtIdx=0; crtIdx<count; crtIdx++) {
final int crt_id = crtIDs[crtIdx];
- final float pixelScaleRaw = (float)IOSUtil.GetPixelScaleByDisplayID(crt_id);
+ final float pixelScaleRaw = IOSUtil.GetScreenPixelScaleByScreenIdx(crt_id);
pixelScaleArray[crtIdx] = FloatUtil.isZero(pixelScaleRaw, FloatUtil.EPSILON) ? 1.0f : pixelScaleRaw;
propsOrigArray[crtIdx] = getMonitorProps0(crt_id);
if ( null == propsOrigArray[crtIdx] ) {
diff --git a/src/newt/classes/jogamp/newt/driver/ios/WindowDriver.java b/src/newt/classes/jogamp/newt/driver/ios/WindowDriver.java
index 2a257436a..79c35c310 100644
--- a/src/newt/classes/jogamp/newt/driver/ios/WindowDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/ios/WindowDriver.java
@@ -49,6 +49,7 @@ import jogamp.newt.driver.DriverUpdatePosition;
import com.jogamp.newt.event.InputEvent;
import com.jogamp.newt.event.KeyEvent;
import com.jogamp.newt.event.MonitorEvent;
+import com.jogamp.newt.event.MouseEvent;
import com.jogamp.opengl.math.FloatUtil;
public class WindowDriver extends WindowImpl implements MutableSurface, DriverClearFocus, DriverUpdatePosition {
@@ -75,7 +76,7 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
if( SurfaceScaleUtils.setNewPixelScale(hasPixelScale, hasPixelScale, newPixelScale, minPixelScale, maxPixelScale, DEBUG_IMPLEMENTATION ? getClass().getName() : null) ) {
if( sendEvent ) {
- if( deferOffThread ) {
+ if( defer && deferOffThread ) {
superSizeChangedOffThread(defer, getWidth(), getHeight(), true);
} else {
super.sizeChanged(defer, getWidth(), getHeight(), true);
@@ -89,51 +90,55 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
}
}
- private boolean updatePixelScaleByDisplayID(final boolean sendEvent) {
- final float maxPixelScaleRaw = (float) IOSUtil.GetPixelScaleByDisplayID(getDisplayID());
+ /**
+ * Essentially updates {@code maxPixelScale} ..
+ */
+ private boolean updateMaxScreenPixelScaleByDisplayID(final boolean sendEvent) {
+ final float maxPixelScaleRaw = IOSUtil.GetScreenPixelScaleByScreenIdx(getDisplayID());
if( DEBUG_IMPLEMENTATION ) {
- System.err.println("WindowDriver.updatePixelScale.1: "+hasPixelScale[0]+", "+maxPixelScaleRaw+" (max)");
+ System.err.println("WindowDriver.updatePixelScale.1: req "+reqPixelScale[0]+", has "+hasPixelScale[0]+", max "+maxPixelScaleRaw);
}
- return updatePixelScale(sendEvent, true /* defer */, false /*offthread */, maxPixelScaleRaw, maxPixelScaleRaw);
+ return updatePixelScale(sendEvent, true /* defer */, false /*offthread */, hasPixelScale[0], maxPixelScaleRaw);
}
- private boolean updatePixelScaleByWindowHandle(final boolean sendEvent) {
+ /**
+ * Essentially updates {@code maxPixelScale} ..
+ */
+ private boolean updateMaxScreenPixelScaleByWindowHandle(final boolean sendEvent) {
final long handle = getWindowHandle();
if( 0 != handle ) {
- final float maxPixelScaleRaw = (float)IOSUtil.GetPixelScale(handle);
+ final float maxPixelScaleRaw = IOSUtil.GetScreenPixelScale(handle);
if( DEBUG_IMPLEMENTATION ) {
- System.err.println("WindowDriver.updatePixelScale.2: "+hasPixelScale[0]+", "+maxPixelScaleRaw+" (max)");
+ System.err.println("WindowDriver.updatePixelScale.2: req "+reqPixelScale[0]+", has "+hasPixelScale[0]+", max "+maxPixelScaleRaw);
}
- return updatePixelScale(sendEvent, true /* defer */, false /*offthread */, maxPixelScaleRaw, maxPixelScaleRaw);
+ return updatePixelScale(sendEvent, true /* defer */, false /*offthread */, hasPixelScale[0], maxPixelScaleRaw);
} else {
return false;
}
}
/** Called from native code */
- protected void updatePixelScale(final boolean defer, final float newPixelScaleRaw, final float maxPixelScaleRaw) {
+ protected void updatePixelScale(final boolean defer, final float oldPixelScaleRaw, final float newPixelScaleRaw, final float maxPixelScaleRaw, final boolean changed) {
if( DEBUG_IMPLEMENTATION ) {
- System.err.println("WindowDriver.updatePixelScale.3: "+hasPixelScale[0]+" (has) -> "+newPixelScaleRaw+" (new), "+maxPixelScaleRaw+" (max), drop "+!isNativeValid());
- }
- if( isNativeValid() ) {
- updatePixelScale(true /* sendEvent*/, defer, true /*offthread */, newPixelScaleRaw, maxPixelScaleRaw);
+ System.err.println("WindowDriver.updatePixelScale.3: req "+reqPixelScale[0]+", has "+hasPixelScale[0]+", old "+oldPixelScaleRaw+", new "+newPixelScaleRaw+", max "+maxPixelScaleRaw+", changed "+changed);
}
+ updatePixelScale(true /* sendEvent*/, defer, true /*offthread */, newPixelScaleRaw, maxPixelScaleRaw);
}
@Override
protected final void instantiationFinishedImpl() {
- updatePixelScaleByDisplayID(false /* sendEvent*/);
+ updateMaxScreenPixelScaleByDisplayID(false /* sendEvent*/);
}
@Override
protected void setScreen(final ScreenImpl newScreen) { // never null !
super.setScreen(newScreen);
- updatePixelScaleByDisplayID(false /* sendEvent*/); // caller (reparent, ..) will send reshape event
+ updateMaxScreenPixelScaleByDisplayID(false /* sendEvent*/); // caller (reparent, ..) will send reshape event
}
@Override
protected void monitorModeChanged(final MonitorEvent me, final boolean success) {
- updatePixelScaleByWindowHandle(false /* sendEvent*/); // send reshape event itself
+ updateMaxScreenPixelScaleByWindowHandle(false /* sendEvent*/); // send reshape event itself
}
@Override
@@ -441,7 +446,7 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
createWindow(false, 0 != oldWindowHandle, pClientLevelOnSreen, width, height, flags);
}
// no native event (fullscreen, some reparenting)
- updatePixelScaleByWindowHandle(false /* sendEvent */);
+ updateMaxScreenPixelScaleByWindowHandle(false /* sendEvent */);
if( isOffscreenInstance) {
super.sizeChanged(false, width, height, true);
positionChanged(false, x, y);
diff --git a/src/newt/classes/jogamp/newt/driver/macosx/ScreenDriver.java b/src/newt/classes/jogamp/newt/driver/macosx/ScreenDriver.java
index ddeea265a..590f706df 100644
--- a/src/newt/classes/jogamp/newt/driver/macosx/ScreenDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/macosx/ScreenDriver.java
@@ -88,7 +88,7 @@ public class ScreenDriver extends ScreenImpl {
//
for(int crtIdx=0; crtIdx<count; crtIdx++) {
final int crt_id = crtIDs[crtIdx];
- final float pixelScaleRaw = (float)OSXUtil.GetPixelScaleByDisplayID(crt_id);
+ final float pixelScaleRaw = OSXUtil.GetScreenPixelScaleByDisplayID(crt_id);
pixelScaleArray[crtIdx] = FloatUtil.isZero(pixelScaleRaw, FloatUtil.EPSILON) ? 1.0f : pixelScaleRaw;
propsOrigArray[crtIdx] = getMonitorProps0(crt_id);
if ( null == propsOrigArray[crtIdx] ) {
diff --git a/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java b/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java
index e6ae7719c..1c6102f88 100644
--- a/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java
+++ b/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java
@@ -82,7 +82,7 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
if( SurfaceScaleUtils.setNewPixelScale(hasPixelScale, hasPixelScale, newPixelScale, minPixelScale, maxPixelScale, DEBUG_IMPLEMENTATION ? getClass().getName() : null) ) {
if( sendEvent ) {
- if( deferOffThread ) {
+ if( defer && deferOffThread ) {
superSizeChangedOffThread(defer, getWidth(), getHeight(), true);
} else {
super.sizeChanged(defer, getWidth(), getHeight(), true);
@@ -96,51 +96,55 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
}
}
- private boolean updatePixelScaleByDisplayID(final boolean sendEvent) {
- final float maxPixelScaleRaw = (float) OSXUtil.GetPixelScaleByDisplayID(getDisplayID());
+ /**
+ * Essentially updates {@code maxPixelScale} ..
+ */
+ private boolean updateMaxScreenPixelScaleByDisplayID(final boolean sendEvent) {
+ final float maxPixelScaleRaw = OSXUtil.GetScreenPixelScaleByDisplayID(getDisplayID());
if( DEBUG_IMPLEMENTATION ) {
- System.err.println("WindowDriver.updatePixelScale.1: "+hasPixelScale[0]+", "+maxPixelScaleRaw+" (max)");
+ System.err.println("WindowDriver.updatePixelScale.1: req "+reqPixelScale[0]+", has "+hasPixelScale[0]+", max "+maxPixelScaleRaw);
}
- return updatePixelScale(sendEvent, true /* defer */, false /*offthread */, maxPixelScaleRaw, maxPixelScaleRaw);
+ return updatePixelScale(sendEvent, true /* defer */, false /*offthread */, hasPixelScale[0], maxPixelScaleRaw);
}
- private boolean updatePixelScaleByWindowHandle(final boolean sendEvent) {
+ /**
+ * Essentially updates {@code maxPixelScale} ..
+ */
+ private boolean updateMaxScreenPixelScaleByWindowHandle(final boolean sendEvent) {
final long handle = getWindowHandle();
if( 0 != handle ) {
- final float maxPixelScaleRaw = (float)OSXUtil.GetPixelScale(handle);
+ final float maxPixelScaleRaw = OSXUtil.GetScreenPixelScale(handle);
if( DEBUG_IMPLEMENTATION ) {
- System.err.println("WindowDriver.updatePixelScale.2: "+hasPixelScale[0]+", "+maxPixelScaleRaw+" (max)");
+ System.err.println("WindowDriver.updatePixelScale.2: req "+reqPixelScale[0]+", has "+hasPixelScale[0]+", max "+maxPixelScaleRaw);
}
- return updatePixelScale(sendEvent, true /* defer */, false /*offthread */, maxPixelScaleRaw, maxPixelScaleRaw);
+ return updatePixelScale(sendEvent, true /* defer */, false /*offthread */, hasPixelScale[0], maxPixelScaleRaw);
} else {
return false;
}
}
/** Called from native code */
- protected void updatePixelScale(final boolean defer, final float newPixelScaleRaw, final float maxPixelScaleRaw) {
+ protected void updatePixelScale(final boolean defer, final float oldPixelScaleRaw, final float newPixelScaleRaw, final float maxPixelScaleRaw, final boolean changed) {
if( DEBUG_IMPLEMENTATION ) {
- System.err.println("WindowDriver.updatePixelScale.3: "+hasPixelScale[0]+" (has) -> "+newPixelScaleRaw+" (new), "+maxPixelScaleRaw+" (max), drop "+!isNativeValid());
- }
- if( isNativeValid() ) {
- updatePixelScale(true /* sendEvent*/, defer, true /*offthread */, newPixelScaleRaw, maxPixelScaleRaw);
+ System.err.println("WindowDriver.updatePixelScale.3: req "+reqPixelScale[0]+", has "+hasPixelScale[0]+", old "+oldPixelScaleRaw+", new "+newPixelScaleRaw+", max "+maxPixelScaleRaw+", changed "+changed);
}
+ updatePixelScale(true /* sendEvent*/, defer, true /*offthread */, newPixelScaleRaw, maxPixelScaleRaw);
}
@Override
protected final void instantiationFinishedImpl() {
- updatePixelScaleByDisplayID(false /* sendEvent*/);
+ updateMaxScreenPixelScaleByDisplayID(false /* sendEvent*/);
}
@Override
protected void setScreen(final ScreenImpl newScreen) { // never null !
super.setScreen(newScreen);
- updatePixelScaleByDisplayID(false /* sendEvent*/); // caller (reparent, ..) will send reshape event
+ updateMaxScreenPixelScaleByDisplayID(false /* sendEvent*/); // caller (reparent, ..) will send reshape event
}
@Override
protected void monitorModeChanged(final MonitorEvent me, final boolean success) {
- updatePixelScaleByWindowHandle(false /* sendEvent*/); // send reshape event itself
+ updateMaxScreenPixelScaleByWindowHandle(false /* sendEvent*/); // send reshape event itself
}
@Override
@@ -448,7 +452,7 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl
createWindow(false, 0 != oldWindowHandle, pClientLevelOnSreen, width, height, flags);
}
// no native event (fullscreen, some reparenting)
- updatePixelScaleByWindowHandle(false /* sendEvent */);
+ updateMaxScreenPixelScaleByWindowHandle(false /* sendEvent */);
if( isOffscreenInstance) {
super.sizeChanged(false, width, height, true);
positionChanged(false, x, y);
diff --git a/src/newt/native/MacNewtNSWindow.m b/src/newt/native/MacNewtNSWindow.m
index 31d7863d3..96dff76f6 100644
--- a/src/newt/native/MacNewtNSWindow.m
+++ b/src/newt/native/MacNewtNSWindow.m
@@ -272,21 +272,20 @@ static jmethodID windowRepaintID = NULL;
- (BOOL) softLock
{
- // DBG_PRINT("*************** softLock.0: %p\n", (void*)pthread_self());
int err;
if( 0 != ( err = pthread_mutex_lock(&softLockSync) ) ) {
NSLog(@"NewtNSView::softLock failed: errCode %d - %@", err, [NSThread callStackSymbols]);
return NO;
}
softLockCount++;
- // DBG_PRINT("*************** softLock.X: %p\n", (void*)pthread_self());
+ // DBG_PRINT("*************** softLock: %p count %d\n", (void*)pthread_self(), softLockCount);
return 0 < softLockCount;
}
- (BOOL) softUnlock
{
- // DBG_PRINT("*************** softUnlock: %p\n", (void*)pthread_self());
softLockCount--;
+ // DBG_PRINT("*************** softUnlock: %p count %d\n", (void*)pthread_self(), softLockCount);
int err;
if( 0 != ( err = pthread_mutex_unlock(&softLockSync) ) ) {
softLockCount++;
@@ -321,7 +320,7 @@ static jmethodID windowRepaintID = NULL;
- (void) drawRect:(NSRect)dirtyRect
{
- DBG_PRINT("*************** dirtyRect: %p %lf/%lf %lfx%lf\n",
+ DBG_PRINT("*************** drawRect: dirtyRect: %p %lf/%lf %lfx%lf\n",
javaWindowObject, dirtyRect.origin.x, dirtyRect.origin.y, dirtyRect.size.width, dirtyRect.size.height);
if(NULL==javaWindowObject) {
@@ -789,20 +788,24 @@ static jmethodID windowRepaintID = NULL;
// HiDPI scaling
BOOL useHiDPI = false;
CGFloat maxPixelScale = 1.0;
- CGFloat winPixelScale = 1.0;
+ CGFloat pixelScale = 1.0;
NSWindow* window = [self window];
NSScreen* screen = [window screen];
+ CGFloat oldPixelScale = [[self layer] contentsScale];
NS_DURING
maxPixelScale = [screen backingScaleFactor];
useHiDPI = [self wantsBestResolutionOpenGLSurface];
if( useHiDPI ) {
- winPixelScale = [window backingScaleFactor];
+ pixelScale = [window backingScaleFactor];
}
NS_HANDLER
NS_ENDHANDLER
- DBG_PRINT("viewDidChangeBackingProperties: PixelScale: HiDPI %d, max %f, window %f\n", useHiDPI, (float)maxPixelScale, (float)winPixelScale);
- [[self layer] setContentsScale: winPixelScale];
-
+ BOOL changeScale = oldPixelScale != pixelScale;
+ DBG_PRINT("viewDidChangeBackingProperties: PixelScale: useHiDPI %d, max %f, old %f -> %f (change %d)\n",
+ useHiDPI, (float)maxPixelScale, (float)oldPixelScale, (float)pixelScale, changeScale);
+ if( changeScale ) {
+ [[self layer] setContentsScale: pixelScale];
+ }
if (javaWindowObject == NULL) {
DBG_PRINT("viewDidChangeBackingProperties: null javaWindowObject\n");
return;
@@ -813,8 +816,8 @@ NS_ENDHANDLER
DBG_PRINT("viewDidChangeBackingProperties: null JNIEnv\n");
return;
}
-
- (*env)->CallVoidMethod(env, javaWindowObject, updatePixelScaleID, JNI_TRUE, (jfloat)winPixelScale, (jfloat)maxPixelScale); // defer
+ (*env)->CallVoidMethod(env, javaWindowObject, updatePixelScaleID, JNI_TRUE /* defer */,
+ (jfloat)oldPixelScale, (jfloat)pixelScale, (jfloat)maxPixelScale, (jboolean)changeScale);
// detaching thread not required - daemon
// NewtCommon_ReleaseJNIEnv(shallBeDetached);
@@ -830,7 +833,7 @@ NS_ENDHANDLER
enqueueMouseEventID = (*env)->GetMethodID(env, clazz, "enqueueMouseEvent", "(ZSIIISF)V");
enqueueKeyEventID = (*env)->GetMethodID(env, clazz, "enqueueKeyEvent", "(ZSISCC)V");
sizeChangedID = (*env)->GetMethodID(env, clazz, "sizeChanged", "(ZIIZ)V");
- updatePixelScaleID = (*env)->GetMethodID(env, clazz, "updatePixelScale", "(ZFF)V");
+ updatePixelScaleID = (*env)->GetMethodID(env, clazz, "updatePixelScale", "(ZFFFZ)V");
visibleChangedID = (*env)->GetMethodID(env, clazz, "visibleChanged", "(ZZ)V");
insetsChangedID = (*env)->GetMethodID(env, clazz, "insetsChanged", "(ZIIII)V");
sizeScreenPosInsetsChangedID = (*env)->GetMethodID(env, clazz, "sizeScreenPosInsetsChanged", "(ZIIIIIIIIZZ)V");
@@ -1125,7 +1128,7 @@ NS_ENDHANDLER
return;
}
jobject javaWindowObject = [newtView getJavaWindowObject];
- if (javaWindowObject == NULL) {
+ if ( NULL == javaWindowObject ) {
DBG_PRINT("focusChanged: null javaWindowObject\n");
return;
}
@@ -1254,21 +1257,22 @@ NS_ENDHANDLER
- (void) sendResizeEvent
{
- jobject javaWindowObject = NULL;
+ NewtNSView* newtView = (NewtNSView *) [self contentView];
+ if( ! [newtView isKindOfClass:[NewtNSView class]] ) {
+ return;
+ }
+ jobject javaWindowObject = [newtView getJavaWindowObject];
+ if ( NULL == javaWindowObject ) {
+ DBG_PRINT("sendResizeEvent: null javaWindowObject\n");
+ return;
+ }
int shallBeDetached = 0;
JNIEnv* env = NewtCommon_GetJNIEnv(1 /* asDaemon */, &shallBeDetached);
-
if( NULL == env ) {
DBG_PRINT("windowDidResize: null JNIEnv\n");
return;
}
- NewtNSView* newtView = (NewtNSView *) [self contentView];
- if( [newtView isKindOfClass:[NewtNSView class]] ) {
- javaWindowObject = [newtView getJavaWindowObject];
- }
- if( NULL != javaWindowObject ) {
- [self updateSizePosInsets: env jwin: javaWindowObject defer:JNI_TRUE];
- }
+ [self updateSizePosInsets: env jwin: javaWindowObject defer:JNI_TRUE];
// detaching thread not required - daemon
// NewtCommon_ReleaseJNIEnv(shallBeDetached);
}
@@ -1280,7 +1284,7 @@ NS_ENDHANDLER
return;
}
jobject javaWindowObject = [newtView getJavaWindowObject];
- if (javaWindowObject == NULL) {
+ if ( NULL == javaWindowObject ) {
DBG_PRINT("windowDidMove: null javaWindowObject\n");
return;
}