WIP: Adding code to encode/decode NSWindow->GormNSWindowView

This commit is contained in:
Gregory John Casamento 2023-08-18 05:33:29 -04:00
parent 8e30d4979a
commit 0282a49e28
2 changed files with 209 additions and 20 deletions

View file

@ -28,15 +28,111 @@
@interface GormNSWindowView : NSView
{
unsigned _gormStyleMask;
BOOL _gormReleasedWhenClosed;
NSUInteger autoPositionMask;
NSRect _frame;
NSSize _minimumSize;
NSSize _maximumSize;
NSSize _increments;
NSString *_autosaveName;
GSWindowDecorationView *_wv;
id _contentView;
id _firstResponder;
id _futureFirstResponder;
NSView *_initialFirstResponder;
GSAutoLayoutEngine *_layoutEngine;
PACKAGE_SCOPE
id _delegate;
@protected
id _fieldEditor;
id _lastLeftMouseDownView;
id _lastRightMouseDownView;
id _lastOtherMouseDownView;
id _lastDragView;
NSInteger _lastDragOperationMask;
NSInteger _windowNum;
NSInteger _gstate;
id _defaultButtonCell;
NSGraphicsContext *_context;
NSScreen *_screen;
NSColor *_backgroundColor;
NSString *_representedFilename;
NSString *_miniaturizedTitle;
NSImage *_miniaturizedImage;
NSString *_windowTitle;
PACKAGE_SCOPE
NSPoint _lastPoint;
@protected
NSBackingStoreType _backingType;
NSUInteger _styleMask;
NSInteger _windowLevel;
PACKAGE_SCOPE
NSRect _rectNeedingFlush;
NSMutableArray *_rectsBeingDrawn;
@protected
unsigned _disableFlushWindow;
NSWindowDepth _depthLimit;
NSWindowController *_windowController;
NSInteger _counterpart;
CGFloat _alphaValue;
NSMutableArray *_children;
NSWindow *_parent;
NSCachedImageRep *_cachedImage;
NSPoint _cachedImageOrigin;
NSWindow *_attachedSheet;
PACKAGE_SCOPE
struct GSWindowFlagsType {
unsigned accepts_drag:1;
unsigned is_one_shot:1;
unsigned needs_flush:1;
unsigned is_autodisplay:1;
unsigned optimize_drawing:1;
unsigned dynamic_depth_limit:1;
unsigned cursor_rects_enabled:1;
unsigned cursor_rects_valid:1;
unsigned visible:1;
unsigned is_key:1;
unsigned is_main:1;
unsigned is_edited:1;
unsigned is_released_when_closed:1;
unsigned is_miniaturized:1;
unsigned menu_exclude:1;
unsigned hides_on_deactivate:1;
unsigned accepts_mouse_moved:1;
unsigned has_opened:1;
unsigned has_closed:1;
unsigned default_button_cell_key_disabled:1;
unsigned can_hide:1;
unsigned has_shadow:1;
unsigned is_opaque:1;
unsigned views_need_display:1;
// 3 bits reserved for subclass use
unsigned subclass_bool_one: 1;
unsigned subclass_bool_two: 1;
unsigned subclass_bool_three: 1;
unsigned selectionDirection: 2;
unsigned displays_when_screen_profile_changes: 1;
unsigned is_movable_by_window_background: 1;
unsigned allows_tooltips_when_inactive: 1;
// 4 used 28 available
unsigned shows_toolbar_button: 1;
unsigned autorecalculates_keyview_loop: 1;
unsigned ignores_mouse_events: 1;
unsigned preserves_content_during_live_resize: 1;
} _f;
@protected
NSToolbar *_toolbar;
void *_reserved_1;
}
- (void) _setStyleMask: (unsigned int)newStyleMask;
- (unsigned int) _styleMask;
- (void) _setReleasedWhenClosed: (BOOL) flag;
- (BOOL) _isReleasedWhenClosed;
- (void) setStyleMask: (unsigned int)newStyleMask;
- (unsigned int) styleMask;
- (void) setReleasedWhenClosed: (BOOL) flag;
- (BOOL) isReleasedWhenClosed;
- (unsigned int) autoPositionMask;
- (void) setAutoPositionMask: (unsigned int)mask;

View file

@ -31,15 +31,13 @@
#include "GormNSWindowView.h"
// the default style mask we start with.
static NSUInteger defaultStyleMask = NSTitledWindowMask | NSClosableWindowMask
| NSResizableWindowMask | NSMiniaturizableWindowMask;
// static NSUInteger defaultStyleMask = NSTitledWindowMask | NSClosableWindowMask
// | NSResizableWindowMask | NSMiniaturizableWindowMask;
@implementation GormNSWindowView
- (void) encodeWithCoder: (NSCoder*)aCoder
{
unsigned oldStyleMask;
// save the old values...
// oldStyleMask = _styleMask;
@ -51,15 +49,110 @@ static NSUInteger defaultStyleMask = NSTitledWindowMask | NSClosableWindowMask
[self setReleasedWhenClosed: NO];
}
- (id) initResponderWithCoder: (NSCoder *)coder
{
if ((self = [super init]) != nil)
{
[aDecoder decodeValueOfObjCType: @encode(int) at: &_interface_style];
obj = [aDecoder decodeObject];
[self setMenu: obj];
}
return self;
}
- (id) initWithCoder: (NSCoder *)coder
{
self = [super init]; // WithCoder: coder];
if (self != nil)
if ((self = [super initResponderWithCoder: aDecoder]) != nil)
{
// preserve the setting and set the actual window to NO.
_gormReleasedWhenClosed = [self isReleasedWhenClosed];
[self setReleasedWhenClosed: NO];
NSSize aSize;
NSRect aRect;
NSPoint p;
NSUInteger aStyle;
NSBackingStoreType aBacking;
NSInteger level;
id obj;
int version = [aDecoder versionForClassName: @"NSWindow"];
aRect = [aDecoder decodeRect];
[aDecoder decodeValueOfObjCType: @encode(NSUInteger)
at: &aStyle];
// This used to be int, we need to stay compatible
[aDecoder decodeValueOfObjCType: @encode(NSInteger)
at: &aBacking];
// call the designated initializer....
self = [self initWithContentRect: aRect
styleMask: aStyle
backing: aBacking
defer: NO];
p = [aDecoder decodePoint];
obj = [aDecoder decodeObject];
[self setContentView: obj];
obj = [aDecoder decodeObject];
[self setBackgroundColor: obj];
obj = [aDecoder decodeObject];
[self setRepresentedFilename: obj];
obj = [aDecoder decodeObject];
[self setMiniwindowTitle: obj];
obj = [aDecoder decodeObject];
[self setTitle: obj];
if (version < 3)
{
aSize = [aDecoder decodeSize];
[self setMinSize: aSize];
aSize = [aDecoder decodeSize];
[self setMaxSize: aSize];
}
else
{
aSize = [aDecoder decodeSize];
[self setContentMinSize: aSize];
aSize = [aDecoder decodeSize];
[self setContentMaxSize: aSize];
}
[aDecoder decodeValueOfObjCType: @encode(NSInteger)
at: &level];
[self setLevel: level];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
[self setExcludedFromWindowsMenu: flag];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
[self setOneShot: flag];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
[self setAutodisplay: flag];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
[self useOptimizedDrawing: flag];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
[self setDynamicDepthLimit: flag];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
if (flag)
[self enableCursorRects];
else
[self disableCursorRects];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
[self setReleasedWhenClosed: flag];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
[self setHidesOnDeactivate: flag];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
[self setAcceptsMouseMovedEvents: flag];
/* If the image has been specified, use it, if not use the default. */
obj = [aDecoder decodeObject];
if (obj != nil)
{
ASSIGN(_miniaturizedImage, obj);
}
[aDecoder decodeValueOfObjCType: @encode(id)
at: &_initialFirstResponder];
[self setFrameTopLeftPoint: p];
}
return self;
}
@ -90,12 +183,12 @@ static NSUInteger defaultStyleMask = NSTitledWindowMask | NSClosableWindowMask
return self;
}
- (void) _setStyleMask: (unsigned int)newStyleMask
- (void) setStyleMask: (unsigned int)newStyleMask
{
_gormStyleMask = newStyleMask;
}
- (unsigned int) _styleMask
- (unsigned int) styleMask
{
return _gormStyleMask;
}
@ -115,12 +208,12 @@ static NSUInteger defaultStyleMask = NSTitledWindowMask | NSClosableWindowMask
return @"NSWindow";
}
- (void) _setReleasedWhenClosed: (BOOL) flag
- (void) setReleasedWhenClosed: (BOOL) flag
{
_gormReleasedWhenClosed = flag;
}
- (BOOL) _isReleasedWhenClosed
- (BOOL) isReleasedWhenClosed
{
return _gormReleasedWhenClosed;
}