diff --git a/PanoPainter-OSX/Info.plist b/PanoPainter-OSX/Info.plist
index 6d7fbcb..8af9444 100644
--- a/PanoPainter-OSX/Info.plist
+++ b/PanoPainter-OSX/Info.plist
@@ -25,7 +25,31 @@
LSItemContentTypes
- public.panorama-image
+ com.panopainter.image
+
+ LSTypeIsPackage
+ 0
+
+
+ CFBundleTypeExtensions
+
+ abr
+
+ CFBundleTypeIconFile
+
+ CFBundleTypeIconFiles
+
+ CFBundleTypeMIMETypes
+
+ CFBundleTypeName
+ PanoPainter Brushes
+ CFBundleTypeRole
+ Editor
+ LSIsAppleDefaultForType
+
+ LSItemContentTypes
+
+ com.panopainter.abr
LSTypeIsPackage
0
@@ -71,7 +95,7 @@
UTTypeIconFiles
UTTypeIdentifier
- public.panorama-image
+ com.panopainter.image
UTTypeTagSpecification
com.apple.ostype
@@ -88,6 +112,35 @@
+
+ UTTypeConformsTo
+
+ public.data
+
+ UTTypeDescription
+ PanoPainter Brushes
+ UTTypeIconFile
+ pp-icon-square
+ UTTypeIconFiles
+
+ UTTypeIdentifier
+ com.panopainter.abr
+ UTTypeTagSpecification
+
+ com.apple.ostype
+
+ ****
+
+ public.filename-extension
+
+ abr
+
+ public.mime-type
+
+ preset/abr
+
+
+
UTImportedTypeDeclarations
@@ -118,6 +171,33 @@
+
+ UTTypeConformsTo
+
+ public.data
+
+ UTTypeDescription
+ PanoPainter Brushes
+ UTTypeIconFile
+ pp-icon-square
+ UTTypeIdentifier
+ com.panopainter.abr
+ UTTypeTagSpecification
+
+ com.apple.ostype
+
+ ****
+
+ public.filename-extension
+
+ abr
+
+ public.mime-type
+
+ preset/abr
+
+
+
diff --git a/PanoPainter-OSX/main.cpp b/PanoPainter-OSX/main.cpp
index 300905e..5765a25 100644
--- a/PanoPainter-OSX/main.cpp
+++ b/PanoPainter-OSX/main.cpp
@@ -169,8 +169,9 @@ std::mutex task_mutex;
- (void)terminateGL
{
CGLLockContext([[self openGLContext] CGLContextObj]);
- CVDisplayLinkRelease(dl);
+ App::I.terminate();
CGLUnlockContext([[self openGLContext] CGLContextObj]);
+ CVDisplayLinkRelease(dl);
}
// This is the renderer output callback function
@@ -445,7 +446,6 @@ static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTime
@implementation Controller
- (void)windowWillClose:(NSNotification *)notification
{
- App::I.terminate();
[[NSApplication sharedApplication] terminate:nil];
}
-(BOOL)windowShouldClose:(NSWindow *)sender
@@ -472,7 +472,8 @@ static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTime
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename
{
LOG("open file %s", [filename UTF8String]);
- //App::I.open_document([filename UTF8String]);
+ if (view && view->gl_ready)
+ App::I.open_document([filename UTF8String]);
file2open = filename;
return YES;
}
diff --git a/src/app_events.cpp b/src/app_events.cpp
index e102b66..c9d9388 100644
--- a/src/app_events.cpp
+++ b/src/app_events.cpp
@@ -23,7 +23,8 @@ void App::crash_test()
void App::tick(float dt)
{
- layout[main_id]->tick(dt);
+ if (auto* main = layout[main_id])
+ main->tick(dt);
}
void App::resize(float w, float h)
@@ -204,8 +205,12 @@ bool App::mouse_down(int button, float x, float y, float pressure, kEventSource
e.m_pressure = pressure;
e.m_source = source;
e.m_eraser = eraser;
- auto ret = layout[main_id]->on_event(&e);
- layout[main_id]->update();
+ kEventResult ret = kEventResult::Available;
+ if (auto* main = layout[main_id])
+ {
+ ret = main->on_event(&e);
+ main->update();
+ }
return ret == kEventResult::Consumed;
}
bool App::mouse_move(float x, float y, float pressure, kEventSource source, bool eraser)
@@ -231,8 +236,12 @@ bool App::mouse_up(int button, float x, float y, kEventSource source, bool erase
e.m_pos = { x / zoom, y / zoom };
e.m_source = source;
e.m_eraser = eraser;
- auto ret = layout[main_id]->on_event(&e);
- layout[main_id]->update();
+ kEventResult ret = kEventResult::Available;
+ if (auto* main = layout[main_id])
+ {
+ ret = main->on_event(&e);
+ main->update();
+ }
return ret == kEventResult::Consumed;
}
bool App::mouse_scroll(float x, float y, float delta)
@@ -242,8 +251,12 @@ bool App::mouse_scroll(float x, float y, float delta)
e.m_type = kEventType::MouseScroll;
e.m_pos = { x / zoom, y / zoom };
e.m_scroll_delta = delta;
- auto ret = layout[main_id]->on_event(&e);
- layout[main_id]->update();
+ kEventResult ret = kEventResult::Available;
+ if (auto* main = layout[main_id])
+ {
+ ret = main->on_event(&e);
+ main->update();
+ }
return ret == kEventResult::Consumed;
}
bool App::mouse_cancel(int button)
@@ -251,8 +264,12 @@ bool App::mouse_cancel(int button)
redraw = true;
MouseEvent e;
e.m_type = kEventType::MouseCancel;
- auto ret = layout[main_id]->on_event(&e);
- layout[main_id]->update();
+ kEventResult ret = kEventResult::Available;
+ if (auto* main = layout[main_id])
+ {
+ ret = main->on_event(&e);
+ main->update();
+ }
return ret == kEventResult::Consumed;
}
bool App::gesture_start(const glm::vec2& p0, const glm::vec2& p1)
@@ -265,8 +282,12 @@ bool App::gesture_start(const glm::vec2& p0, const glm::vec2& p1)
e.m_distance = glm::distance(p0, p1);
gesture_p0 = p0;
gesture_p1 = p1;
- auto ret = layout[main_id]->on_event(&e);
- layout[main_id]->update();
+ kEventResult ret = kEventResult::Available;
+ if (auto* main = layout[main_id])
+ {
+ ret = main->on_event(&e);
+ main->update();
+ }
return ret == kEventResult::Consumed;
}
bool App::gesture_move(const glm::vec2& p0, const glm::vec2& p1)
@@ -279,8 +300,12 @@ bool App::gesture_move(const glm::vec2& p0, const glm::vec2& p1)
e.m_distance = glm::distance(p0, p1);
e.m_distance_delta = e.m_distance - glm::distance(gesture_p0, gesture_p1);
e.m_pos_delta = p - glm::lerp(gesture_p0, gesture_p1, 0.5f);
- auto ret = layout[main_id]->on_event(&e);
- layout[main_id]->update();
+ kEventResult ret = kEventResult::Available;
+ if (auto* main = layout[main_id])
+ {
+ ret = main->on_event(&e);
+ main->update();
+ }
return ret == kEventResult::Consumed;
}
bool App::gesture_end()
@@ -288,8 +313,12 @@ bool App::gesture_end()
redraw = true;
GestureEvent e;
e.m_type = kEventType::GestureEnd;
- auto ret = layout[main_id]->on_event(&e);
- layout[main_id]->update();
+ kEventResult ret = kEventResult::Available;
+ if (auto* main = layout[main_id])
+ {
+ ret = main->on_event(&e);
+ main->update();
+ }
return ret == kEventResult::Consumed;
}
bool App::key_down(kKey key)
@@ -301,8 +330,12 @@ bool App::key_down(kKey key)
KeyEvent e;
e.m_type = kEventType::KeyDown;
e.m_key = key;
- auto ret = layout[main_id]->on_event(&e);
- layout[main_id]->update();
+ kEventResult ret = kEventResult::Available;
+ if (auto* main = layout[main_id])
+ {
+ ret = main->on_event(&e);
+ main->update();
+ }
return ret == kEventResult::Consumed;
}
bool App::key_up(kKey key)
@@ -312,8 +345,12 @@ bool App::key_up(kKey key)
KeyEvent e;
e.m_type = kEventType::KeyUp;
e.m_key = key;
- auto ret = layout[main_id]->on_event(&e);
- layout[main_id]->update();
+ kEventResult ret = kEventResult::Available;
+ if (auto* main = layout[main_id])
+ {
+ ret = main->on_event(&e);
+ main->update();
+ }
return ret == kEventResult::Consumed;
}
bool App::key_char(char key)
@@ -322,8 +359,12 @@ bool App::key_char(char key)
KeyEvent e;
e.m_type = kEventType::KeyChar;
e.m_char = key;
- auto ret = layout[main_id]->on_event(&e);
- layout[main_id]->update();
+ kEventResult ret = kEventResult::Available;
+ if (auto* main = layout[main_id])
+ {
+ ret = main->on_event(&e);
+ main->update();
+ }
return ret == kEventResult::Consumed;
}