This is PXKView.m in view mode; [Download] [Up]
/* PXKView.m NSView for GNUstep GUI X/DPS Backend. Copyright (C) 1996 Free Software Foundation, Inc. Author: Pascal Forget <pascal@wsc.com> Date: January 1996 This file is part of the GNUstep GUI X/DPS Backend. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. If you are interested in a warranty or support for this source code, contact Scott Christley <scottc@net-community.com> for more information. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <gnustep/xdps/PXKView.h> static NSView *focusView; // Back-end instance variables structures typedef struct _PXKView_struct { int viewNum; } PXKView_struct; #define VIEW_NUM (((PXKView_struct *)be_view_reserved)->viewNum) @implementation PXKView - (void)displayIfNeeded { if ((super_view != nil) && (needs_display == YES)) { if (VIEW_NUM < 0) { // VIEW_NUM = createView(self, [super_view viewNum]); if (VIEW_NUM <0) { fprintf(stderr, "NSView display: error creating the view's " "windowing system-specific implementation.\n"); /* Should raise exception here */ } } // displayView(VIEW_NUM); if (opaque == YES) { [sub_views makeObjectsPerform:@selector(display)]; } } } - (void)displayIfNeededIgnoringOpacity { if ((super_view != nil) && (needs_display == YES)) { if (VIEW_NUM < 0) { // VIEW_NUM = createView(self, [super_view viewNum]); if (VIEW_NUM <0) { fprintf(stderr, "NSView display: error creating the view's " "windowing system-specific implementation.\n"); /* Should raise exception here */ } } // displayView(VIEW_NUM); [sub_views makeObjectsPerform:@selector(display)]; } } - (id)initWithFrame:(NSRect)frameRect { [super initWithFrame:frameRect]; // Allocate back-end structure be_view_reserved = malloc(sizeof(PXKView_struct)); VIEW_NUM = -1; return self; } - (void)dealloc { // Release back-end structure free(be_view_reserved); [super dealloc]; } - (void)lockFocus { [super lockFocus]; } - (NSView *)opaqueAncestor { if (super_view != nil) { if ([super_view isOpaque]) { return super_view; } else { return [super_view opaqueAncestor]; } } return nil; } /* * removeFromSuperview removes the receiver from the view hierarchy. * My (Pascal) interpretation of the previous line is that the view * will not only be removed from the view hierarchy, but it will * effectively disappear from the screen. */ - (void)removeFromSuperview { if (super_view != nil) { [(NSMutableArray *)[super_view subviews] removeObject:self]; } /* * Destroy the X Window that provided * the on-screen representation for this view */ if (VIEW_NUM > -1) { // destroyView(VIEW_NUM); VIEW_NUM = -1; window = nil; } } - (void)replaceSubview:(NSView *)oldView with:(NSView *)newView { unsigned int index = [sub_views indexOfObject:oldView]; if (index != NSNotFound) { if (newView != nil) { [sub_views replaceObjectAtIndex:index withObject:newView]; [newView setSuperview:self]; } else { [sub_views removeObject:oldView]; } [oldView setSuperview:nil]; } } - (void)rotateByAngle:(float)angle { frame_rotation += angle; setViewFrameRotation(VIEW_NUM, frame_rotation); } - (void)setFrame:(NSRect)frameRect { [super setFrame: frameRect]; // setViewFrame(VIEW_NUM, frame); // [self resizeSubviewsOldSize:oldSize newSize:frame.size]; } - (void)setFrameOrigin:(NSPoint)newOrigin { #if 1 frame.origin.x = newOrigin.x; frame.origin.y = newOrigin.y; setViewFrameOrigin(VIEW_NUM, newOrigin); if ((post_frame_changes == YES) && (super_view != nil)) { /* Notify superview. (OpenStep does not specify selector -Duh.) */ } #endif } - (void)setFrameRotation:(float)angle { if (frame_rotation != angle) { frame_rotation = angle; setViewFrameRotation(VIEW_NUM, frame_rotation); if ((post_frame_changes == YES) && (super_view != nil)) { /* Notify superview. (OpenStep does not specify selector -Duh.) */ } } } - (void)setFrameSize:(NSSize)newSize { NSSize oldSize = frame.size; #if 1 frame.size = newSize; setViewFrameSize(VIEW_NUM, newSize); if ((post_frame_changes == YES) && (super_view != nil)) { /* Notify superview. (OpenStep does not specify selector -Duh.) */ } [self resizeSubviewsOldSize:oldSize newSize:newSize]; #endif } - (void)unlockFocus { if (focusView == self) { focusView = nil; } } - (id)viewWithTag:(int)aTag { unsigned int i, count = [sub_views count]; NSView *aSubview; for (i=0; i<count; i++) { aSubview = [sub_views objectAtIndex:i]; if ([aSubview tag] == aTag) { return aSubview; } } return nil; /* Not found */ } - (void)setSuperview:(NSView *)aView { super_view = aView; if (aView != nil) { window = [super_view window]; } else { window = nil; /* * Destroy the X Window that provided * the on-screen representation for this view */ if (VIEW_NUM > -1) { // destroyView(VIEW_NUM); VIEW_NUM = -1; } } } @end @implementation NSView (NonOpenStep) - (void)resizeSubviewsOldSize:(NSSize)oldSize newSize:(NSSize)newSize { if ((autoresize_subviews == YES) && ((oldSize.width != newSize.width) || (oldSize.height != newSize.height))) { [self resizeSubviewsOldSize:oldSize]; } } - (void)resizeSubviewsOldSize:(NSSize)oldSize { NSView *aSubview; int index = [sub_views count]; while (index > 0) { aSubview = [sub_views objectAtIndex:index]; [aSubview superviewSizeChanged:oldSize]; index--; } } - (int)viewNum { return VIEW_NUM; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.