summaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
Diffstat (limited to 'gui')
-rw-r--r--gui/.DS_Storebin0 -> 6148 bytes
-rw-r--r--gui/Makefile13
-rw-r--r--gui/Project.xcconfig18
-rw-r--r--gui/config.make143
-rw-r--r--gui/openFrameworks-Info.plist22
-rw-r--r--gui/project.pbxproj465
-rw-r--r--gui/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--gui/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstatebin0 -> 13137 bytes
-rw-r--r--gui/src/chainImage.cpp214
-rw-r--r--gui/src/chainImage.h56
-rw-r--r--gui/src/main.cpp19
-rw-r--r--gui/src/ofApp.cpp90
-rw-r--r--gui/src/ofApp.h31
-rw-r--r--gui/xcshareddata/xcschemes/emptyExample AppStore.xcscheme91
-rw-r--r--gui/xcshareddata/xcschemes/emptyExample Debug.xcscheme91
-rw-r--r--gui/xcshareddata/xcschemes/emptyExample Release.xcscheme91
-rw-r--r--gui/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist14
17 files changed, 1365 insertions, 0 deletions
diff --git a/gui/.DS_Store b/gui/.DS_Store
new file mode 100644
index 0000000..126c3ea
--- /dev/null
+++ b/gui/.DS_Store
Binary files differ
diff --git a/gui/Makefile b/gui/Makefile
new file mode 100644
index 0000000..177e172
--- /dev/null
+++ b/gui/Makefile
@@ -0,0 +1,13 @@
+# Attempt to load a config.make file.
+# If none is found, project defaults in config.project.make will be used.
+ifneq ($(wildcard config.make),)
+ include config.make
+endif
+
+# make sure the the OF_ROOT location is defined
+ifndef OF_ROOT
+ OF_ROOT=$(realpath ../../..)
+endif
+
+# call the project makefile!
+include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk
diff --git a/gui/Project.xcconfig b/gui/Project.xcconfig
new file mode 100644
index 0000000..6b9ae08
--- /dev/null
+++ b/gui/Project.xcconfig
@@ -0,0 +1,18 @@
+//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT.
+//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED
+OF_PATH = ../../openFrameworks
+
+//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE
+#include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig"
+
+//ICONS - NEW IN 0072
+ICON_NAME_DEBUG = icon-debug.icns
+ICON_NAME_RELEASE = icon.icns
+ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/
+
+//IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to:
+//ICON_FILE_PATH = bin/data/
+
+OTHER_CFLAGS = $(OF_CORE_CFLAGS)
+OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS)
+HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS)
diff --git a/gui/config.make b/gui/config.make
new file mode 100644
index 0000000..2ae93e7
--- /dev/null
+++ b/gui/config.make
@@ -0,0 +1,143 @@
+################################################################################
+# CONFIGURE PROJECT MAKEFILE (optional)
+# This file is where we make project specific configurations.
+################################################################################
+
+################################################################################
+# OF ROOT
+# The location of your root openFrameworks installation
+OF_ROOT = ../../openFrameworks
+
+################################################################################
+# OF_ROOT = ../../..
+
+################################################################################
+# PROJECT ROOT
+# The location of the project - a starting place for searching for files
+# (default) PROJECT_ROOT = . (this directory)
+#
+################################################################################
+# PROJECT_ROOT = .
+
+################################################################################
+# PROJECT SPECIFIC CHECKS
+# This is a project defined section to create internal makefile flags to
+# conditionally enable or disable the addition of various features within
+# this makefile. For instance, if you want to make changes based on whether
+# GTK is installed, one might test that here and create a variable to check.
+################################################################################
+# None
+
+################################################################################
+# PROJECT EXTERNAL SOURCE PATHS
+# These are fully qualified paths that are not within the PROJECT_ROOT folder.
+# Like source folders in the PROJECT_ROOT, these paths are subject to
+# exlclusion via the PROJECT_EXLCUSIONS list.
+#
+# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank)
+#
+# Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_EXTERNAL_SOURCE_PATHS =
+
+################################################################################
+# PROJECT EXCLUSIONS
+# These makefiles assume that all folders in your current project directory
+# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations
+# to look for source code. The any folders or files that match any of the
+# items in the PROJECT_EXCLUSIONS list below will be ignored.
+#
+# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete
+# string unless teh user adds a wildcard (%) operator to match subdirectories.
+# GNU make only allows one wildcard for matching. The second wildcard (%) is
+# treated literally.
+#
+# (default) PROJECT_EXCLUSIONS = (blank)
+#
+# Will automatically exclude the following:
+#
+# $(PROJECT_ROOT)/bin%
+# $(PROJECT_ROOT)/obj%
+# $(PROJECT_ROOT)/%.xcodeproj
+#
+# Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_EXCLUSIONS =
+
+################################################################################
+# PROJECT LINKER FLAGS
+# These flags will be sent to the linker when compiling the executable.
+#
+# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs
+#
+# Note: Leave a leading space when adding list items with the += operator
+################################################################################
+
+# Currently, shared libraries that are needed are copied to the
+# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to
+# add a runtime path to search for those shared libraries, since they aren't
+# incorporated directly into the final executable application binary.
+# TODO: should this be a default setting?
+# PROJECT_LDFLAGS=-Wl,-rpath=./libs
+
+################################################################################
+# PROJECT DEFINES
+# Create a space-delimited list of DEFINES. The list will be converted into
+# CFLAGS with the "-D" flag later in the makefile.
+#
+# (default) PROJECT_DEFINES = (blank)
+#
+# Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_DEFINES =
+
+################################################################################
+# PROJECT CFLAGS
+# This is a list of fully qualified CFLAGS required when compiling for this
+# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS
+# defined in your platform specific core configuration files. These flags are
+# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below.
+#
+# (default) PROJECT_CFLAGS = (blank)
+#
+# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in
+# your platform specific configuration file will be applied by default and
+# further flags here may not be needed.
+#
+# Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_CFLAGS =
+
+################################################################################
+# PROJECT OPTIMIZATION CFLAGS
+# These are lists of CFLAGS that are target-specific. While any flags could
+# be conditionally added, they are usually limited to optimization flags.
+# These flags are added BEFORE the PROJECT_CFLAGS.
+#
+# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets.
+#
+# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank)
+#
+# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets.
+#
+# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank)
+#
+# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the
+# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration
+# file will be applied by default and further optimization flags here may not
+# be needed.
+#
+# Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_OPTIMIZATION_CFLAGS_RELEASE =
+# PROJECT_OPTIMIZATION_CFLAGS_DEBUG =
+
+################################################################################
+# PROJECT COMPILERS
+# Custom compilers can be set for CC and CXX
+# (default) PROJECT_CXX = (blank)
+# (default) PROJECT_CC = (blank)
+# Note: Leave a leading space when adding list items with the += operator
+################################################################################
+# PROJECT_CXX =
+# PROJECT_CC =
diff --git a/gui/openFrameworks-Info.plist b/gui/openFrameworks-Info.plist
new file mode 100644
index 0000000..757f735
--- /dev/null
+++ b/gui/openFrameworks-Info.plist
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string>${ICON}</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+</dict>
+</plist>
diff --git a/gui/project.pbxproj b/gui/project.pbxproj
new file mode 100644
index 0000000..b55d7c4
--- /dev/null
+++ b/gui/project.pbxproj
@@ -0,0 +1,465 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; };
+ E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; };
+ E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = E4B27C1510CBEB8E00536013;
+ remoteInfo = openFrameworks;
+ };
+ E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = E4B27C1410CBEB8E00536013;
+ remoteInfo = openFrameworks;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ E4C2427710CC5ABF004149E2 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; };
+ E4B69B5B0A3A1756003C02F2 /* emptyExampleDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = emptyExampleDebug.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; };
+ E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = ofApp.cpp; path = src/ofApp.cpp; sourceTree = SOURCE_ROOT; };
+ E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ofApp.h; path = src/ofApp.h; sourceTree = SOURCE_ROOT; };
+ E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = "<group>"; };
+ E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; };
+ E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ E4B69B590A3A1756003C02F2 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 6948EE371B920CB800B5AC1A /* local_addons */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = local_addons;
+ sourceTree = "<group>";
+ };
+ BB4B014C10F69532006C3DED /* addons */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = addons;
+ sourceTree = "<group>";
+ };
+ E4328144138ABC890047C5CB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ E4328148138ABC890047C5CB /* openFrameworksDebug.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ E4B69B4A0A3A1720003C02F2 = {
+ isa = PBXGroup;
+ children = (
+ E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */,
+ E4EB6923138AFD0F00A09F29 /* Project.xcconfig */,
+ E4B69E1C0A3A1BDC003C02F2 /* src */,
+ E4EEC9E9138DF44700A80321 /* openFrameworks */,
+ BB4B014C10F69532006C3DED /* addons */,
+ 6948EE371B920CB800B5AC1A /* local_addons */,
+ E4B69B5B0A3A1756003C02F2 /* emptyExampleDebug.app */,
+ );
+ sourceTree = "<group>";
+ };
+ E4B69E1C0A3A1BDC003C02F2 /* src */ = {
+ isa = PBXGroup;
+ children = (
+ E4B69E1D0A3A1BDC003C02F2 /* main.cpp */,
+ E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */,
+ E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */,
+ );
+ path = src;
+ sourceTree = SOURCE_ROOT;
+ };
+ E4EEC9E9138DF44700A80321 /* openFrameworks */ = {
+ isa = PBXGroup;
+ children = (
+ E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */,
+ E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */,
+ );
+ name = openFrameworks;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ E4B69B5A0A3A1756003C02F2 /* emptyExample */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "emptyExample" */;
+ buildPhases = (
+ E4B69B580A3A1756003C02F2 /* Sources */,
+ E4B69B590A3A1756003C02F2 /* Frameworks */,
+ E4B6FFFD0C3F9AB9008CF71C /* ShellScript */,
+ E4C2427710CC5ABF004149E2 /* CopyFiles */,
+ 8466F1851C04CA0E00918B1C /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ E4EEB9AC138B136A00A80321 /* PBXTargetDependency */,
+ );
+ name = emptyExample;
+ productName = myOFApp;
+ productReference = E4B69B5B0A3A1756003C02F2 /* emptyExampleDebug.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ E4B69B4C0A3A1720003C02F2 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0830;
+ };
+ buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "emptyExample" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = E4B69B4A0A3A1720003C02F2;
+ productRefGroup = E4B69B4A0A3A1720003C02F2;
+ projectDirPath = "";
+ projectReferences = (
+ {
+ ProductGroup = E4328144138ABC890047C5CB /* Products */;
+ ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */;
+ },
+ );
+ projectRoot = "";
+ targets = (
+ E4B69B5A0A3A1756003C02F2 /* emptyExample */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+ E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = openFrameworksDebug.a;
+ remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 8466F1851C04CA0E00918B1C /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 12;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"$GCC_PREPROCESSOR_DEFINITIONS\";\nAPPSTORE=`expr \"$GCC_PREPROCESSOR_DEFINITIONS\" : \".*APPSTORE=\\([0-9]*\\)\"`\nif [ -z \"$APPSTORE\" ] ; then\necho \"Note: Not copying bin/data to App Package or doing App Code signing. Use AppStore target for AppStore distribution\";\nelse\n# Copy bin/data into App/Resources\nrsync -avz --exclude='.DS_Store' \"${SRCROOT}/bin/data/\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/data/\"\n\n# ---- Code Sign App Package ----\n\n# WARNING: You may have to run Clean in Xcode after changing CODE_SIGN_IDENTITY!\n\n# Verify that $CODE_SIGN_IDENTITY is set\nif [ -z \"${CODE_SIGN_IDENTITY}\" ] ; then\necho \"CODE_SIGN_IDENTITY needs to be set for framework code-signing\"\nexit 0\nfi\n\nif [ -z \"${CODE_SIGN_ENTITLEMENTS}\" ] ; then\necho \"CODE_SIGN_ENTITLEMENTS needs to be set for framework code-signing!\"\n\nif [ \"${CONFIGURATION}\" = \"Release\" ] ; then\nexit 1\nelse\n# Code-signing is optional for non-release builds.\nexit 0\nfi\nfi\n\nITEMS=\"\"\n\nFRAMEWORKS_DIR=\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"\necho \"$FRAMEWORKS_DIR\"\nif [ -d \"$FRAMEWORKS_DIR\" ] ; then\nFRAMEWORKS=$(find \"${FRAMEWORKS_DIR}\" -depth -type d -name \"*.framework\" -or -name \"*.dylib\" -or -name \"*.bundle\" | sed -e \"s/\\(.*framework\\)/\\1\\/Versions\\/A\\//\")\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\nexit 1\nfi\n\nITEMS=\"${FRAMEWORKS}\"\nfi\n\nLOGINITEMS_DIR=\"${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/\"\nif [ -d \"$LOGINITEMS_DIR\" ] ; then\nLOGINITEMS=$(find \"${LOGINITEMS_DIR}\" -depth -type d -name \"*.app\")\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\nexit 1\nfi\n\nITEMS=\"${ITEMS}\"$'\\n'\"${LOGINITEMS}\"\nfi\n\n# Prefer the expanded name, if available.\nCODE_SIGN_IDENTITY_FOR_ITEMS=\"${EXPANDED_CODE_SIGN_IDENTITY_NAME}\"\nif [ \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\" = \"\" ] ; then\n# Fall back to old behavior.\nCODE_SIGN_IDENTITY_FOR_ITEMS=\"${CODE_SIGN_IDENTITY}\"\nfi\n\necho \"Identity:\"\necho \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\"\n\necho \"Entitlements:\"\necho \"${CODE_SIGN_ENTITLEMENTS}\"\n\necho \"Found:\"\necho \"${ITEMS}\"\n\n# Change the Internal Field Separator (IFS) so that spaces in paths will not cause problems below.\nSAVED_IFS=$IFS\nIFS=$(echo -en \"\\n\\b\")\n\n# Loop through all items.\nfor ITEM in $ITEMS;\ndo\necho \"Signing '${ITEM}'\"\ncodesign --force --verbose --sign \"${CODE_SIGN_IDENTITY_FOR_ITEMS}\" --entitlements \"${CODE_SIGN_ENTITLEMENTS}\" \"${ITEM}\"\nRESULT=$?\nif [[ $RESULT != 0 ]] ; then\necho \"Failed to sign '${ITEM}'.\"\nIFS=$SAVED_IFS\nexit 1\nfi\ndone\n\n# Restore $IFS.\nIFS=$SAVED_IFS\n\nfi\n";
+ };
+ E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "mkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy default icon file into App/Resources\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy libfmod and change install directory for fmod to run\nrsync -aved \"$OF_PATH/libs/fmodex/lib/osx/libfmodex.dylib\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\";\ninstall_name_tool -change @executable_path/libfmodex.dylib @executable_path/../Frameworks/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\n\necho \"$GCC_PREPROCESSOR_DEFINITIONS\";\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ E4B69B580A3A1756003C02F2 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */,
+ E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = openFrameworks;
+ targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 99FA3DBB1C7456C400CFA0EE /* AppStore */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
+ buildSettings = {
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
+ COPY_PHASE_STRIP = YES;
+ DEAD_CODE_STRIPPING = YES;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_AUTO_VECTORIZATION = YES;
+ GCC_ENABLE_SSE3_EXTENSIONS = YES;
+ GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 3;
+ "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = "DISTRIBUTION=1";
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_UNROLL_LOOPS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;
+ GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = NO;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VALUE = NO;
+ GCC_WARN_UNUSED_VARIABLE = NO;
+ MACOSX_DEPLOYMENT_TARGET = 10.9;
+ OTHER_CPLUSPLUSFLAGS = (
+ "-D__MACOSX_CORE__",
+ "-mtune=native",
+ );
+ SDKROOT = macosx;
+ };
+ name = AppStore;
+ };
+ 99FA3DBC1C7456C400CFA0EE /* AppStore */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ COPY_PHASE_STRIP = YES;
+ FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_MODEL_TUNING = NONE;
+ "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = "APPSTORE=1";
+ ICON = "$(ICON_NAME_RELEASE)";
+ ICON_FILE = "$(ICON_FILE_PATH)$(ICON)";
+ INFOPLIST_FILE = "openFrameworks-Info.plist";
+ INSTALL_PATH = /Applications;
+ LIBRARY_SEARCH_PATHS = "$(inherited)";
+ PRODUCT_BUNDLE_IDENTIFIER = cc.openFrameworks.ofapp;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ baseConfigurationReference = E4EB6923138AFD0F00A09F29;
+ };
+ name = AppStore;
+ };
+ E4B69B4E0A3A1720003C02F2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
+ buildSettings = {
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_AUTO_VECTORIZATION = YES;
+ GCC_ENABLE_SSE3_EXTENSIONS = YES;
+ GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;
+ GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = NO;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VALUE = NO;
+ GCC_WARN_UNUSED_VARIABLE = NO;
+ MACOSX_DEPLOYMENT_TARGET = 10.9;
+ ONLY_ACTIVE_ARCH = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "-D__MACOSX_CORE__",
+ "-mtune=native",
+ );
+ SDKROOT = macosx;
+ };
+ name = Debug;
+ };
+ E4B69B4F0A3A1720003C02F2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
+ buildSettings = {
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/";
+ COPY_PHASE_STRIP = YES;
+ DEAD_CODE_STRIPPING = YES;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_AUTO_VECTORIZATION = YES;
+ GCC_ENABLE_SSE3_EXTENSIONS = YES;
+ GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 3;
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_UNROLL_LOOPS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES;
+ GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = NO;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VALUE = NO;
+ GCC_WARN_UNUSED_VARIABLE = NO;
+ MACOSX_DEPLOYMENT_TARGET = 10.9;
+ OTHER_CPLUSPLUSFLAGS = (
+ "-D__MACOSX_CORE__",
+ "-mtune=native",
+ );
+ SDKROOT = macosx;
+ };
+ name = Release;
+ };
+ E4B69B600A3A1757003C02F2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ COPY_PHASE_STRIP = NO;
+ FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_MODEL_TUNING = NONE;
+ ICON = "$(ICON_NAME_DEBUG)";
+ ICON_FILE = "$(ICON_FILE_PATH)$(ICON)";
+ INFOPLIST_FILE = "openFrameworks-Info.plist";
+ INSTALL_PATH = /Applications;
+ LIBRARY_SEARCH_PATHS = "$(inherited)";
+ PRODUCT_BUNDLE_IDENTIFIER = cc.openFrameworks.ofapp;
+ PRODUCT_NAME = "$(TARGET_NAME)Debug";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ E4B69B610A3A1757003C02F2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */;
+ buildSettings = {
+ COMBINE_HIDPI_IMAGES = YES;
+ COPY_PHASE_STRIP = YES;
+ FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_MODEL_TUNING = NONE;
+ ICON = "$(ICON_NAME_RELEASE)";
+ ICON_FILE = "$(ICON_FILE_PATH)$(ICON)";
+ INFOPLIST_FILE = "openFrameworks-Info.plist";
+ INSTALL_PATH = /Applications;
+ LIBRARY_SEARCH_PATHS = "$(inherited)";
+ PRODUCT_BUNDLE_IDENTIFIER = cc.openFrameworks.ofapp;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ baseConfigurationReference = E4EB6923138AFD0F00A09F29;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "emptyExample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E4B69B4E0A3A1720003C02F2 /* Debug */,
+ E4B69B4F0A3A1720003C02F2 /* Release */,
+ 99FA3DBB1C7456C400CFA0EE /* AppStore */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "emptyExample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E4B69B600A3A1757003C02F2 /* Debug */,
+ E4B69B610A3A1757003C02F2 /* Release */,
+ 99FA3DBC1C7456C400CFA0EE /* AppStore */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */;
+}
diff --git a/gui/project.xcworkspace/contents.xcworkspacedata b/gui/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/gui/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:">
+ </FileRef>
+</Workspace>
diff --git a/gui/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstate b/gui/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..31db3dc
--- /dev/null
+++ b/gui/project.xcworkspace/xcuserdata/tim.xcuserdatad/UserInterfaceState.xcuserstate
Binary files differ
diff --git a/gui/src/chainImage.cpp b/gui/src/chainImage.cpp
new file mode 100644
index 0000000..2ac6074
--- /dev/null
+++ b/gui/src/chainImage.cpp
@@ -0,0 +1,214 @@
+#include "chainImage.h"
+
+#define min(a,b) ((a) < (b) ? (a) : (b))
+#define max(a,b) ((a) > (b) ? (a) : (b))
+
+void chainImage::init(ofPoint _linkPos,float _linkScale,float _linkRot){
+ linkPos=_linkPos;
+ linkScale=_linkScale;
+ linkRot=_linkRot;
+ setAnchorPercent(0.5,0.5);
+}
+
+void chainImage::start(){
+ transition=0.0f;
+ time=ofGetElapsedTimef();
+ setUseTexture(true);
+ scale=linkScale;
+}
+
+bool chainImage::update(float decayRatio){
+
+ scale*=decayRatio;
+
+ transition=-(scale-linkScale)/(linkScale-(linkScale*link->linkScale));
+
+ if (scale>linkScale*link->linkScale) return false;
+ else {
+ transition = 1.0f;
+ return true;
+ }
+}
+ofVec3f chainImage::getTransform(){
+
+ ofVec3f _scaledTarget = link->linkPos * linkScale;
+
+ return linkPos + ( _scaledTarget * transition );
+}
+float chainImage::getScale(){
+
+ return scale;
+
+}
+void chainImage::makeThumbnail(){
+ thumbnail=(const ofImage)*this; //copy the ofImage itself
+
+ float thumbheight=ofGetHeight()*THUMB_BORDER_RATIO;
+ float thumbwidth=(thumbnail.getWidth()/thumbnail.getHeight())*thumbheight;
+
+ float borderwidth=ofGetHeight()*(1.0-THUMB_BORDER_RATIO)*0.5;
+
+ printf("Rescaling: %fx%f to %fx%f for screen %fx%f, border %f\n",
+ thumbnail.getWidth(),thumbnail.getHeight(),
+ thumbwidth,thumbheight,
+ (float)ofGetWidth(),(float)ofGetHeight(),
+ borderwidth);
+
+ thumbnail.resize(thumbwidth,thumbheight);
+
+ thumbnail.setAnchorPoint(thumbnail.getWidth()/2,thumbnail.getHeight()/2);
+}
+
+void chainImage::drawChain(float fadeIn){
+
+ glPushMatrix();
+
+ ofDisableAlphaBlending();
+
+ ofSetColor(255,255,255,255);
+
+ draw(0,0,getWidth(),getHeight());
+
+ glTranslatef(linkPos.x,linkPos.y,0);
+
+ glScalef(linkScale,linkScale,linkScale);
+
+ ofEnableAlphaBlending();
+
+ ofSetColor(255,255,255,255*min(1.0,transition/fadeIn));
+
+ link->draw(0,0,link->getWidth(),link->getHeight());
+
+ glPopMatrix();
+}
+
+void chainImageSet::drawGui(){
+ float t_xoffs=0.0;
+ float borderwidth=ofGetHeight()*(1.0-THUMB_BORDER_RATIO)*0.5;
+
+ //draw each image, outlined
+
+ for(std::list<chainImage>::iterator ii=images.begin(); ii != images.end(); ii++){
+
+ float thumbx=ii->thumbnail.getWidth()/2;
+ float thumby=ii->thumbnail.getHeight()/2;
+ float thumbscale=ii->thumbnail.getWidth()/ii->getWidth();
+
+ //why do I have to set this every time??
+ ii->thumbnail.setAnchorPercent(0.5,0.5);
+
+ ii->thumbnail.draw(
+ t_xoffs+borderwidth+thumbx,
+ borderwidth+thumby,
+ ii->thumbnail.getWidth(),
+ ii->thumbnail.getHeight()
+ );
+
+ ofSetColor(255,255,255);
+
+ ofDrawLine(t_xoffs+borderwidth,borderwidth,
+ t_xoffs+borderwidth+ii->thumbnail.getWidth(),borderwidth);
+ ofDrawLine(t_xoffs+borderwidth+ii->thumbnail.getWidth(),borderwidth,
+ t_xoffs+borderwidth+ii->thumbnail.getWidth(),borderwidth+ii->thumbnail.getHeight());
+ ofDrawLine(t_xoffs+borderwidth+ii->thumbnail.getWidth(),borderwidth+ii->thumbnail.getHeight(),
+ t_xoffs+borderwidth,borderwidth+ii->thumbnail.getHeight());
+ ofDrawLine(t_xoffs+borderwidth,borderwidth+ii->thumbnail.getHeight(),
+ t_xoffs+borderwidth,borderwidth);
+
+ if (ii->link){
+
+ float subpictx=t_xoffs+borderwidth+thumbx+(ii->linkPos.x*thumbscale);
+ float subpicty=borderwidth+thumby+(ii->linkPos.y*thumbscale);
+
+ ofDrawLine(
+ subpictx,
+ subpicty,
+ t_xoffs+(borderwidth*3)+ii->thumbnail.getWidth(),
+ borderwidth+thumby
+
+ );
+
+ //printf("Sub image: centre at %f,%f \n",ii->link->thumbnail.getAnchorPoint().x,ii->link->thumbnail.getAnchorPoint().y);
+
+ ii->link->thumbnail.setAnchorPercent(0.5,0.5);
+
+ ii->link->thumbnail.draw(
+ subpictx,
+ subpicty,
+ ii->link->thumbnail.getWidth()*ii->linkScale,
+ ii->link->thumbnail.getHeight()*ii->linkScale
+ );
+
+ ofPoint p1=ofPoint(
+ subpictx-(ii->link->thumbnail.getWidth()*ii->linkScale*0.5),
+ subpicty-(ii->link->thumbnail.getHeight()*ii->linkScale*0.5));
+ ofPoint p2=ofPoint(
+ subpictx+(ii->link->thumbnail.getWidth()*ii->linkScale*0.5),
+ subpicty-(ii->link->thumbnail.getHeight()*ii->linkScale*0.5));
+ ofPoint p3=ofPoint(
+ subpictx+(ii->link->thumbnail.getWidth()*ii->linkScale*0.5),
+ subpicty+(ii->link->thumbnail.getHeight()*ii->linkScale*0.5));
+ ofPoint p4=ofPoint(
+ subpictx-(ii->link->thumbnail.getWidth()*ii->linkScale*0.5),
+ subpicty+(ii->link->thumbnail.getHeight()*ii->linkScale*0.5));
+
+ ofDrawLine(p1,p2);
+ ofDrawLine(p2,p3);
+ ofDrawLine(p3,p4);
+ ofDrawLine(p4,p1);
+
+
+ }
+
+
+ t_xoffs+=ii->thumbnail.getWidth()+(borderwidth*2) ;
+ }
+
+}
+
+bool chainImageSet::add(std::string filename,glm::vec2 pos){
+ printf("Dropped file: %s at %f,%f \n",filename.c_str(),pos.x,pos.y);
+/*
+attempt to add file to chain.
+find if file exists in data folder
+if not make a symbolic link
+*/
+ chainImage image;
+ if (image.load(filename)){
+ image.makeThumbnail();
+
+ //could there be a way to load without committing the texture
+ image.setUseTexture(false);
+ image.init(ofPoint(0,0),
+ currentDefaultImageRatio,
+ 0 //default rotation
+ );
+
+ printf("Loaded file: %s at %f,%f \n",filename.c_str(),pos.x,pos.y);
+
+
+ images.push_back(image);
+ (*images.rbegin()).link=&(*images.begin());
+
+ printf("Linked: %s to %s\n",
+ images.rbegin()->filename.c_str(),
+ images.begin()->filename.c_str());
+
+
+ if (images.size()>1){
+ (++images.rbegin())->link=&(*(images.rbegin()));
+ printf("Linked: %s to %s\n",
+ (++images.rbegin())->filename.c_str(),
+ images.rbegin()->filename.c_str());
+ }
+
+
+
+ return true;
+ }
+ printf("Could not load file: %s \n",filename.c_str());
+
+ return false;
+}
+
+
diff --git a/gui/src/chainImage.h b/gui/src/chainImage.h
new file mode 100644
index 0000000..03089a2
--- /dev/null
+++ b/gui/src/chainImage.h
@@ -0,0 +1,56 @@
+#pragma once
+
+#include "ofMain.h"
+
+#define THUMB_BORDER_RATIO 0.8
+
+class chainImage : public ofImage{
+ //todo: threaded image loader
+
+ public:
+ chainImage(){
+ link=NULL;
+ ofImage();
+ }
+ void init(ofPoint _linkPos,float _linkScale,float _linkRot);
+
+ void start();
+ bool load(std::string _filename){
+ filename=_filename;
+ return ofImage::load(filename);
+ }
+
+ bool update(float decayRatio);
+ ofVec3f getTransform();
+ float getScale();
+
+ void drawChain(float fadeIn);
+
+ ofImage thumbnail;
+ void makeThumbnail();
+
+ chainImage *link;
+ ofPoint linkPos;
+ float linkScale;
+ float linkRot;
+ float transition;
+ float fadeIn;
+ float speed;
+ float time;
+ float scale;
+
+ std::string filename;
+
+};
+
+class chainImageSet{
+ public:
+ chainImageSet(){
+ currentDefaultImageRatio=0.3;
+ }
+ void drawGui();
+ bool add(std::string filename,glm::vec2 pos);
+ std::list <chainImage> images;
+ float currentDefaultImageRatio;
+
+}; \ No newline at end of file
diff --git a/gui/src/main.cpp b/gui/src/main.cpp
new file mode 100644
index 0000000..0346c1e
--- /dev/null
+++ b/gui/src/main.cpp
@@ -0,0 +1,19 @@
+#include "ofMain.h"
+#include "ofApp.h"
+
+//========================================================================
+int main(int argc, char *argv[]){
+ ofSetupOpenGL(1600,250,OF_WINDOW); // <-------- setup the GL context
+
+ // this kicks off the running of my app
+ // can be OF_WINDOW or OF_FULLSCREEN
+ // pass in width and height too:
+ ofApp *app = new ofApp();
+
+ app->arguments = vector<string>(argv, argv + argc);
+
+ ofRunApp(app); // start the app
+
+
+}
+ \ No newline at end of file
diff --git a/gui/src/ofApp.cpp b/gui/src/ofApp.cpp
new file mode 100644
index 0000000..4000461
--- /dev/null
+++ b/gui/src/ofApp.cpp
@@ -0,0 +1,90 @@
+#include "ofApp.h"
+#include "glew.h"
+
+//--------------------------------------------------------------
+void ofApp::setup(){
+
+
+
+}
+
+//--------------------------------------------------------------
+void ofApp::update(){
+
+ std::stringstream strm;
+ strm << "fps: " << ofGetFrameRate();
+ ofSetWindowTitle(strm.str());
+
+
+}
+
+//--------------------------------------------------------------
+void ofApp::draw(){
+ ofBackground(0,0,0);
+
+ images.drawGui();
+}
+
+//--------------------------------------------------------------
+void ofApp::keyPressed(int key){
+
+}
+
+//--------------------------------------------------------------
+void ofApp::keyReleased(int key){
+
+}
+
+//--------------------------------------------------------------
+void ofApp::mouseMoved(int x, int y ){
+
+}
+
+//--------------------------------------------------------------
+void ofApp::mouseDragged(int x, int y, int button){
+
+}
+
+//--------------------------------------------------------------
+void ofApp::mousePressed(int x, int y, int button){
+
+}
+
+//--------------------------------------------------------------
+void ofApp::mouseReleased(int x, int y, int button){
+
+}
+
+//--------------------------------------------------------------
+void ofApp::mouseEntered(int x, int y){
+
+}
+
+//--------------------------------------------------------------
+void ofApp::mouseExited(int x, int y){
+
+}
+
+//--------------------------------------------------------------
+void ofApp::windowResized(int w, int h){
+
+}
+
+//--------------------------------------------------------------
+void ofApp::gotMessage(ofMessage msg){
+
+}
+
+//--------------------------------------------------------------
+void ofApp::dragEvent(ofDragInfo dragInfo){
+ std::string filenames;
+
+ for (auto f = dragInfo.files.begin(); f != dragInfo.files.end(); f++){
+ if (f!=dragInfo.files.begin()){
+ filenames=filenames+", ";
+ }
+ filenames=filenames+*f;
+ images.add(*f,dragInfo.position);
+ }
+
+}
diff --git a/gui/src/ofApp.h b/gui/src/ofApp.h
new file mode 100644
index 0000000..da9d734
--- /dev/null
+++ b/gui/src/ofApp.h
@@ -0,0 +1,31 @@
+#pragma once
+
+#include "ofMain.h"
+#include "chainImage.h"
+
+
+
+class ofApp : public ofBaseApp{
+
+ public:
+ void setup();
+ void update();
+ void draw();
+
+ void keyPressed(int key);
+ void keyReleased(int key);
+ void mouseMoved(int x, int y );
+ void mouseDragged(int x, int y, int button);
+ void mousePressed(int x, int y, int button);
+ void mouseReleased(int x, int y, int button);
+ void mouseEntered(int x, int y);
+ void mouseExited(int x, int y);
+ void windowResized(int w, int h);
+ void dragEvent(ofDragInfo dragInfo);
+ void gotMessage(ofMessage msg);
+
+ vector<string> arguments;
+
+ chainImageSet images;
+
+};
diff --git a/gui/xcshareddata/xcschemes/emptyExample AppStore.xcscheme b/gui/xcshareddata/xcschemes/emptyExample AppStore.xcscheme
new file mode 100644
index 0000000..172f6c4
--- /dev/null
+++ b/gui/xcshareddata/xcschemes/emptyExample AppStore.xcscheme
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "0830"
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ buildConfiguration = "Release"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES">
+ <Testables>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </TestAction>
+ <LaunchAction
+ buildConfiguration = "AppStore"
+ selectedDebuggerIdentifier = ""
+ selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ buildConfiguration = "Release"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Release">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/gui/xcshareddata/xcschemes/emptyExample Debug.xcscheme b/gui/xcshareddata/xcschemes/emptyExample Debug.xcscheme
new file mode 100644
index 0000000..a6784ed
--- /dev/null
+++ b/gui/xcshareddata/xcschemes/emptyExample Debug.xcscheme
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "0830"
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES">
+ <Testables>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </TestAction>
+ <LaunchAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ buildConfiguration = "Debug"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Debug"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/gui/xcshareddata/xcschemes/emptyExample Release.xcscheme b/gui/xcshareddata/xcschemes/emptyExample Release.xcscheme
new file mode 100644
index 0000000..3227778
--- /dev/null
+++ b/gui/xcshareddata/xcschemes/emptyExample Release.xcscheme
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "0830"
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ buildConfiguration = "Release"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES">
+ <Testables>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </TestAction>
+ <LaunchAction
+ buildConfiguration = "Release"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ buildConfiguration = "Release"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2"
+ BuildableName = "emptyExample.app"
+ BlueprintName = "emptyExample"
+ ReferencedContainer = "container:emptyExample.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Release">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/gui/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist b/gui/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..13dfb6e
--- /dev/null
+++ b/gui/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>SuppressBuildableAutocreation</key>
+ <dict>
+ <key>E4B69B5A0A3A1756003C02F2</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ </dict>
+</dict>
+</plist>