diff --git a/android/build.gradle b/android/build.gradle
index b534972..9789eb3 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -4,14 +4,13 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
- compile 'it.sephiroth.android.exif:library:1.0.1'
}
}
apply plugin: 'android'
android {
compileSdkVersion 19
- buildToolsVersion '23.0.2'
+ buildToolsVersion '25.0.0'
defaultConfig {
applicationId = 'com.omigamedev'
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 2279b6c..b8608bd 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed Apr 10 15:27:10 PDT 2013
+#Mon May 01 13:12:48 BST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-2.14.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
diff --git a/android/src/androidTest/java/com/omigamedev/DummyActivityTest.java b/android/src/androidTest/java/com/omigamedev/DummyActivityTest.java
deleted file mode 100644
index 975354b..0000000
--- a/android/src/androidTest/java/com/omigamedev/DummyActivityTest.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.omigamedev;
-
-import android.test.ActivityInstrumentationTestCase2;
-
-/**
- * This is a simple framework for a test of an Application. See
- * {@link android.test.ApplicationTestCase ApplicationTestCase} for more information on
- * how to write and extend Application tests.
- *
- * To run this test, you can type:
- * adb shell am instrument -w \
- * -e class com.omigamedev.DummyActivityTest \
- * com.omigamedev.tests/android.test.InstrumentationTestRunner
- */
-public class DummyActivityTest extends ActivityInstrumentationTestCase2 {
-
- public DummyActivityTest() {
- super("com.omigamedev", DummyActivity.class);
- }
-
-}
diff --git a/android/src/main/cpp/main.cpp b/android/src/main/cpp/main.cpp
index fdb538f..ac5de3c 100755
--- a/android/src/main/cpp/main.cpp
+++ b/android/src/main/cpp/main.cpp
@@ -320,6 +320,7 @@ static int engine_init_display(struct engine* engine) {
LOG("All ready");
engine->animating = 1;
+ ANativeActivity_showSoftInput(engine->app->activity, ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED);
return 0;
}
diff --git a/android/src/main/java/com/omigamedev/DummyActivity.java b/android/src/main/java/com/omigamedev/DummyActivity.java
deleted file mode 100644
index 9c7f140..0000000
--- a/android/src/main/java/com/omigamedev/DummyActivity.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.omigamedev;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-public class DummyActivity extends Activity
-{
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
-}
diff --git a/data/layout.xml b/data/layout.xml
index 2972577..a8a3449 100644
--- a/data/layout.xml
+++ b/data/layout.xml
@@ -165,6 +165,24 @@
+
+
+
@@ -326,57 +344,24 @@
-
+ -->
+
-
-
-
-
-
-
-
-
-
-
-
+
@@ -418,5 +403,6 @@
+
diff --git a/engine/app.cpp b/engine/app.cpp
index fd4e048..e53f08f 100644
--- a/engine/app.cpp
+++ b/engine/app.cpp
@@ -463,19 +463,32 @@ void App::initLayout()
};
}
- if (auto* button = layout[main_id]->find("btn-switch"))
+ if (auto* button = layout[main_id]->find("btn-export"))
{
button->on_click = [this,button](Node*) {
- //exit(0);
if (canvas)
{
canvas->m_canvas->save(data_path);
- //canvas->m_canvas->m_use_instanced = !canvas->m_canvas->m_use_instanced;
- //button->color_normal = canvas->m_canvas->m_use_instanced ? glm::vec4(1, 0, 0, 1) : glm::vec4(0, 1, 0, 1);
- //button->m_text->set_text(canvas->m_canvas->m_use_instanced ? "INST" : "NORM");
}
};
- //button->m_text->set_text("NORM");
+ }
+ if (auto* button = layout[main_id]->find("btn-open"))
+ {
+ button->on_click = [this,button](Node*) {
+ if (canvas)
+ {
+ canvas->m_canvas->save(data_path);
+ }
+ };
+ }
+ if (auto* button = layout[main_id]->find("btn-save"))
+ {
+ button->on_click = [this,button](Node*) {
+ if (canvas)
+ {
+ canvas->m_canvas->save_project(data_path);
+ }
+ };
}
if (auto* button = layout[main_id]->find("btn-undo"))
{
diff --git a/engine/canvas.cpp b/engine/canvas.cpp
index 3768456..b93dce4 100644
--- a/engine/canvas.cpp
+++ b/engine/canvas.cpp
@@ -503,6 +503,71 @@ void ui::Canvas::save(std::string data_path)
glActiveTexture(GL_TEXTURE0);
}
+void ui::Canvas::save_project(std::string data_path)
+{
+ static char name[128];
+ sprintf(name, "%s/latlong.pano", data_path.c_str());
+ FILE* fp = fopen(name, "wb");
+ if (!fp)
+ {
+ LOG("cannot write project to %s", name);
+ return;
+ }
+ fwrite(&m_width, sizeof(int), 1, fp);
+ fwrite(&m_height, sizeof(int), 1, fp);
+ int n_layers = (int)m_layers.size();
+ fwrite(&n_layers, sizeof(int), 1, fp);
+ for (int i = 0; i < (int)m_layers.size(); i++)
+ {
+ int n_order = m_order[i];
+ fwrite(&n_order, sizeof(int), 1, fp);
+ auto snap = m_layers[i].snapshot(data_path);
+ for (int layer_index = 0; layer_index < 6; layer_index++)
+ {
+ fwrite(snap.image[i].get(), 1, m_width * m_height * 4, fp);
+ }
+ }
+ fclose(fp);
+ LOG("project saved to %s", name);
+}
+
+void ui::Canvas::open_project(std::string data_path)
+{
+ static char name[128];
+ sprintf(name, "%s/latlong.pano", data_path.c_str());
+ FILE* fp = fopen(name, "rb");
+ if (!fp)
+ {
+ LOG("cannot write project to %s", name);
+ return;
+ }
+ fread(&m_width, sizeof(int), 1, fp);
+ fread(&m_height, sizeof(int), 1, fp);
+ int n_layers = (int)m_layers.size();
+ fread(&n_layers, sizeof(int), 1, fp);
+ const int bytes = m_width * m_height * 4;
+ Layer::Snapshot snap;
+ snap.create(m_width, m_height);
+ m_layers.clear();
+ m_order.clear();
+ for (int i = 0; i < n_layers; i++)
+ {
+ int n_order = m_order[i];
+ fread(&n_order, sizeof(int), 1, fp);
+ m_order.push_back(n_order);
+ for (int layer_index = 0; layer_index < 6; layer_index++)
+ {
+ fread(snap.image[i].get(), 1, bytes, fp);
+ m_layers.emplace_back();
+ m_layers.back().create(m_width, m_height, "");
+ m_layers.back().restore(snap);
+ }
+ }
+ fclose(fp);
+ LOG("project restore from %s", name);
+}
+
+
///////////////////////////////////////////////////////////////////////////////////////////
void ui::Layer::destroy()
diff --git a/engine/canvas.h b/engine/canvas.h
index f2cf0e1..c52e8fc 100644
--- a/engine/canvas.h
+++ b/engine/canvas.h
@@ -19,6 +19,11 @@ public:
struct Snapshot
{
std::unique_ptr image[6];
+ void create(int w, int h)
+ {
+ for (int i = 0; i < 6; i++)
+ image[i] = std::make_unique(w*h*4);
+ }
};
bool create(int width, int height, std::string name);
void clear(const glm::vec4& c);
@@ -79,6 +84,8 @@ public:
void snapshot_restore();
void clear_context();
void save(std::string data_path);
+ void save_project(std::string data_path);
+ void open_project(std::string data_path);
};
diff --git a/engine/layout.h b/engine/layout.h
index 01e98d6..0d314e0 100644
--- a/engine/layout.h
+++ b/engine/layout.h
@@ -653,7 +653,7 @@ public:
default:
break;
}
- return kEventResult::Consumed;
+ return m_mouse_inside ? kEventResult::Consumed : kEventResult::Available;
}
};
@@ -705,6 +705,7 @@ public:
}
break;
default:
+ return kEventResult::Available;
break;
}
return kEventResult::Consumed;
@@ -771,6 +772,7 @@ public:
destroy();
break;
default:
+ return kEventResult::Available;
break;
}
return kEventResult::Consumed;
@@ -823,6 +825,7 @@ public:
on_click(this);
break;
default:
+ return kEventResult::Available;
break;
}
return kEventResult::Consumed;
@@ -1096,6 +1099,7 @@ public:
}
break;
default:
+ return kEventResult::Available;
break;
}
return kEventResult::Consumed;
@@ -1207,6 +1211,7 @@ public:
checked = !checked;
break;
default:
+ return kEventResult::Available;
break;
}
return kEventResult::Consumed;
@@ -1297,6 +1302,7 @@ public:
case kEventType::MouseUpL:
break;
default:
+ return kEventResult::Available;
break;
}
return kEventResult::Consumed;
@@ -1615,6 +1621,7 @@ public:
}
break;
default:
+ return kEventResult::Available;
break;
}
return kEventResult::Consumed;
@@ -2062,6 +2069,7 @@ public:
//m_zoom_canvas = m_zoom_start + ge->m_distance_delta * .001f;
break;
default:
+ return kEventResult::Available;
break;
}
return kEventResult::Consumed;