1//
2//  PXRectangleTool.m
3//  Pixen-XCode
4//
5//  Created by Andy Matuschak on Wed Mar 10 2004.
6//  Copyright (c) 2004 Open Sword Group. All rights reserved.
7//
8
9#import "PXRectangleTool.h"
10#import "PXCanvasController.h"
11#import "PXRectangleToolPropertiesView.h"
12
13@implementation PXRectangleTool
14
15- (NSString *)name
16{
17	return NSLocalizedString(@"RECTANGLE_NAME", @"Rectangle Tool");
18}
19
20- actionName
21{
22	return NSLocalizedString(@"RECTANGLE_ACTION", @"Drawing Rectangle");
23}
24
25- init
26{
27    [super init];
28    propertiesView = [[PXRectangleToolPropertiesView alloc] init];
29    return self;
30}
31
32
33- (void)mouseDownAt:(NSPoint)aPoint fromCanvasController:controller
34{
35    [super mouseDownAt:aPoint fromCanvasController:controller];
36    lastRect = NSMakeRect(_origin.x, _origin.y, 0, 0);
37}
38
39- (void)drawRect:(NSRect)aRect inCanvas:aCanvas
40{
41    int i, j;
42    for (i = aRect.origin.x; i <= aRect.origin.x + aRect.size.width; i++)
43    {
44		for (j = aRect.origin.y; j <= aRect.origin.y + aRect.size.height; j++)
45		{
46			[self drawPixelAtPoint:NSMakePoint(i, j) inCanvas:aCanvas];
47		}
48    }
49}
50
51- (void)finalDrawFromPoint:(NSPoint)origin toPoint:(NSPoint)aPoint inCanvas:canvas
52{
53    if ([propertiesView shouldFill])
54    {
55		// careful about backwards-drawn rectangles...
56		NSColor * oldColor = [self color];
57		int borderWidth = [propertiesView borderWidth];
58		if (![propertiesView shouldUseMainColorForFill]) { [self setColor:[propertiesView fillColor]]; }
59		[self drawRect:NSMakeRect((origin.x < aPoint.x) ? origin.x+borderWidth : aPoint.x+borderWidth,
60								  (origin.y < aPoint.y) ? origin.y+borderWidth : aPoint.y+borderWidth,
61								  (origin.x < aPoint.x) ? aPoint.x - origin.x - (borderWidth*2): origin.x - aPoint.x - (borderWidth*2),
62								  (origin.y < aPoint.y) ? aPoint.y - origin.y - (borderWidth*2): origin.y - aPoint.y - (borderWidth*2))
63			  inCanvas:canvas];
64		[self setColor:oldColor];
65    }
66}
67
68- (void)drawFromPoint:(NSPoint)origin toPoint:(NSPoint)finalPoint inCanvas:canvas
69{
70    int i, j;
71    for (i = 0; i < [propertiesView borderWidth]; i++)
72    {
73		if (i != 0)
74		{
75			NSPoint tempOrigin, tempFinalPoint;
76			tempOrigin.x = (origin.x < finalPoint.x) ? origin.x + 1 : origin.x - 1;
77			tempOrigin.y = (origin.y < finalPoint.y) ? origin.y + 1 : origin.y - 1;
78			tempFinalPoint.x = (origin.x < finalPoint.x) ? finalPoint.x - 1 : finalPoint.x + 1;
79			tempFinalPoint.y = (origin.y < finalPoint.y) ? finalPoint.y - 1 : finalPoint.y + 1;
80			origin = tempOrigin;
81			finalPoint = tempFinalPoint;
82		}
83		/*if (finalPoint.x > [canvas size].width - 1) { finalPoint.x = [canvas size].width - 1; }
84		if (finalPoint.x < 0) { finalPoint.x = 0; }
85		if (finalPoint.y > [canvas size].height - 1) { finalPoint.y = [canvas size].height - 1; }
86		if (finalPoint.y < 0) { finalPoint.y = 0; }*/
87		for (j = (origin.x < finalPoint.x) ? origin.x : finalPoint.x; (origin.x < finalPoint.x) ? j <= finalPoint.x : j <= origin.x; j++)
88		{
89			[self drawPixelAtPoint:NSMakePoint(j, origin.y) inCanvas:canvas];
90			[self drawPixelAtPoint:NSMakePoint(j, finalPoint.y) inCanvas:canvas];
91		}
92		for (j = (origin.y < finalPoint.y) ? origin.y : finalPoint.y; (origin.y < finalPoint.y) ? j <= finalPoint.y : j <= origin.y; j++)
93		{
94			[self drawPixelAtPoint:NSMakePoint(origin.x, j) inCanvas:canvas];
95			[self drawPixelAtPoint:NSMakePoint(finalPoint.x, j) inCanvas:canvas];
96		}
97    }
98}
99
100- (void)mouseDraggedFrom:(NSPoint)initialPoint to:(NSPoint)finalPoint fromCanvasController:controller
101{
102    NSPoint backupOrigin = _origin;
103    [super mouseDraggedFrom:initialPoint to:finalPoint fromCanvasController:controller];
104    _origin = backupOrigin;
105}
106
107@end