Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 46 additions & 9 deletions Tesseract-Box-Editor.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
B39693C11942A0F5004E13AA /* ImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B39693C01942A0F5004E13AA /* ImageView.swift */; };
B3C9261219340283006A1020 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C9261119340283006A1020 /* Cocoa.framework */; };
B3C9261C19340283006A1020 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = B3C9261A19340283006A1020 /* InfoPlist.strings */; };
B3C9261E19340283006A1020 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B3C9261D19340283006A1020 /* main.m */; };
B3C9262219340283006A1020 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = B3C9262019340283006A1020 /* Credits.rtf */; };
B3C9262519340283006A1020 /* TBEAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B3C9262419340283006A1020 /* TBEAppDelegate.m */; };
B3C9262819340283006A1020 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = B3C9262619340283006A1020 /* MainMenu.xib */; };
Expand All @@ -27,6 +26,7 @@
B3C9263A19340283006A1020 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = B3C9263819340283006A1020 /* InfoPlist.strings */; };
B3C9263C19340283006A1020 /* Tesseract_Box_EditorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B3C9263B19340283006A1020 /* Tesseract_Box_EditorTests.m */; };
B3DB7F61195E131E00ACE379 /* BoxResizeDelegateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3DB7F60195E131E00ACE379 /* BoxResizeDelegateProtocol.swift */; };
FBDE49971F794DAC00298A64 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = FBDE49961F794D8C00298A64 /* main.m */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -58,7 +58,6 @@
B3C9261619340283006A1020 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
B3C9261919340283006A1020 /* Tesseract-Box-Editor-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tesseract-Box-Editor-Info.plist"; sourceTree = "<group>"; };
B3C9261B19340283006A1020 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
B3C9261D19340283006A1020 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
B3C9261F19340283006A1020 /* Tesseract-Box-Editor-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tesseract-Box-Editor-Prefix.pch"; sourceTree = "<group>"; };
B3C9262119340283006A1020 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = "<group>"; };
B3C9262319340283006A1020 /* TBEAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TBEAppDelegate.h; sourceTree = "<group>"; };
Expand All @@ -73,6 +72,7 @@
B3DB7F60195E131E00ACE379 /* BoxResizeDelegateProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BoxResizeDelegateProtocol.swift; sourceTree = "<group>"; };
B3EB961219634EAD00AD4EF9 /* TBE-1-thumb.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "TBE-1-thumb.jpg"; sourceTree = "<group>"; };
B3EB961319634EAD00AD4EF9 /* TBE-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "TBE-1.jpg"; sourceTree = "<group>"; };
FBDE49961F794D8C00298A64 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -162,11 +162,11 @@
B3C9261819340283006A1020 /* Supporting Files */ = {
isa = PBXGroup;
children = (
FBDE49961F794D8C00298A64 /* main.m */,
B3EB961219634EAD00AD4EF9 /* TBE-1-thumb.jpg */,
B3EB961319634EAD00AD4EF9 /* TBE-1.jpg */,
B3C9261919340283006A1020 /* Tesseract-Box-Editor-Info.plist */,
B3C9261A19340283006A1020 /* InfoPlist.strings */,
B3C9261D19340283006A1020 /* main.m */,
B3C9261F19340283006A1020 /* Tesseract-Box-Editor-Prefix.pch */,
B3C9262019340283006A1020 /* Credits.rtf */,
);
Expand Down Expand Up @@ -237,10 +237,14 @@
attributes = {
CLASSPREFIX = TBE;
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0700;
LastUpgradeCheck = 0900;
ORGANIZATIONNAME = "Erik Larsen";
TargetAttributes = {
B3C9260D19340283006A1020 = {
LastSwiftMigration = 0900;
};
B3C9262E19340283006A1020 = {
LastSwiftMigration = 0830;
TestTargetID = B3C9260D19340283006A1020;
};
};
Expand Down Expand Up @@ -292,6 +296,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
FBDE49971F794DAC00298A64 /* main.m in Sources */,
B3DB7F61195E131E00ACE379 /* BoxResizeDelegateProtocol.swift in Sources */,
B3839F36195DE74C00C45821 /* Document.swift in Sources */,
B39693C11942A0F5004E13AA /* ImageView.swift in Sources */,
Expand All @@ -301,7 +306,6 @@
B34AF637193FDCB400DA19FA /* CharacterView.swift in Sources */,
B39693BD19424052004E13AA /* Box.swift in Sources */,
B3C9262519340283006A1020 /* TBEAppDelegate.m in Sources */,
B3C9261E19340283006A1020 /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -367,19 +371,30 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
Expand All @@ -396,6 +411,7 @@
ONLY_ACTIVE_ARCH = YES;
PRODUCT_MODULE_NAME = TesseractBoxEditor;
SDKROOT = macosx;
SWIFT_VERSION = 3.0;
};
name = Debug;
};
Expand All @@ -407,19 +423,30 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
Expand All @@ -429,6 +456,8 @@
MACOSX_DEPLOYMENT_TARGET = 10.9;
PRODUCT_MODULE_NAME = TesseractBoxEditor;
SDKROOT = macosx;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 3.0;
};
name = Release;
};
Expand All @@ -447,6 +476,8 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Tesseract-Box-Editor/Tesseract Box Editor-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_SWIFT3_OBJC_INFERENCE = On;
SWIFT_VERSION = 4.0;
WRAPPER_EXTENSION = app;
};
name = Debug;
Expand All @@ -465,14 +496,17 @@
PRODUCT_MODULE_NAME = TesseractBoxEditor;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Tesseract-Box-Editor/Tesseract Box Editor-Bridging-Header.h";
SWIFT_SWIFT3_OBJC_INFERENCE = On;
SWIFT_VERSION = 4.0;
WRAPPER_EXTENSION = app;
};
name = Release;
};
B3C9264319340283006A1020 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Tesseract-Box-Editor.app/Contents/MacOS/Tesseract-Box-Editor";
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
COMBINE_HIDPI_IMAGES = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(DEVELOPER_FRAMEWORKS_DIR)",
Expand All @@ -487,15 +521,17 @@
INFOPLIST_FILE = "Tesseract-Box-EditorTests/Tesseract-Box-EditorTests-Info.plist";
PRODUCT_BUNDLE_IDENTIFIER = "com.enlarsen.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUNDLE_LOADER)";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Tesseract Box Editor.app/Contents/MacOS/Tesseract Box Editor";
WRAPPER_EXTENSION = xctest;
};
name = Debug;
};
B3C9264419340283006A1020 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Tesseract-Box-Editor.app/Contents/MacOS/Tesseract-Box-Editor";
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
COMBINE_HIDPI_IMAGES = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(DEVELOPER_FRAMEWORKS_DIR)",
Expand All @@ -506,7 +542,8 @@
INFOPLIST_FILE = "Tesseract-Box-EditorTests/Tesseract-Box-EditorTests-Info.plist";
PRODUCT_BUNDLE_IDENTIFIER = "com.enlarsen.${PRODUCT_NAME:rfc1034identifier}";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUNDLE_LOADER)";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Tesseract Box Editor.app/Contents/MacOS/Tesseract Box Editor";
WRAPPER_EXTENSION = xctest;
};
name = Release;
Expand Down
2 changes: 1 addition & 1 deletion Tesseract-Box-Editor/Box.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class Box: NSObject
}
}

class func boxToNSRect(box: Box) -> NSRect
class func boxToNSRect(_ box: Box) -> NSRect
{
return NSRect(x: box.x, y: box.y, width: box.width, height: box.height)
}
Expand Down
2 changes: 1 addition & 1 deletion Tesseract-Box-Editor/BoxResizeDelegateProtocol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Foundation

protocol BoxResizeDelegate
{
func boxDidResize(rect: NSRect)
func boxDidResize(_ rect: NSRect)
func doneDragging()
func beganDragging()
}
Expand Down
40 changes: 19 additions & 21 deletions Tesseract-Box-Editor/CharacterView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ class CharacterView: ImageViewWithSelectionRect
override init(frame frameRect: NSRect)
{
super.init(frame: frameRect)
strokeColor = NSColor.grayColor().CGColor
fillColor = NSColor.clearColor().CGColor
strokeColor = NSColor.gray.cgColor
fillColor = NSColor.clear.cgColor
lineDashPattern = [1, 1]
duration = 10.0
}
Expand All @@ -52,20 +52,18 @@ class CharacterView: ImageViewWithSelectionRect

override func awakeFromNib()
{
imageScaling = .ScaleProportionallyUpOrDown
imageScaling = .scaleProportionallyUpOrDown
drawSelectionHandles = true

}


func propagateValue(id: AnyObject, binding:NSString)
func propagateValue(_ id: AnyObject, binding:NSString)
{
if let bindingInfo = self.infoForBinding(binding as String)
if let bindingInfo = self.infoForBinding(NSBindingName(rawValue: binding as String))
{
if let bindingOptions : AnyObject = bindingInfo[NSOptionsKey]
{
let transformer: NSValueTransformer = bindingOptions[NSValueTransformerBindingOption] as! NSValueTransformer
}
let bindingOptions: AnyObject = bindingInfo[NSBindingInfoKey.options] as AnyObject
let _: ValueTransformer = bindingOptions[NSBindingOption.valueTransformer] as! ValueTransformer
}
else
{
Expand All @@ -74,7 +72,7 @@ class CharacterView: ImageViewWithSelectionRect

}

func updateCharacter(image: NSImage, cropPoint: NSPoint, rect: NSRect)
func updateCharacter(_ image: NSImage, cropPoint: NSPoint, rect: NSRect)
{
self.image = image

Expand All @@ -93,14 +91,14 @@ class CharacterView: ImageViewWithSelectionRect

}

override func mouseDown(theEvent: NSEvent)
override func mouseDown(with theEvent: NSEvent)
{
let point = convertPoint(theEvent.locationInWindow, fromView: nil)
var transform = CGAffineTransformInvert(CATransform3DGetAffineTransform(selectionLayer.transform))
let point = convert(theEvent.locationInWindow, from: nil)
let transform = CATransform3DGetAffineTransform(selectionLayer.transform).inverted()

for var i = 0; i < selectionHandleLayers.count; i++
for i in 0 ..< selectionHandleLayers.count
{
if CGPathContainsPoint(selectionHandleLayers[i].path, &transform, point, false)
if selectionHandleLayers[i].path?.contains(point, using: .winding, transform: transform) ?? false
{
self.startPointIndex = i
break
Expand All @@ -115,7 +113,7 @@ class CharacterView: ImageViewWithSelectionRect
// TODO: also check whether the click was within the selection rectangle in prep for a move
}

override func mouseUp(theEvent: NSEvent)
override func mouseUp(with theEvent: NSEvent)
{
startPointIndex = -1

Expand All @@ -125,11 +123,11 @@ class CharacterView: ImageViewWithSelectionRect
}
}

override func mouseDragged(theEvent: NSEvent)
override func mouseDragged(with theEvent: NSEvent)
{
var point = convertPoint(theEvent.locationInWindow, fromView: nil)
let transform = CGAffineTransformInvert(CATransform3DGetAffineTransform(selectionLayer.transform))
point = CGPointApplyAffineTransform(point, transform)
var point = convert(theEvent.locationInWindow, from: nil)
let transform = CATransform3DGetAffineTransform(selectionLayer.transform).inverted()
point = point.applying(transform)

let newRect = computeResizedSelectionRectangle(self.startPointIndex, dragPoint: point)
// NSLog("newRect: \(newRect)")
Expand All @@ -145,4 +143,4 @@ class CharacterView: ImageViewWithSelectionRect

}

}
}
Loading