src/macosx/native/sun/awt/AWTWindow.m

Print this page

        

*** 38,58 **** #import "LWCToolkit.h" #import "GeomUtilities.h" #import "ThreadUtilities.h" #import "OSVersion.h" #define MASK(KEY) \ (sun_lwawt_macosx_CPlatformWindow_ ## KEY) #define IS(BITS, KEY) \ ((BITS & MASK(KEY)) != 0) #define SET(BITS, KEY, VALUE) \ BITS = VALUE ? BITS | MASK(KEY) : BITS & ~MASK(KEY) - static JNF_CLASS_CACHE(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow"); @interface JavaResizeGrowBoxOverlayWindow : NSWindow { } @end --- 38,58 ---- #import "LWCToolkit.h" #import "GeomUtilities.h" #import "ThreadUtilities.h" #import "OSVersion.h" + static const float GROW_BOX_SIZE = 12.f; #define MASK(KEY) \ (sun_lwawt_macosx_CPlatformWindow_ ## KEY) #define IS(BITS, KEY) \ ((BITS & MASK(KEY)) != 0) #define SET(BITS, KEY, VALUE) \ BITS = VALUE ? BITS | MASK(KEY) : BITS & ~MASK(KEY) static JNF_CLASS_CACHE(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow"); @interface JavaResizeGrowBoxOverlayWindow : NSWindow { } @end
*** 157,173 **** - (BOOL) shouldShowGrowBox { return isSnowLeopardOrLower() && IS(self.styleBits, RESIZABLE); } - (NSImage *) createGrowBoxImage { ! NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize(12, 12)]; JRSUIControlRef growBoxWidget = JRSUIControlCreate(FALSE); JRSUIControlSetWidget(growBoxWidget, kJRSUI_Widget_growBoxTextured); JRSUIControlSetWindowType(growBoxWidget, kJRSUI_WindowType_utility); JRSUIRendererRef renderer = JRSUIRendererCreate(); [image lockFocus]; // sets current graphics context to that of the image ! JRSUIControlDraw(renderer, growBoxWidget, [[NSGraphicsContext currentContext] graphicsPort], CGRectMake(0, 1, 11, 11)); [image unlockFocus]; JRSUIRendererRelease(renderer); JRSUIControlRelease(growBoxWidget); return image; } --- 157,173 ---- - (BOOL) shouldShowGrowBox { return isSnowLeopardOrLower() && IS(self.styleBits, RESIZABLE); } - (NSImage *) createGrowBoxImage { ! NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize(GROW_BOX_SIZE, GROW_BOX_SIZE)]; JRSUIControlRef growBoxWidget = JRSUIControlCreate(FALSE); JRSUIControlSetWidget(growBoxWidget, kJRSUI_Widget_growBoxTextured); JRSUIControlSetWindowType(growBoxWidget, kJRSUI_WindowType_utility); JRSUIRendererRef renderer = JRSUIRendererCreate(); [image lockFocus]; // sets current graphics context to that of the image ! JRSUIControlDraw(renderer, growBoxWidget, [[NSGraphicsContext currentContext] graphicsPort], CGRectMake(0, 1, GROW_BOX_SIZE - 1, GROW_BOX_SIZE - 1)); [image unlockFocus]; JRSUIRendererRelease(renderer); JRSUIControlRelease(growBoxWidget); return image; }
*** 546,555 **** --- 546,585 ---- JNFCallVoidMethod(env, platformWindow, jm_deliverNCMouseDown); } } [super sendEvent:event]; } + + - (void)constrainSize:(NSSize*)size { + float minWidth = 0.f, minHeight = 0.f; + + if (IS(self.styleBits, DECORATED)) { + NSRect frame = [self frame]; + NSRect contentRect = [NSWindow contentRectForFrameRect:frame styleMask:[self styleMask]]; + + float top = frame.size.height - contentRect.size.height; + float left = contentRect.origin.x - frame.origin.x; + float bottom = contentRect.origin.y - frame.origin.y; + float right = frame.size.width - (contentRect.size.width + left); + + // Speculative estimation: 80 - enough for window decorations controls + minWidth += left + right + 80; + minHeight += top + bottom; + } + + if ([self shouldShowGrowBox]) { + minWidth = MAX(minWidth, GROW_BOX_SIZE); + minHeight += GROW_BOX_SIZE; + } + + minWidth = MAX(1.f, minWidth); + minHeight = MAX(1.f, minHeight); + + size->width = MAX(size->width, minWidth); + size->height = MAX(size->height, minHeight); + } + @end // AWTWindow /* * Class: sun_lwawt_macosx_CPlatformWindow
*** 701,710 **** --- 731,742 ---- AWTWindow *window = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; NSRect rect = ConvertNSScreenRect(NULL, jrect); + [window constrainSize:&rect.size]; + [window setFrame:rect display:YES]; // only start tracking events if pointer is above the toplevel // TODO: should post an Entered event if YES. NSPoint mLocation = [NSEvent mouseLocation];
*** 732,748 **** if (minW < 1) minW = 1; if (minH < 1) minH = 1; if (maxW < 1) maxW = 1; if (maxH < 1) maxH = 1; - NSSize min = { minW, minH }; - NSSize max = { maxW, maxH }; - AWTWindow *window = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; window.javaMinSize = min; window.javaMaxSize = max; [window updateMinMaxSize:IS(window.styleBits, RESIZABLE)]; }]; --- 764,783 ---- if (minW < 1) minW = 1; if (minH < 1) minH = 1; if (maxW < 1) maxW = 1; if (maxH < 1) maxH = 1; AWTWindow *window = OBJC(windowPtr); [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ AWT_ASSERT_APPKIT_THREAD; + NSSize min = { minW, minH }; + NSSize max = { maxW, maxH }; + + [window constrainSize:&min]; + [window constrainSize:&max]; + window.javaMinSize = min; window.javaMaxSize = max; [window updateMinMaxSize:IS(window.styleBits, RESIZABLE)]; }];