mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 16:58:40 -04:00
fix osx win-fixed-size
This commit is contained in:
parent
5a635059b6
commit
a49e684dbe
@ -229,7 +229,11 @@ event_handler(EventHandlerCallRef myHandler, EventRef event) {
|
||||
|
||||
WindowRef window = NULL;
|
||||
GetEventParameter(event, kEventParamDirectObject, typeWindowRef, NULL,
|
||||
sizeof(WindowRef), NULL, &window);
|
||||
sizeof(window), NULL, &window);
|
||||
|
||||
UInt32 attributes = 0;
|
||||
GetEventParameter(event, kEventParamAttributes, typeUInt32, NULL,
|
||||
sizeof(attributes), NULL, &attributes);
|
||||
|
||||
if (osxdisplay_cat.is_spam()) {
|
||||
osxdisplay_cat.spam()
|
||||
@ -276,6 +280,23 @@ event_handler(EventHandlerCallRef myHandler, EventRef event) {
|
||||
SetUserFocusWindow (window);
|
||||
break;
|
||||
|
||||
case kEventWindowBoundsChanging:
|
||||
// Gives us a chance to intercept resize attempts
|
||||
if (attributes & kWindowBoundsChangeSizeChanged) {
|
||||
// If the window is supposed to be fixed-size, enforce this.
|
||||
if (_properties.get_fixed_size()) {
|
||||
Rect bounds;
|
||||
GetEventParameter(event, kEventParamCurrentBounds,
|
||||
typeQDRectangle, NULL, sizeof(bounds), NULL, &bounds);
|
||||
bounds.right = bounds.left + _properties.get_x_size();
|
||||
bounds.bottom = bounds.top + _properties.get_y_size();
|
||||
SetEventParameter(event, kEventParamCurrentBounds,
|
||||
typeQDRectangle, sizeof(bounds), &bounds);
|
||||
result = noErr;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case kEventWindowBoundsChanged: // called for resize and moves (drag)
|
||||
do_resize();
|
||||
break;
|
||||
@ -1199,6 +1220,11 @@ os_open_window(WindowProperties &req_properties) {
|
||||
}
|
||||
} else */
|
||||
{
|
||||
int attributes = kWindowStandardDocumentAttributes | kWindowStandardHandlerAttribute;
|
||||
if (req_properties.has_fixed_size() && req_properties.get_fixed_size()) {
|
||||
attributes &= ~kWindowResizableAttribute;
|
||||
}
|
||||
|
||||
if (req_properties.has_undecorated() && req_properties.get_undecorated()) {
|
||||
// create a unmovable .. no edge window..
|
||||
|
||||
@ -1207,7 +1233,10 @@ os_open_window(WindowProperties &req_properties) {
|
||||
<< "Creating undecorated window\n";
|
||||
}
|
||||
|
||||
CreateNewWindow(kDocumentWindowClass, kWindowStandardDocumentAttributes | kWindowNoTitleBarAttribute, &r, &_osx_window);
|
||||
// We don't want a resize box either.
|
||||
attributes &= ~kWindowResizableAttribute;
|
||||
attributes |= kWindowNoTitleBarAttribute;
|
||||
CreateNewWindow(kDocumentWindowClass, attributes, &r, &_osx_window);
|
||||
} else {
|
||||
// create a window with crome and sizing and sucj
|
||||
// In this case, we want to constrain the window to the
|
||||
@ -1225,7 +1254,7 @@ os_open_window(WindowProperties &req_properties) {
|
||||
osxdisplay_cat.debug()
|
||||
<< "Creating standard window\n";
|
||||
}
|
||||
CreateNewWindow(kDocumentWindowClass, kWindowStandardDocumentAttributes | kWindowStandardHandlerAttribute, &r, &_osx_window);
|
||||
CreateNewWindow(kDocumentWindowClass, attributes, &r, &_osx_window);
|
||||
add_a_window(_osx_window);
|
||||
}
|
||||
}
|
||||
@ -1238,6 +1267,7 @@ os_open_window(WindowProperties &req_properties) {
|
||||
{ kEventClassWindow, kEventWindowActivated },
|
||||
{ kEventClassWindow, kEventWindowDeactivated },
|
||||
{ kEventClassWindow, kEventWindowClose },
|
||||
{ kEventClassWindow, kEventWindowBoundsChanging },
|
||||
{ kEventClassWindow, kEventWindowBoundsChanged },
|
||||
|
||||
{ kEventClassWindow, kEventWindowCollapsed },
|
||||
|
@ -133,26 +133,32 @@ TinyOsxGraphicsWindow* TinyOsxGraphicsWindow::GetCurrentOSxWindow(WindowRef wind
|
||||
// Description: The standard window event handler for non-fullscreen
|
||||
// windows.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
OSStatus TinyOsxGraphicsWindow::event_handler(EventHandlerCallRef myHandler, EventRef event) {
|
||||
OSStatus TinyOsxGraphicsWindow::
|
||||
event_handler(EventHandlerCallRef myHandler, EventRef event) {
|
||||
|
||||
OSStatus result = eventNotHandledErr;
|
||||
UInt32 the_class = GetEventClass(event);
|
||||
UInt32 kind = GetEventKind(event);
|
||||
|
||||
WindowRef window = NULL;
|
||||
GetEventParameter(event, kEventParamDirectObject, typeWindowRef, NULL, sizeof(WindowRef), NULL, &window);
|
||||
GetEventParameter(event, kEventParamDirectObject, typeWindowRef, NULL,
|
||||
sizeof(window), NULL, &window);
|
||||
|
||||
UInt32 attributes = 0;
|
||||
GetEventParameter(event, kEventParamAttributes, typeUInt32, NULL,
|
||||
sizeof(attributes), NULL, &attributes);
|
||||
|
||||
if (tinydisplay_cat.is_spam()) {
|
||||
tinydisplay_cat.spam() << ClockObject::get_global_clock()->get_real_time() << " event_handler: " << (void *)this << ", " << window << ", " << the_class << ", " << kind << "\n";
|
||||
}
|
||||
|
||||
switch (the_class) {
|
||||
case kEventClassMouse:
|
||||
result = handleWindowMouseEvents (myHandler, event);
|
||||
break;
|
||||
|
||||
case kEventClassWindow:
|
||||
switch (kind) {
|
||||
case kEventClassMouse:
|
||||
result = handleWindowMouseEvents (myHandler, event);
|
||||
break;
|
||||
|
||||
case kEventClassWindow:
|
||||
switch (kind) {
|
||||
case kEventWindowCollapsing:
|
||||
/*
|
||||
Rect r;
|
||||
@ -179,27 +185,44 @@ OSStatus TinyOsxGraphicsWindow::event_handler(EventHandlerCallRef myHandler, Eve
|
||||
if (window == FrontNonFloatingWindow ())
|
||||
SetUserFocusWindow (window);
|
||||
break;
|
||||
case kEventWindowBoundsChanged: // called for resize and moves (drag)
|
||||
DoResize();
|
||||
break;
|
||||
case kEventWindowZoomed:
|
||||
break;
|
||||
case kEventWindowCollapsed:
|
||||
{
|
||||
WindowProperties properties;
|
||||
properties.set_minimized(true);
|
||||
system_changed_properties(properties);
|
||||
|
||||
case kEventWindowBoundsChanging:
|
||||
// Gives us a chance to intercept resize attempts
|
||||
if (attributes & kWindowBoundsChangeSizeChanged) {
|
||||
// If the window is supposed to be fixed-size, enforce this.
|
||||
if (_properties.get_fixed_size()) {
|
||||
Rect bounds;
|
||||
GetEventParameter(event, kEventParamCurrentBounds,
|
||||
typeQDRectangle, NULL, sizeof(bounds), NULL, &bounds);
|
||||
bounds.right = bounds.left + _properties.get_x_size();
|
||||
bounds.bottom = bounds.top + _properties.get_y_size();
|
||||
SetEventParameter(event, kEventParamCurrentBounds,
|
||||
typeQDRectangle, sizeof(bounds), &bounds); result = noErr;
|
||||
}
|
||||
break;
|
||||
case kEventWindowExpanded:
|
||||
{
|
||||
WindowProperties properties;
|
||||
properties.set_minimized(false);
|
||||
system_changed_properties(properties);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case kEventWindowBoundsChanged: // called for resize and moves (drag)
|
||||
DoResize();
|
||||
break;
|
||||
case kEventWindowZoomed:
|
||||
break;
|
||||
case kEventWindowCollapsed:
|
||||
{
|
||||
WindowProperties properties;
|
||||
properties.set_minimized(true);
|
||||
system_changed_properties(properties);
|
||||
}
|
||||
break;
|
||||
case kEventWindowExpanded:
|
||||
{
|
||||
WindowProperties properties;
|
||||
properties.set_minimized(false);
|
||||
system_changed_properties(properties);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -433,7 +456,6 @@ void TinyOsxGraphicsWindow::ReleaseSystemResources() {
|
||||
_pending_icon = NULL;
|
||||
}
|
||||
if (_current_icon != NULL) {
|
||||
cerr << "release current icon\n";
|
||||
CGImageRelease(_current_icon);
|
||||
_current_icon = NULL;
|
||||
}
|
||||
@ -951,16 +973,23 @@ bool TinyOsxGraphicsWindow::OSOpenWindow(WindowProperties &req_properties) {
|
||||
}
|
||||
else */
|
||||
{
|
||||
int attributes = kWindowStandardDocumentAttributes | kWindowStandardHandlerAttribute;
|
||||
if (req_properties.has_fixed_size() && req_properties.get_fixed_size()) {
|
||||
attributes &= ~kWindowResizableAttribute;
|
||||
}
|
||||
|
||||
if (req_properties.has_undecorated() && req_properties.get_undecorated()) { // create a unmovable .. no edge window..
|
||||
tinydisplay_cat.info() << "Creating undecorated window\n";
|
||||
|
||||
CreateNewWindow(kDocumentWindowClass, kWindowStandardDocumentAttributes | kWindowNoTitleBarAttribute, &r, &_osx_window);
|
||||
// We don't want a resize box either.
|
||||
attributes &= ~kWindowResizableAttribute;
|
||||
attributes |= kWindowNoTitleBarAttribute;
|
||||
CreateNewWindow(kDocumentWindowClass, attributes, &r, &_osx_window);
|
||||
}
|
||||
else
|
||||
{ // create a window with crome and sizing and sucj
|
||||
// In this case, we want to constrain the window to the
|
||||
// available size.
|
||||
|
||||
Rect bounds;
|
||||
GetAvailableWindowPositioningBounds(GetMainDevice(), &bounds);
|
||||
|
||||
@ -970,7 +999,7 @@ bool TinyOsxGraphicsWindow::OSOpenWindow(WindowProperties &req_properties) {
|
||||
r.bottom = min(r.bottom, bounds.bottom);
|
||||
|
||||
tinydisplay_cat.info() << "Creating standard window\n";
|
||||
CreateNewWindow(kDocumentWindowClass, kWindowStandardDocumentAttributes | kWindowStandardHandlerAttribute, &r, &_osx_window);
|
||||
CreateNewWindow(kDocumentWindowClass, attributes, &r, &_osx_window);
|
||||
AddAWindow(_osx_window);
|
||||
}
|
||||
}
|
||||
@ -986,6 +1015,7 @@ bool TinyOsxGraphicsWindow::OSOpenWindow(WindowProperties &req_properties) {
|
||||
{ kEventClassWindow, kEventWindowActivated },
|
||||
{ kEventClassWindow, kEventWindowDeactivated },
|
||||
{ kEventClassWindow, kEventWindowClose },
|
||||
{ kEventClassWindow, kEventWindowBoundsChanging },
|
||||
{ kEventClassWindow, kEventWindowBoundsChanged },
|
||||
|
||||
{ kEventClassWindow, kEventWindowCollapsed },
|
||||
|
Loading…
x
Reference in New Issue
Block a user