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