summaryrefslogtreecommitdiff
path: root/src/osx/SelectableNodeView.m
blob: 6fdd283903d4fe1c27a5b935c62cf56eea5e0a9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//
//  SelectableView.m
//  TikZiT
//  
//  Copyright 2010 Aleks Kissinger. All rights reserved.
//  
//  
//  This file is part of TikZiT.
//  
//  TikZiT is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//  
//  TikZiT 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 General Public License for more details.
//  
//  You should have received a copy of the GNU General Public License
//  along with TikZiT.  If not, see <http://www.gnu.org/licenses/>.
//  

#import "SelectableNodeView.h"
#import "Shape.h"
#import "Transformer.h"

@implementation SelectableNodeView

@synthesize selected;

- (id)initWithFrame:(NSRect)frameRect {
	[super initWithFrame:frameRect];
	nodeLayer = nil;
	return self;
}

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context {
//	NSLog(@"got draw");
//	CGContextSaveGState(context);
//	
//	if (selected) {
//		CGContextSetRGBStrokeColor(context, 0.61f, 0.735f, 1.0f, 1.0f);
//		CGContextSetRGBFillColor(context, 0.61f, 0.735f, 1.0f, 0.5f);
//		CGContextSetLineWidth(context, 1.0f);
//		
//		CGRect box = CGRectMake([layer frame].origin.x + 2,
//								[layer frame].origin.y + 2,
//								[layer frame].size.width - 4,
//								[layer frame].size.height - 4);
//		
//		//CGContextAddRect(context, box);
//		CGContextDrawPath(context, kCGPathFillStroke);
//	}
//	
//	CGContextRestoreGState(context);
	
	if (nodeLayer!=nil) {
		if (![[[self layer] sublayers] containsObject:nodeLayer]) {
			[[self layer] addSublayer:nodeLayer];
			NSPoint c = NSMakePoint(CGRectGetMidX([[self layer] frame]),
									CGRectGetMidY([[self layer] frame]));
			[nodeLayer setCenter:c andAnimateWhen:NO];
		}
		
		if (selected) [[nodeLayer selection] select];
		else [[nodeLayer selection] deselect];
		
		[nodeLayer updateFrame];
	}
}

- (void)drawRect:(NSRect)rect {
	[super drawRect:rect];
}

- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; }

- (void)setNodeStyle:(NodeStyle *)sty {
	if (nodeLayer == nil) {
		nodeLayer = [[NodeLayer alloc] initWithNode:[Node node]
										transformer:[Transformer defaultTransformer]];
		[nodeLayer setRescale:NO];
	}
	
	[[nodeLayer node] setStyle:sty];
	[nodeLayer updateFrame];
}

- (NodeStyle*)nodeStyle {
	if (nodeLayer != nil) return [[nodeLayer node] style];
	else return nil;
}


@end