diff options
author | Aleks Kissinger <aleks0@gmail.com> | 2018-05-07 13:21:59 +0200 |
---|---|---|
committer | Aleks Kissinger <aleks0@gmail.com> | 2018-05-07 13:21:59 +0200 |
commit | d7f0b3e19fddc89fd22692847e9d840023d2b7f3 (patch) | |
tree | 762f48cb637eef334cf7f6320fe13b7988bc53e3 /tikzit-old/src/gtk/BoundingBoxTool.m | |
parent | b00c5250d7a56b6d20980d89cf331a114fdfdee0 (diff) |
GPLed
Diffstat (limited to 'tikzit-old/src/gtk/BoundingBoxTool.m')
-rw-r--r-- | tikzit-old/src/gtk/BoundingBoxTool.m | 353 |
1 files changed, 0 insertions, 353 deletions
diff --git a/tikzit-old/src/gtk/BoundingBoxTool.m b/tikzit-old/src/gtk/BoundingBoxTool.m deleted file mode 100644 index 483705e..0000000 --- a/tikzit-old/src/gtk/BoundingBoxTool.m +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Copyright 2011-2012 Alex Merry <alex.merry@kdemail.net> - * - * This program 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 2 of - * the License, or (at your option) any later version. - * - * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#import "BoundingBoxTool.h" - -#import "GraphRenderer.h" -#import "TikzDocument.h" -#import "tzstockitems.h" - -static const float handle_size = 8.0; -float sideHandleTop(NSRect bbox) { - return (NSMinY(bbox) + NSMaxY(bbox) - handle_size)/2.0f; -} -float tbHandleLeft(NSRect bbox) { - return (NSMinX(bbox) + NSMaxX(bbox) - handle_size)/2.0f; -} - -@interface BoundingBoxTool (Private) -- (NSRect) screenBoundingBox; -- (ResizeHandle) boundingBoxResizeHandleAt:(NSPoint)p; -- (NSRect) boundingBoxResizeHandleRect:(ResizeHandle)handle; -- (void) setResizeCursorForHandle:(ResizeHandle)handle; -@end - -@implementation BoundingBoxTool -- (NSString*) name { return @"Bounding Box"; } -- (const gchar*) stockId { return TIKZIT_STOCK_BOUNDING_BOX; } -- (NSString*) helpText { return @"Set the bounding box"; } -- (NSString*) shortcut { return @"b"; } - -+ (id) tool { - return [[[self alloc] init] autorelease]; -} - -- (id) init { - self = [super init]; - - if (self) { - currentResizeHandle = NoHandle; - } - - return self; -} - -- (void) dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [renderer release]; - - [super dealloc]; -} - -- (GraphRenderer*) activeRenderer { return renderer; } -- (void) setActiveRenderer:(GraphRenderer*)r { - if (r == renderer) - return; - - [[renderer surface] setCursor:NormalCursor]; - - [r retain]; - [renderer release]; - renderer = r; -} - -- (GtkWidget*) configurationWidget { return NULL; } - -- (void) mousePressAt:(NSPoint)pos withButton:(MouseButton)button andMask:(InputMask)mask { - if (button != LeftButton) - return; - - dragOrigin = pos; - currentResizeHandle = [self boundingBoxResizeHandleAt:pos]; - [[renderer document] startChangeBoundingBox]; - if (currentResizeHandle == NoHandle) { - drawingNewBox = YES; - [[[renderer document] graph] setBoundingBox:NSZeroRect]; - } else { - drawingNewBox = NO; - } - [renderer invalidateGraph]; -} - -- (void) mouseMoveTo:(NSPoint)pos withButtons:(MouseButton)buttons andMask:(InputMask)mask { - if (!(buttons & LeftButton)) { - ResizeHandle handle = [self boundingBoxResizeHandleAt:pos]; - [self setResizeCursorForHandle:handle]; - return; - } - - Transformer *transformer = [renderer transformer]; - Grid *grid = [renderer grid]; - Graph *graph = [[renderer document] graph]; - - if (currentResizeHandle == NoHandle) { - NSRect bbox = NSRectAroundPoints( - [grid snapScreenPoint:dragOrigin], - [grid snapScreenPoint:pos] - ); - [graph setBoundingBox:[transformer rectFromScreen:bbox]]; - } else { - NSRect bbox = [transformer rectToScreen:[graph boundingBox]]; - NSPoint p2 = [grid snapScreenPoint:pos]; - - if (currentResizeHandle == NorthWestHandle || - currentResizeHandle == NorthHandle || - currentResizeHandle == NorthEastHandle) { - - float dy = p2.y - NSMinY(bbox); - if (dy < bbox.size.height) { - bbox.origin.y += dy; - bbox.size.height -= dy; - } else { - bbox.origin.y = NSMaxY(bbox); - bbox.size.height = 0; - } - - } else if (currentResizeHandle == SouthWestHandle || - currentResizeHandle == SouthHandle || - currentResizeHandle == SouthEastHandle) { - - float dy = p2.y - NSMaxY(bbox); - if (-dy < bbox.size.height) { - bbox.size.height += dy; - } else { - bbox.size.height = 0; - } - } - - if (currentResizeHandle == NorthWestHandle || - currentResizeHandle == WestHandle || - currentResizeHandle == SouthWestHandle) { - - float dx = p2.x - NSMinX(bbox); - if (dx < bbox.size.width) { - bbox.origin.x += dx; - bbox.size.width -= dx; - } else { - bbox.origin.x = NSMaxX(bbox); - bbox.size.width = 0; - } - - } else if (currentResizeHandle == NorthEastHandle || - currentResizeHandle == EastHandle || - currentResizeHandle == SouthEastHandle) { - - float dx = p2.x - NSMaxX(bbox); - if (-dx < bbox.size.width) { - bbox.size.width += dx; - } else { - bbox.size.width = 0; - } - } - [graph setBoundingBox:[transformer rectFromScreen:bbox]]; - } - [[renderer document] changeBoundingBoxCheckPoint]; - [renderer invalidateGraph]; -} - -- (void) mouseReleaseAt:(NSPoint)pos withButton:(MouseButton)button andMask:(InputMask)mask { - if (button != LeftButton) - return; - - [[renderer document] endChangeBoundingBox]; - drawingNewBox = NO; - [renderer invalidateGraph]; -} - -- (void) renderWithContext:(id<RenderContext>)context onSurface:(id<Surface>)surface { - if (!drawingNewBox && [[[renderer document] graph] hasBoundingBox]) { - [context saveState]; - - [context setAntialiasMode:AntialiasDisabled]; - [context setLineWidth:1.0]; - - [context startPath]; - [context rect:[self boundingBoxResizeHandleRect:EastHandle]]; - [context rect:[self boundingBoxResizeHandleRect:SouthEastHandle]]; - [context rect:[self boundingBoxResizeHandleRect:SouthHandle]]; - [context rect:[self boundingBoxResizeHandleRect:SouthWestHandle]]; - [context rect:[self boundingBoxResizeHandleRect:WestHandle]]; - [context rect:[self boundingBoxResizeHandleRect:NorthWestHandle]]; - [context rect:[self boundingBoxResizeHandleRect:NorthHandle]]; - [context rect:[self boundingBoxResizeHandleRect:NorthEastHandle]]; - [context strokePathWithColor:MakeSolidRColor (0.5, 0.5, 0.5)]; - - [context restoreState]; - } -} -- (void) loadConfiguration:(Configuration*)config {} -- (void) saveConfiguration:(Configuration*)config {} -@end - -@implementation BoundingBoxTool (Private) -- (NSRect) screenBoundingBox { - Transformer *transformer = [[renderer surface] transformer]; - Graph *graph = [[renderer document] graph]; - return [transformer rectToScreen:[graph boundingBox]]; -} - -- (ResizeHandle) boundingBoxResizeHandleAt:(NSPoint)p { - NSRect bbox = [self screenBoundingBox]; - if (p.x >= NSMaxX(bbox)) { - if (p.x <= NSMaxX(bbox) + handle_size) { - if (p.y >= NSMaxY(bbox)) { - if (p.y <= NSMaxY(bbox) + handle_size) { - return SouthEastHandle; - } - } else if (p.y <= NSMinY(bbox)) { - if (p.y >= NSMinY(bbox) - handle_size) { - return NorthEastHandle; - } - } else { - float eastHandleTop = sideHandleTop(bbox); - if (p.y >= eastHandleTop && p.y <= (eastHandleTop + handle_size)) { - return EastHandle; - } - } - } - } else if (p.x <= NSMinX(bbox)) { - if (p.x >= NSMinX(bbox) - handle_size) { - if (p.y >= NSMaxY(bbox)) { - if (p.y <= NSMaxY(bbox) + handle_size) { - return SouthWestHandle; - } - } else if (p.y <= NSMinY(bbox)) { - if (p.y >= NSMinY(bbox) - handle_size) { - return NorthWestHandle; - } - } else { - float westHandleTop = sideHandleTop(bbox); - if (p.y >= westHandleTop && p.y <= (westHandleTop + handle_size)) { - return WestHandle; - } - } - } - } else if (p.y >= NSMaxY(bbox)) { - if (p.y <= NSMaxY(bbox) + handle_size) { - float southHandleLeft = tbHandleLeft(bbox); - if (p.x >= southHandleLeft && p.x <= (southHandleLeft + handle_size)) { - return SouthHandle; - } - } - } else if (p.y <= NSMinY(bbox)) { - if (p.y >= NSMinY(bbox) - handle_size) { - float northHandleLeft = tbHandleLeft(bbox); - if (p.x >= northHandleLeft && p.x <= (northHandleLeft + handle_size)) { - return NorthHandle; - } - } - } - return NoHandle; -} - -- (NSRect) boundingBoxResizeHandleRect:(ResizeHandle)handle { - Graph *graph = [[renderer document] graph]; - if (![graph hasBoundingBox]) { - return NSZeroRect; - } - NSRect bbox = [self screenBoundingBox]; - float x; - float y; - switch (handle) { - case NorthEastHandle: - case EastHandle: - case SouthEastHandle: - x = NSMaxX(bbox); - break; - case NorthWestHandle: - case WestHandle: - case SouthWestHandle: - x = NSMinX(bbox) - handle_size; - break; - case SouthHandle: - case NorthHandle: - x = tbHandleLeft(bbox); - break; - default: - return NSZeroRect; - } - switch (handle) { - case EastHandle: - case WestHandle: - y = sideHandleTop(bbox); - break; - case SouthEastHandle: - case SouthHandle: - case SouthWestHandle: - y = NSMaxY(bbox); - break; - case NorthEastHandle: - case NorthHandle: - case NorthWestHandle: - y = NSMinY(bbox) - handle_size; - break; - default: - return NSZeroRect; - } - return NSMakeRect(x, y, handle_size, handle_size); -} - -- (void) setResizeCursorForHandle:(ResizeHandle)handle { - if (handle != currentResizeHandle) { - currentResizeHandle = handle; - Cursor c = NormalCursor; - switch (handle) { - case EastHandle: - c = ResizeRightCursor; - break; - case SouthEastHandle: - c = ResizeBottomRightCursor; - break; - case SouthHandle: - c = ResizeBottomCursor; - break; - case SouthWestHandle: - c = ResizeBottomLeftCursor; - break; - case WestHandle: - c = ResizeLeftCursor; - break; - case NorthWestHandle: - c = ResizeTopLeftCursor; - break; - case NorthHandle: - c = ResizeTopCursor; - break; - case NorthEastHandle: - c = ResizeTopRightCursor; - break; - default: - c = NormalCursor; - break; - } - [[renderer surface] setCursor:c]; - } -} -@end - -// vim:ft=objc:ts=8:et:sts=4:sw=4 |