2001-12-17 16:51:51 +00:00
|
|
|
/** <title>NSRulerMarker</title>
|
2001-10-06 22:29:57 +00:00
|
|
|
|
2001-12-17 16:51:51 +00:00
|
|
|
<abstract>Displays a symbol in a NSRulerView.</abstract>
|
2001-10-06 22:29:57 +00:00
|
|
|
|
|
|
|
Copyright (C) 2001 Free Software Foundation, Inc.
|
|
|
|
|
|
|
|
Author: Fred Kiefer <FredKiefer@gmx.de>
|
|
|
|
Date: Sept 2001
|
|
|
|
|
|
|
|
This file is part of the GNUstep GUI Library.
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
2007-10-29 21:16:17 +00:00
|
|
|
modify it under the terms of the GNU Lesser General Public
|
2001-10-06 22:29:57 +00:00
|
|
|
License as published by the Free Software Foundation; either
|
2008-06-10 04:01:49 +00:00
|
|
|
version 2 of the License, or (at your option) any later version.
|
2007-10-29 21:16:17 +00:00
|
|
|
|
2001-10-06 22:29:57 +00:00
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
2007-10-29 21:16:17 +00:00
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Lesser General Public License for more details.
|
2001-10-06 22:29:57 +00:00
|
|
|
|
2007-10-29 21:16:17 +00:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2001-10-06 22:29:57 +00:00
|
|
|
License along with this library; see the file COPYING.LIB.
|
2007-10-29 21:16:17 +00:00
|
|
|
If not, see <http://www.gnu.org/licenses/> or write to the
|
|
|
|
Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA.
|
2001-10-06 22:29:57 +00:00
|
|
|
*/
|
|
|
|
|
2011-03-04 11:33:22 +00:00
|
|
|
#import <Foundation/NSException.h>
|
|
|
|
#import "AppKit/NSRulerMarker.h"
|
|
|
|
#import "AppKit/NSRulerView.h"
|
|
|
|
#import "AppKit/NSEvent.h"
|
|
|
|
#import "AppKit/NSImage.h"
|
|
|
|
#import "AppKit/NSApplication.h"
|
|
|
|
#import "AppKit/NSWindow.h"
|
|
|
|
#import "AppKit/NSCursor.h"
|
2002-11-02 23:17:23 +00:00
|
|
|
|
2001-10-06 22:29:57 +00:00
|
|
|
@implementation NSRulerMarker
|
|
|
|
|
|
|
|
- (id)initWithRulerView:(NSRulerView *)aRulerView
|
2013-02-16 00:08:33 +00:00
|
|
|
markerLocation:(CGFloat)location
|
2001-10-06 22:29:57 +00:00
|
|
|
image:(NSImage *)anImage
|
|
|
|
imageOrigin:(NSPoint)imageOrigin
|
|
|
|
{
|
|
|
|
if (aRulerView == nil || anImage == nil)
|
|
|
|
[NSException raise: NSInvalidArgumentException
|
|
|
|
format: @"No view or image for ruler marker"];
|
|
|
|
|
2002-11-02 23:17:23 +00:00
|
|
|
self = [super init];
|
2001-10-06 22:29:57 +00:00
|
|
|
_isMovable = YES;
|
|
|
|
_isRemovable = NO;
|
|
|
|
_location = location;
|
|
|
|
_imageOrigin = imageOrigin;
|
|
|
|
_rulerView = aRulerView;
|
|
|
|
ASSIGN(_image, anImage);
|
|
|
|
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) dealloc
|
|
|
|
{
|
|
|
|
RELEASE(_image);
|
2002-11-02 23:17:23 +00:00
|
|
|
TEST_RELEASE(_representedObject);
|
2001-10-06 22:29:57 +00:00
|
|
|
|
|
|
|
[super dealloc];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSRulerView *)ruler
|
|
|
|
{
|
|
|
|
return _rulerView;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)setImage:(NSImage *)anImage
|
|
|
|
{
|
|
|
|
ASSIGN(_image, anImage);
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSImage *)image
|
|
|
|
{
|
|
|
|
return _image;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)setImageOrigin:(NSPoint)aPoint
|
|
|
|
{
|
|
|
|
_imageOrigin = aPoint;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSPoint)imageOrigin
|
|
|
|
{
|
|
|
|
return _imageOrigin;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSRect)imageRectInRuler
|
|
|
|
{
|
2002-11-02 23:17:23 +00:00
|
|
|
BOOL flipped = [_rulerView isFlipped];
|
2001-10-06 22:29:57 +00:00
|
|
|
NSSize size = [_image size];
|
2002-11-02 23:17:23 +00:00
|
|
|
NSPoint pointInRuler;
|
|
|
|
|
|
|
|
pointInRuler = [[_rulerView clientView]
|
|
|
|
convertPoint: NSMakePoint(_location, _location)
|
|
|
|
toView: _rulerView];
|
2001-10-06 22:29:57 +00:00
|
|
|
|
|
|
|
if ([_rulerView orientation] == NSHorizontalRuler)
|
|
|
|
{
|
2002-11-02 23:17:23 +00:00
|
|
|
if (flipped)
|
|
|
|
{
|
|
|
|
return NSMakeRect(pointInRuler.x - _imageOrigin.x,
|
|
|
|
[_rulerView baselineLocation] - (size.height - _imageOrigin.y),
|
|
|
|
size.width, size.height);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return NSMakeRect(pointInRuler.x - _imageOrigin.x,
|
|
|
|
[_rulerView baselineLocation] - _imageOrigin.y,
|
|
|
|
size.width, size.height);
|
|
|
|
}
|
2001-10-06 22:29:57 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2002-11-02 23:17:23 +00:00
|
|
|
if (flipped)
|
|
|
|
{
|
|
|
|
return NSMakeRect([_rulerView baselineLocation] - _imageOrigin.x,
|
|
|
|
pointInRuler.y - (size.height - _imageOrigin.y),
|
|
|
|
size.width, size.height);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return NSMakeRect([_rulerView baselineLocation] - _imageOrigin.x,
|
|
|
|
pointInRuler.y - _imageOrigin.y,
|
|
|
|
size.width, size.height);
|
|
|
|
}
|
2001-10-06 22:29:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return NSZeroRect;
|
|
|
|
}
|
|
|
|
|
2013-02-16 00:08:33 +00:00
|
|
|
- (CGFloat)thicknessRequiredInRuler
|
2001-10-06 22:29:57 +00:00
|
|
|
{
|
|
|
|
NSSize size = [_image size];
|
|
|
|
|
|
|
|
if ([_rulerView orientation] == NSHorizontalRuler)
|
|
|
|
{
|
2002-11-02 23:17:23 +00:00
|
|
|
/* what is below imageOrigin is on the ruler area and is not counted */
|
|
|
|
return size.height - _imageOrigin.y;
|
2001-10-06 22:29:57 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2002-11-02 23:17:23 +00:00
|
|
|
/* what is to the right of imageOrigin is on the ruler area */
|
|
|
|
return _imageOrigin.x;
|
2001-10-06 22:29:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)setMovable:(BOOL)flag
|
|
|
|
{
|
|
|
|
_isMovable = flag;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)isMovable
|
|
|
|
{
|
|
|
|
return _isMovable;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)setRemovable:(BOOL)flag
|
|
|
|
{
|
|
|
|
_isRemovable = flag;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)isRemovable
|
|
|
|
{
|
|
|
|
return _isRemovable;
|
|
|
|
}
|
|
|
|
|
2013-02-16 00:08:33 +00:00
|
|
|
- (void)setMarkerLocation:(CGFloat)location
|
2001-10-06 22:29:57 +00:00
|
|
|
{
|
|
|
|
_location = location;
|
|
|
|
}
|
|
|
|
|
2013-02-16 00:08:33 +00:00
|
|
|
- (CGFloat)markerLocation
|
2001-10-06 22:29:57 +00:00
|
|
|
{
|
|
|
|
return _location;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)setRepresentedObject:(id <NSCopying>)anObject
|
|
|
|
{
|
2010-04-10 20:33:30 +00:00
|
|
|
ASSIGN(_representedObject, (id)anObject);
|
2001-10-06 22:29:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
- (id <NSCopying>)representedObject
|
|
|
|
{
|
|
|
|
return _representedObject;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)drawRect:(NSRect)aRect
|
|
|
|
{
|
|
|
|
NSPoint aPoint;
|
2002-11-02 23:17:23 +00:00
|
|
|
NSRect rect;
|
|
|
|
|
|
|
|
/* do not draw when dragging, all drawing is done in -trackMouse... */
|
|
|
|
if (_isDragging)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
rect = [self imageRectInRuler];
|
2002-04-06 23:36:12 +00:00
|
|
|
aPoint = rect.origin;
|
|
|
|
if ([_rulerView isFlipped])
|
|
|
|
{
|
|
|
|
aPoint.y += rect.size.height;
|
|
|
|
}
|
2001-10-06 22:29:57 +00:00
|
|
|
rect = NSIntersectionRect(aRect, rect);
|
|
|
|
if (NSIsEmptyRect(rect))
|
|
|
|
return;
|
|
|
|
|
|
|
|
[_image compositeToPoint: aPoint
|
|
|
|
operation: NSCompositeSourceOver];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL)isDragging
|
|
|
|
{
|
|
|
|
return _isDragging;
|
|
|
|
}
|
|
|
|
|
2002-11-02 23:17:23 +00:00
|
|
|
- (BOOL)trackMouse:(NSEvent *)theEvent adding:(BOOL)adding
|
2001-10-06 22:29:57 +00:00
|
|
|
{
|
|
|
|
NSView *client = [_rulerView clientView];
|
2009-04-10 02:55:34 +00:00
|
|
|
NSEvent *newEvent = nil;
|
2013-02-13 08:40:36 +00:00
|
|
|
NSUInteger eventMask = NSLeftMouseDraggedMask | NSLeftMouseUpMask;
|
2002-11-02 23:17:23 +00:00
|
|
|
BOOL isFar = NO;
|
|
|
|
BOOL askedCanRemove = NO;
|
|
|
|
BOOL canRemove = NO;
|
|
|
|
BOOL flipped;
|
|
|
|
NSPoint mousePositionInRuler;
|
|
|
|
NSPoint mousePositionInClient;
|
|
|
|
NSPoint mousePositionInWindow;
|
|
|
|
NSPoint previousMousePositionInWindow;
|
|
|
|
NSPoint mouseOffset;
|
2013-02-16 00:08:33 +00:00
|
|
|
CGFloat location;
|
2002-11-02 23:17:23 +00:00
|
|
|
NSRect drawRect;
|
2009-02-26 05:42:09 +00:00
|
|
|
NSRect bounds = [_rulerView bounds];
|
2002-11-02 23:17:23 +00:00
|
|
|
NSPoint drawPoint;
|
|
|
|
BOOL returnValue = NO;
|
|
|
|
NSWindow *window;
|
|
|
|
|
|
|
|
if (adding)
|
2001-10-06 22:29:57 +00:00
|
|
|
{
|
2002-11-02 23:17:23 +00:00
|
|
|
if ([client respondsToSelector: @selector(rulerView:shouldAddMarker:)]
|
|
|
|
&& [client rulerView: _rulerView shouldAddMarker: self] == NO)
|
2001-10-06 22:29:57 +00:00
|
|
|
return NO;
|
|
|
|
}
|
|
|
|
else if (!_isMovable && !_isRemovable)
|
|
|
|
{
|
|
|
|
return NO;
|
|
|
|
}
|
2002-11-02 23:17:23 +00:00
|
|
|
else if (_isMovable
|
|
|
|
&& [client respondsToSelector: @selector(rulerView:shouldMoveMarker:)]
|
|
|
|
&& [client rulerView: _rulerView shouldMoveMarker: self] == NO)
|
2001-10-06 22:29:57 +00:00
|
|
|
{
|
|
|
|
return NO;
|
|
|
|
}
|
|
|
|
|
2002-11-02 23:17:23 +00:00
|
|
|
// I'm being dragged!
|
2001-10-06 22:29:57 +00:00
|
|
|
_isDragging = YES;
|
2002-11-02 23:17:23 +00:00
|
|
|
RETAIN(self); // make sure we're not dealloc'd if removed from ruler
|
|
|
|
[NSCursor hide];
|
|
|
|
[_rulerView lockFocus];
|
2001-10-06 22:29:57 +00:00
|
|
|
|
2002-11-02 23:17:23 +00:00
|
|
|
/* cache some values */
|
|
|
|
flipped = [_rulerView isFlipped];
|
|
|
|
window = [_rulerView window];
|
|
|
|
|
|
|
|
mousePositionInWindow = [theEvent locationInWindow];
|
|
|
|
previousMousePositionInWindow = mousePositionInWindow;
|
|
|
|
mousePositionInRuler = [_rulerView convertPoint: mousePositionInWindow
|
|
|
|
fromView: nil];
|
|
|
|
|
|
|
|
/* calculate offset of mouse click relative to marker's location
|
|
|
|
(to avoid marker bumping when dragging starts) */
|
|
|
|
if (adding)
|
|
|
|
{
|
|
|
|
mouseOffset = NSMakePoint(0, 0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
NSPoint locationInRuler;
|
|
|
|
locationInRuler = [client convertPoint: NSMakePoint(_location, _location)
|
|
|
|
toView: _rulerView];
|
|
|
|
if ([_rulerView orientation] == NSHorizontalRuler)
|
|
|
|
{
|
|
|
|
mouseOffset = NSMakePoint(locationInRuler.x - mousePositionInRuler.x, 0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
mouseOffset = NSMakePoint(0, locationInRuler.y - mousePositionInRuler.y);
|
|
|
|
if (flipped)
|
|
|
|
{
|
|
|
|
mouseOffset.y *= -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* cache image without marker and draw marker in position */
|
|
|
|
if (adding)
|
|
|
|
{
|
|
|
|
/* marker is not drawn yet; mouse is in marker's imageOrigin */
|
|
|
|
drawRect.size = [_image size];
|
|
|
|
drawPoint.x = mousePositionInRuler.x - _imageOrigin.x;
|
|
|
|
if (!flipped)
|
|
|
|
{
|
|
|
|
drawPoint.y = mousePositionInRuler.y - _imageOrigin.y;
|
|
|
|
drawRect.origin = drawPoint;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
drawPoint.y = mousePositionInRuler.y + _imageOrigin.y;
|
|
|
|
drawRect.origin.x = drawPoint.x;
|
|
|
|
drawRect.origin.y = drawPoint.y - drawRect.size.height;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
drawRect = [self imageRectInRuler];
|
|
|
|
drawPoint = drawRect.origin;
|
|
|
|
if (flipped)
|
|
|
|
{
|
|
|
|
drawPoint.y += drawRect.size.height;
|
|
|
|
}
|
|
|
|
/* make marker disappear (-drawRect: does not draw marker when dragged) */
|
|
|
|
[_rulerView drawRect: drawRect];
|
|
|
|
}
|
|
|
|
[window cacheImageInRect: [_rulerView convertRect: drawRect toView: nil]];
|
|
|
|
[_image compositeToPoint: drawPoint
|
|
|
|
operation: NSCompositeSourceOver];
|
|
|
|
[window flushWindow];
|
2001-10-06 22:29:57 +00:00
|
|
|
|
2002-11-02 23:17:23 +00:00
|
|
|
/* loop processing events until mouse up */
|
|
|
|
while (_isDragging)
|
|
|
|
{
|
2009-04-10 02:55:34 +00:00
|
|
|
if(newEvent == nil)
|
|
|
|
{
|
|
|
|
newEvent = theEvent;
|
|
|
|
previousMousePositionInWindow = NSMakePoint(0,0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
newEvent = [NSApp nextEventMatchingMask: eventMask
|
|
|
|
untilDate: [NSDate distantFuture]
|
|
|
|
inMode: NSEventTrackingRunLoopMode
|
|
|
|
dequeue: YES];
|
|
|
|
}
|
|
|
|
|
2002-11-02 23:17:23 +00:00
|
|
|
switch ([newEvent type])
|
2009-04-10 02:55:34 +00:00
|
|
|
{
|
|
|
|
case NSLeftMouseDown:
|
2002-11-02 23:17:23 +00:00
|
|
|
case NSLeftMouseDragged:
|
|
|
|
/* take mouse position from outside of event stream
|
|
|
|
and ignore event if in same position as previous event,
|
|
|
|
to reduce the number of events to process */
|
|
|
|
mousePositionInWindow = [window mouseLocationOutsideOfEventStream];
|
|
|
|
if (NSEqualPoints(mousePositionInWindow, previousMousePositionInWindow))
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
previousMousePositionInWindow = mousePositionInWindow;
|
|
|
|
|
|
|
|
/* offset mouse position to marker's location */
|
|
|
|
mousePositionInWindow.x += mouseOffset.x;
|
|
|
|
mousePositionInWindow.y += mouseOffset.y;
|
|
|
|
|
|
|
|
/* see if mouse is far from ruler area (to remove marker) */
|
|
|
|
mousePositionInRuler = [_rulerView convertPoint: mousePositionInWindow
|
|
|
|
fromView: nil];
|
2009-02-26 05:42:09 +00:00
|
|
|
isFar = !NSMouseInRect(mousePositionInRuler, bounds, flipped);
|
2002-11-02 23:17:23 +00:00
|
|
|
|
|
|
|
/* if it is the first time it's far from the ruler area,
|
|
|
|
see if it can be removed */
|
|
|
|
if (isFar && !askedCanRemove)
|
|
|
|
{
|
|
|
|
if (adding)
|
|
|
|
{
|
|
|
|
canRemove = YES;
|
|
|
|
}
|
|
|
|
else if (!_isRemovable)
|
|
|
|
{
|
|
|
|
canRemove = NO;
|
|
|
|
}
|
|
|
|
else if ([client respondsToSelector: @selector(rulerView:shouldRemoveMarker:)])
|
|
|
|
{
|
|
|
|
canRemove = [client rulerView: _rulerView
|
|
|
|
shouldRemoveMarker: self];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
canRemove = YES;
|
|
|
|
}
|
|
|
|
askedCanRemove = YES;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* calculate new marker location */
|
|
|
|
mousePositionInClient = [client convertPoint: mousePositionInWindow
|
|
|
|
fromView: nil];
|
|
|
|
if ([_rulerView orientation] == NSHorizontalRuler)
|
|
|
|
{
|
|
|
|
location = mousePositionInClient.x;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
location = mousePositionInClient.y;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* give client a chance to change location */
|
|
|
|
if (adding && !isFar)
|
|
|
|
{
|
|
|
|
if ([client respondsToSelector: @selector(rulerView:willAddMarker:atLocation:)])
|
|
|
|
{
|
|
|
|
location = [client rulerView: _rulerView
|
|
|
|
willAddMarker: self
|
|
|
|
atLocation: location];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (_isMovable && !(isFar && canRemove))
|
|
|
|
{
|
|
|
|
if ([client respondsToSelector: @selector(rulerView:willMoveMarker:toLocation:)])
|
|
|
|
{
|
|
|
|
location = [client rulerView: _rulerView
|
|
|
|
willMoveMarker: self
|
|
|
|
toLocation: location];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_location = location;
|
|
|
|
|
|
|
|
/* calculate position to draw marker */
|
|
|
|
drawRect = [self imageRectInRuler];
|
|
|
|
drawPoint = drawRect.origin;
|
|
|
|
if (flipped)
|
|
|
|
{
|
|
|
|
drawPoint.y += drawRect.size.height;
|
|
|
|
}
|
|
|
|
if (isFar && canRemove)
|
|
|
|
{
|
|
|
|
if ([_rulerView orientation] == NSHorizontalRuler)
|
|
|
|
{
|
|
|
|
float offset;
|
|
|
|
offset = mousePositionInRuler.y - [_rulerView baselineLocation];
|
|
|
|
drawPoint.y += offset;
|
|
|
|
drawRect.origin.y += offset;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
float offset;
|
|
|
|
offset = mousePositionInRuler.x - [_rulerView baselineLocation];
|
|
|
|
drawPoint.x += offset;
|
|
|
|
drawRect.origin.x += offset;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* undraw marker and redraw in new position */
|
|
|
|
[window restoreCachedImage];
|
|
|
|
[window cacheImageInRect: [_rulerView convertRect: drawRect
|
|
|
|
toView: nil]];
|
|
|
|
[_image compositeToPoint: drawPoint
|
|
|
|
operation: NSCompositeSourceOver];
|
|
|
|
[window flushWindow];
|
|
|
|
break;
|
|
|
|
|
|
|
|
case NSLeftMouseUp:
|
|
|
|
if (adding)
|
|
|
|
{
|
|
|
|
if (isFar)
|
|
|
|
{
|
|
|
|
/* do nothing, it won't be added */
|
|
|
|
[window restoreCachedImage];
|
|
|
|
returnValue = NO;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* marker is added to ruler view; inform client */
|
|
|
|
[window discardCachedImage];
|
|
|
|
[_rulerView addMarker:self];
|
|
|
|
if ([client respondsToSelector: @selector(rulerView:didAddMarker:)])
|
|
|
|
{
|
|
|
|
[client rulerView: _rulerView didAddMarker: self];
|
|
|
|
}
|
|
|
|
returnValue = YES;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (isFar && _isRemovable && canRemove)
|
|
|
|
{
|
|
|
|
/* remove marker from ruler and inform client */
|
|
|
|
/* this could result in marker being dealloc'd; that's
|
|
|
|
why there is a retain before the loop */
|
|
|
|
[window restoreCachedImage];
|
|
|
|
[_rulerView removeMarker:self];
|
|
|
|
if ([client respondsToSelector: @selector(rulerView:didRemoveMarker:)])
|
|
|
|
{
|
|
|
|
[client rulerView: _rulerView didRemoveMarker: self];
|
|
|
|
}
|
|
|
|
returnValue = YES;
|
|
|
|
}
|
|
|
|
else if (_isMovable)
|
|
|
|
{
|
|
|
|
/* inform client that marker has been moved */
|
|
|
|
[window discardCachedImage];
|
|
|
|
if ([client respondsToSelector: @selector(rulerView:didMoveMarker:)])
|
|
|
|
{
|
|
|
|
[client rulerView: _rulerView didMoveMarker: self];
|
|
|
|
}
|
|
|
|
returnValue = YES;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
[window restoreCachedImage];
|
|
|
|
returnValue = NO;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_isDragging = NO;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
[_rulerView unlockFocus];
|
|
|
|
[NSCursor unhide];
|
|
|
|
[window flushWindow];
|
|
|
|
RELEASE(self); // was retained when dragging started
|
|
|
|
return returnValue;
|
2001-10-06 22:29:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// NSCopying protocol
|
|
|
|
- (id) copyWithZone: (NSZone*)zone
|
|
|
|
{
|
|
|
|
NSRulerMarker *new = (NSRulerMarker*)NSCopyObject (self, 0, zone);
|
|
|
|
|
|
|
|
new->_image = [_image copyWithZone: zone];
|
|
|
|
new->_isDragging = NO;
|
|
|
|
return new;
|
|
|
|
}
|
|
|
|
|
|
|
|
// NSCoding protocol
|
|
|
|
- (void) encodeWithCoder: (NSCoder*)aCoder
|
|
|
|
{
|
* Source/NSEvent.m,
* Source/NSParagraphStyle.m: Use NSInteger instead of enumerator
type name for decoding and encoding.
* Header/AppKit/NSFontPanel.h,
* Header/AppKit/NSOpenPanel.h,
* Header/AppKit/NSDataLinkPanel.h,
* Source/NSDataLinkPanel.m,
* Header/AppKit/NSForm.h,
* Source/NSForm.m,
* Header/AppKit/NSHelpPanel.h,
* Source/NSHelpPanel.m,
* Source/NSColorPanel.m: Remove unused encoding/decoding
* methods.
* Source/NSCustomImageRep.m,
* Source/NSEPSImageRep.m,
* Source/NSMovie.m,
* Source/NSRulerMarker.m,
* Source/NSColorList.m: Flag missing keyed encoding/decoding.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@36377 72102866-910b-0410-8b05-ffd578937521
2013-03-17 19:53:50 +00:00
|
|
|
if ([aCoder allowsKeyedCoding])
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
[aCoder encodeObject: _rulerView];
|
|
|
|
[aCoder encodeObject: _image];
|
|
|
|
[aCoder encodeConditionalObject: _representedObject];
|
|
|
|
[aCoder encodePoint: _imageOrigin];
|
|
|
|
[aCoder encodeValueOfObjCType: @encode(CGFloat) at: &_location];
|
|
|
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &_isMovable];
|
|
|
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &_isRemovable];
|
|
|
|
}
|
2001-10-06 22:29:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
- (id) initWithCoder: (NSCoder*)aDecoder
|
|
|
|
{
|
* Source/NSEvent.m,
* Source/NSParagraphStyle.m: Use NSInteger instead of enumerator
type name for decoding and encoding.
* Header/AppKit/NSFontPanel.h,
* Header/AppKit/NSOpenPanel.h,
* Header/AppKit/NSDataLinkPanel.h,
* Source/NSDataLinkPanel.m,
* Header/AppKit/NSForm.h,
* Source/NSForm.m,
* Header/AppKit/NSHelpPanel.h,
* Source/NSHelpPanel.m,
* Source/NSColorPanel.m: Remove unused encoding/decoding
* methods.
* Source/NSCustomImageRep.m,
* Source/NSEPSImageRep.m,
* Source/NSMovie.m,
* Source/NSRulerMarker.m,
* Source/NSColorList.m: Flag missing keyed encoding/decoding.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@36377 72102866-910b-0410-8b05-ffd578937521
2013-03-17 19:53:50 +00:00
|
|
|
if ([aDecoder allowsKeyedCoding])
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_rulerView = [aDecoder decodeObject];
|
|
|
|
_image = [aDecoder decodeObject];
|
|
|
|
_representedObject = [aDecoder decodeObject];
|
|
|
|
_imageOrigin = [aDecoder decodePoint];
|
|
|
|
[aDecoder decodeValueOfObjCType: @encode(CGFloat) at: &_location];
|
|
|
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &_isMovable];
|
|
|
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &_isRemovable];
|
|
|
|
}
|
2001-10-06 22:29:57 +00:00
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
// NSObject protocol
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|