diff --git a/data/layout.xml b/data/layout.xml index f2e635d..dae273b 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -611,7 +611,7 @@ - + - + + - + - + - + + - + + - + - + + - + - + - + - + - + diff --git a/engine/app_cloud.cpp b/engine/app_cloud.cpp index f9e7081..83ae2ca 100644 --- a/engine/app_cloud.cpp +++ b/engine/app_cloud.cpp @@ -10,7 +10,7 @@ void App::cloud_upload() { if (!canvas) return; - if (doc_name.empty()) + if (ui::Canvas::I->m_newdoc) { auto msgbox = new NodeMessageBox(); msgbox->m_manager = &layout; @@ -24,7 +24,10 @@ void App::cloud_upload() { std::thread([this] { std::string path = data_path + "/" + doc_name + ".pano"; - Canvas::I->project_save_thread(path); + if (ui::Canvas::I->m_unsaved) + { + Canvas::I->project_save_thread(path); + } async_start(); auto pb = show_progress("Uploading"); diff --git a/engine/app_layout.cpp b/engine/app_layout.cpp index 93d0d89..8e13fe6 100644 --- a/engine/app_layout.cpp +++ b/engine/app_layout.cpp @@ -393,13 +393,13 @@ void App::init_menu_file() popup->destroy(); }; popup->find("file-save")->on_click = [this](Node*) { - if (doc_name.empty()) + if (ui::Canvas::I->m_newdoc) { dialog_save(); } - else + else if(ui::Canvas::I->m_unsaved) { - canvas->m_canvas->project_save(data_path + "/" + doc_name + ".pano"); + canvas->m_canvas->project_save(); } popup->mouse_release(); popup->destroy(); @@ -410,7 +410,7 @@ void App::init_menu_file() popup->destroy(); }; popup->find("file-save-ver")->on_click = [this](Node*) { - doc_name.empty() ? dialog_save() : dialog_save_ver(); + ui::Canvas::I->m_newdoc ? dialog_save() : dialog_save_ver(); popup->mouse_release(); popup->destroy(); }; diff --git a/engine/canvas.cpp b/engine/canvas.cpp index 2266998..8538278 100644 --- a/engine/canvas.cpp +++ b/engine/canvas.cpp @@ -1615,9 +1615,11 @@ void ui::Canvas::project_save_thread(std::string file_path) App::I.async_start(); pb->destroy(); + App::I.title_update(); App::I.async_update(); App::I.async_end(); m_unsaved = false; + m_newdoc = false; } void ui::Canvas::project_open(std::string file_path, std::function on_complete) @@ -1761,9 +1763,11 @@ void ui::Canvas::project_open_thread(std::string file_path) gl.save(); App::I.async_update(); gl.restore(); + App::I.title_update(); App::I.async_end(); } m_unsaved = false; + m_newdoc = false; } ui::Image ui::Canvas::thumbnail_generate(int w, int h) diff --git a/engine/canvas.h b/engine/canvas.h index 886bc3c..19edad9 100644 --- a/engine/canvas.h +++ b/engine/canvas.h @@ -49,6 +49,7 @@ public: Plane m_plane_brush; BrushMesh m_mesh; bool m_unsaved = false; + bool m_newdoc = true; bool m_dirty = false; bool m_commit_delayed = false; bool m_dirty_stroke = false; diff --git a/engine/event.h b/engine/event.h index a8ccadd..fefb463 100644 --- a/engine/event.h +++ b/engine/event.h @@ -8,8 +8,66 @@ enum class kKey : uint8_t AndroidHome, AndroidBack, KeySpacebar, + KeyA, + KeyB, + KeyC, + KeyD, KeyE, + KeyF, + KeyG, + KeyH, + KeyI, + KeyJ, + KeyK, + KeyL, + KeyM, + KeyN, + KeyO, + KeyP, + KeyQ, + KeyR, + KeyS, + KeyT, + KeyU, + KeyV, + KeyW, + KeyX, + KeyY, KeyZ, + Key0, + Key1, + Key2, + Key3, + Key4, + Key5, + Key6, + Key7, + Key8, + Key9, + KeyF1, + KeyF2, + KeyF3, + KeyF4, + KeyF5, + KeyF6, + KeyF7, + KeyF8, + KeyF9, + KeyF10, + KeyF11, + KeyF12, + KeyF13, + KeyF14, + KeyF15, + KeyF16, + KeyF17, + KeyF18, + KeyF19, + KeyF20, + KeyF21, + KeyF22, + KeyF23, + KeyF24, KeyAlt, KeyCtrl, KeyShift, diff --git a/engine/keymap.h b/engine/keymap.h index 4389934..aa8926b 100644 --- a/engine/keymap.h +++ b/engine/keymap.h @@ -123,51 +123,51 @@ kKey convert_key(int key) switch(key) { #ifdef __APPLE__ - CASE(kVK_ANSI_A, kKey::Unknown); - CASE(kVK_ANSI_S, kKey::Unknown); - CASE(kVK_ANSI_D, kKey::Unknown); - CASE(kVK_ANSI_F, kKey::Unknown); - CASE(kVK_ANSI_H, kKey::Unknown); - CASE(kVK_ANSI_G, kKey::Unknown); + CASE(kVK_ANSI_A, kKey::KeyA); + CASE(kVK_ANSI_S, kKey::KeyS); + CASE(kVK_ANSI_D, kKey::KeyD); + CASE(kVK_ANSI_F, kKey::KeyF); + CASE(kVK_ANSI_H, kKey::KeyH); + CASE(kVK_ANSI_G, kKey::KeyG); CASE(kVK_ANSI_Z, kKey::KeyZ); - CASE(kVK_ANSI_X, kKey::Unknown); - CASE(kVK_ANSI_C, kKey::Unknown); - CASE(kVK_ANSI_V, kKey::Unknown); - CASE(kVK_ANSI_B, kKey::Unknown); - CASE(kVK_ANSI_Q, kKey::Unknown); - CASE(kVK_ANSI_W, kKey::Unknown); + CASE(kVK_ANSI_X, kKey::KeyX); + CASE(kVK_ANSI_C, kKey::KeyC); + CASE(kVK_ANSI_V, kKey::KeyV); + CASE(kVK_ANSI_B, kKey::KeyB); + CASE(kVK_ANSI_Q, kKey::KeyQ); + CASE(kVK_ANSI_W, kKey::KeyW); CASE(kVK_ANSI_E, kKey::KeyE); - CASE(kVK_ANSI_R, kKey::Unknown); - CASE(kVK_ANSI_Y, kKey::Unknown); - CASE(kVK_ANSI_T, kKey::Unknown); - CASE(kVK_ANSI_1, kKey::Unknown); - CASE(kVK_ANSI_2, kKey::Unknown); - CASE(kVK_ANSI_3, kKey::Unknown); - CASE(kVK_ANSI_4, kKey::Unknown); - CASE(kVK_ANSI_6, kKey::Unknown); - CASE(kVK_ANSI_5, kKey::Unknown); + CASE(kVK_ANSI_R, kKey::KeyR); + CASE(kVK_ANSI_Y, kKey::KeyY); + CASE(kVK_ANSI_T, kKey::KeyT); + CASE(kVK_ANSI_1, kKey::Key1); + CASE(kVK_ANSI_2, kKey::Key2); + CASE(kVK_ANSI_3, kKey::Key3); + CASE(kVK_ANSI_4, kKey::Key4); + CASE(kVK_ANSI_6, kKey::Key6); + CASE(kVK_ANSI_5, kKey::Key5); CASE(kVK_ANSI_Equal, kKey::Unknown); - CASE(kVK_ANSI_9, kKey::Unknown); - CASE(kVK_ANSI_7, kKey::Unknown); + CASE(kVK_ANSI_9, kKey::Key9); + CASE(kVK_ANSI_7, kKey::Key7); CASE(kVK_ANSI_Minus, kKey::Unknown); - CASE(kVK_ANSI_8, kKey::Unknown); - CASE(kVK_ANSI_0, kKey::Unknown); + CASE(kVK_ANSI_8, kKey::Key8); + CASE(kVK_ANSI_0, kKey::Key0); CASE(kVK_ANSI_RightBracket, kKey::Unknown); - CASE(kVK_ANSI_O, kKey::Unknown); - CASE(kVK_ANSI_U, kKey::Unknown); + CASE(kVK_ANSI_O, kKey::KeyO); + CASE(kVK_ANSI_U, kKey::KeyU); CASE(kVK_ANSI_LeftBracket, kKey::Unknown); - CASE(kVK_ANSI_I, kKey::Unknown); - CASE(kVK_ANSI_P, kKey::Unknown); - CASE(kVK_ANSI_L, kKey::Unknown); - CASE(kVK_ANSI_J, kKey::Unknown); + CASE(kVK_ANSI_I, kKey::KeyI); + CASE(kVK_ANSI_P, kKey::KeyP); + CASE(kVK_ANSI_L, kKey::KeyL); + CASE(kVK_ANSI_J, kKey::KeyJ); CASE(kVK_ANSI_Quote, kKey::Unknown); - CASE(kVK_ANSI_K, kKey::Unknown); + CASE(kVK_ANSI_K, kKey::KeyK); CASE(kVK_ANSI_Semicolon, kKey::Unknown); CASE(kVK_ANSI_Backslash, kKey::Unknown); CASE(kVK_ANSI_Comma, kKey::Unknown); CASE(kVK_ANSI_Slash, kKey::Unknown); - CASE(kVK_ANSI_N, kKey::Unknown); - CASE(kVK_ANSI_M, kKey::Unknown); + CASE(kVK_ANSI_N, kKey::KeyN); + CASE(kVK_ANSI_M, kKey::KeyM); CASE(kVK_ANSI_Period, kKey::Unknown); CASE(kVK_ANSI_Grave, kKey::Unknown); CASE(kVK_ANSI_KeypadDecimal, kKey::Unknown); @@ -206,22 +206,22 @@ kKey convert_key(int key) CASE(kVK_VolumeUp, kKey::Unknown); CASE(kVK_VolumeDown, kKey::Unknown); CASE(kVK_Mute, kKey::Unknown); - CASE(kVK_F18, kKey::Unknown); - CASE(kVK_F19, kKey::Unknown); - CASE(kVK_F20, kKey::Unknown); - CASE(kVK_F5, kKey::Unknown); - CASE(kVK_F6, kKey::Unknown); - CASE(kVK_F7, kKey::Unknown); - CASE(kVK_F3, kKey::Unknown); - CASE(kVK_F8, kKey::Unknown); - CASE(kVK_F9, kKey::Unknown); - CASE(kVK_F11, kKey::Unknown); - CASE(kVK_F13, kKey::Unknown); - CASE(kVK_F16, kKey::Unknown); - CASE(kVK_F14, kKey::Unknown); - CASE(kVK_F10, kKey::Unknown); - CASE(kVK_F12, kKey::Unknown); - CASE(kVK_F15, kKey::Unknown); + CASE(kVK_F18, kKey::KeyF18); + CASE(kVK_F19, kKey::KeyF19); + CASE(kVK_F20, kKey::KeyF20); + CASE(kVK_F5, kKey::KeyF5); + CASE(kVK_F6, kKey::KeyF6); + CASE(kVK_F7, kKey::KeyF7); + CASE(kVK_F3, kKey::KeyF3); + CASE(kVK_F8, kKey::KeyF8); + CASE(kVK_F9, kKey::KeyF9); + CASE(kVK_F11, kKey::KeyF11); + CASE(kVK_F13, kKey::KeyF13); + CASE(kVK_F16, kKey::KeyF16); + CASE(kVK_F14, kKey::KeyF14); + CASE(kVK_F10, kKey::KeyF10); + CASE(kVK_F12, kKey::KeyF12); + CASE(kVK_F15, kKey::KeyF15); CASE(kVK_Help, kKey::Unknown); CASE(kVK_Home, kKey::Unknown); CASE(kVK_PageUp, kKey::Unknown); @@ -279,41 +279,41 @@ kKey convert_key(int key) CASE(VK_INSERT, kKey::Unknown); CASE(VK_DELETE, kKey::Unknown); CASE(VK_HELP, kKey::Unknown); - CASE('0', kKey::Unknown); - CASE('1', kKey::Unknown); - CASE('2', kKey::Unknown); - CASE('3', kKey::Unknown); - CASE('4', kKey::Unknown); - CASE('5', kKey::Unknown); - CASE('6', kKey::Unknown); - CASE('7', kKey::Unknown); - CASE('8', kKey::Unknown); - CASE('9', kKey::Unknown); - CASE('A', kKey::Unknown); - CASE('B', kKey::Unknown); - CASE('C', kKey::Unknown); - CASE('D', kKey::Unknown); + CASE('0', kKey::Key0); + CASE('1', kKey::Key1); + CASE('2', kKey::Key2); + CASE('3', kKey::Key3); + CASE('4', kKey::Key4); + CASE('5', kKey::Key5); + CASE('6', kKey::Key6); + CASE('7', kKey::Key7); + CASE('8', kKey::Key8); + CASE('9', kKey::Key9); + CASE('A', kKey::KeyA); + CASE('B', kKey::KeyB); + CASE('C', kKey::KeyC); + CASE('D', kKey::KeyD); CASE('E', kKey::KeyE); - CASE('F', kKey::Unknown); - CASE('G', kKey::Unknown); - CASE('H', kKey::Unknown); - CASE('I', kKey::Unknown); - CASE('J', kKey::Unknown); - CASE('K', kKey::Unknown); - CASE('L', kKey::Unknown); - CASE('M', kKey::Unknown); - CASE('N', kKey::Unknown); - CASE('O', kKey::Unknown); - CASE('P', kKey::Unknown); - CASE('Q', kKey::Unknown); - CASE('R', kKey::Unknown); - CASE('S', kKey::Unknown); - CASE('T', kKey::Unknown); - CASE('U', kKey::Unknown); - CASE('V', kKey::Unknown); - CASE('W', kKey::Unknown); - CASE('X', kKey::Unknown); - CASE('Y', kKey::Unknown); + CASE('F', kKey::KeyF); + CASE('G', kKey::KeyG); + CASE('H', kKey::KeyH); + CASE('I', kKey::KeyI); + CASE('J', kKey::KeyJ); + CASE('K', kKey::KeyK); + CASE('L', kKey::KeyL); + CASE('M', kKey::KeyM); + CASE('N', kKey::KeyN); + CASE('O', kKey::KeyO); + CASE('P', kKey::KeyP); + CASE('Q', kKey::KeyQ); + CASE('R', kKey::KeyR); + CASE('S', kKey::KeyS); + CASE('T', kKey::KeyT); + CASE('U', kKey::KeyU); + CASE('V', kKey::KeyV); + CASE('W', kKey::KeyW); + CASE('X', kKey::KeyX); + CASE('Y', kKey::KeyY); CASE('Z', kKey::KeyZ); CASE(VK_LWIN, kKey::Unknown); CASE(VK_RWIN, kKey::Unknown); @@ -335,30 +335,30 @@ kKey convert_key(int key) CASE(VK_SUBTRACT, kKey::Unknown); CASE(VK_DECIMAL, kKey::Unknown); CASE(VK_DIVIDE, kKey::Unknown); - CASE(VK_F1, kKey::Unknown); - CASE(VK_F2, kKey::Unknown); - CASE(VK_F3, kKey::Unknown); - CASE(VK_F4, kKey::Unknown); - CASE(VK_F5, kKey::Unknown); - CASE(VK_F6, kKey::Unknown); - CASE(VK_F7, kKey::Unknown); - CASE(VK_F8, kKey::Unknown); - CASE(VK_F9, kKey::Unknown); - CASE(VK_F10, kKey::Unknown); - CASE(VK_F11, kKey::Unknown); - CASE(VK_F12, kKey::Unknown); - CASE(VK_F13, kKey::Unknown); - CASE(VK_F14, kKey::Unknown); - CASE(VK_F15, kKey::Unknown); - CASE(VK_F16, kKey::Unknown); - CASE(VK_F17, kKey::Unknown); - CASE(VK_F18, kKey::Unknown); - CASE(VK_F19, kKey::Unknown); - CASE(VK_F20, kKey::Unknown); - CASE(VK_F21, kKey::Unknown); - CASE(VK_F22, kKey::Unknown); - CASE(VK_F23, kKey::Unknown); - CASE(VK_F24, kKey::Unknown); + CASE(VK_F1, kKey::KeyF1); + CASE(VK_F2, kKey::KeyF2); + CASE(VK_F3, kKey::KeyF3); + CASE(VK_F4, kKey::KeyF4); + CASE(VK_F5, kKey::KeyF5); + CASE(VK_F6, kKey::KeyF6); + CASE(VK_F7, kKey::KeyF7); + CASE(VK_F8, kKey::KeyF8); + CASE(VK_F9, kKey::KeyF9); + CASE(VK_F10, kKey::KeyF10); + CASE(VK_F11, kKey::KeyF11); + CASE(VK_F12, kKey::KeyF12); + CASE(VK_F13, kKey::KeyF13); + CASE(VK_F14, kKey::KeyF14); + CASE(VK_F15, kKey::KeyF15); + CASE(VK_F16, kKey::KeyF16); + CASE(VK_F17, kKey::KeyF17); + CASE(VK_F18, kKey::KeyF18); + CASE(VK_F19, kKey::KeyF19); + CASE(VK_F20, kKey::KeyF20); + CASE(VK_F21, kKey::KeyF21); + CASE(VK_F22, kKey::KeyF22); + CASE(VK_F23, kKey::KeyF23); + CASE(VK_F24, kKey::KeyF24); CASE(VK_NUMLOCK, kKey::Unknown); CASE(VK_SCROLL, kKey::Unknown); //CASE(VK_OEM_NEC_EQUAL, kKey::Unknown); // same as VK_OEM_FJ_JISHO diff --git a/engine/main.cpp b/engine/main.cpp index d4157d3..1c3c51e 100644 --- a/engine/main.cpp +++ b/engine/main.cpp @@ -374,8 +374,8 @@ int main(int argc, char** argv) WGL_COLOR_BITS_ARB, 32, WGL_DEPTH_BITS_ARB, 24, WGL_STENCIL_BITS_ARB, 8, -// WGL_SAMPLE_BUFFERS_ARB, 1, // Number of buffers (must be 1 at time of writing) -// WGL_SAMPLES_ARB, 4, // Number of samples + WGL_SAMPLE_BUFFERS_ARB, 1, // Number of buffers (must be 1 at time of writing) + WGL_SAMPLES_ARB, 4, // Number of samples 0 }; UINT numFormat; diff --git a/engine/node_canvas.cpp b/engine/node_canvas.cpp index 1ee0279..c1bbbc1 100644 --- a/engine/node_canvas.cpp +++ b/engine/node_canvas.cpp @@ -297,7 +297,7 @@ void NodeCanvas::draw() glm::vec3(App::I.grid->m_groud_value->get_value()), App::I.grid->m_groud_opacity->get_value())); ui::ShaderManager::u_mat4(kShaderUniform::MVP, proj * camera - * glm::translate(glm::vec3(0, (App::I.grid->m_groud_height->get_value() - 0.5f) * 2.f, 0)) + * glm::translate(glm::vec3(0, glm::pow(App::I.grid->m_groud_height->get_value() - 0.5f, 3), 0)) * glm::eulerAngleX(glm::radians(90.f)) * glm::scale(glm::vec3(grid_scale, grid_scale, 1)) ); @@ -386,12 +386,6 @@ kEventResult NodeCanvas::handle_event(Event* e) case kEventType::KeyDown: if (ke->m_key == kKey::KeyE) ui::Canvas::set_mode(ui::Canvas::kCanvasMode::Erase); - // if (ke->m_key == kKey::KeySpacebar) - // m_canvas->m_alpha_lock = true; - // if (ke->m_key == kKey::AndroidVolumeUp) - // m_zoom_canvas *= 0.9f; - // if (ke->m_key == kKey::AndroidVolumeDown) - // m_zoom_canvas *= 1.1f; if (ke->m_key == kKey::AndroidBack) if (!ActionManager::empty()) ActionManager::undo(); @@ -400,12 +394,32 @@ kEventResult NodeCanvas::handle_event(Event* e) case kEventType::KeyUp: if (ke->m_key == kKey::KeyE) ui::Canvas::set_mode(ui::Canvas::kCanvasMode::Draw); - // if (ke->m_key == kKey::KeySpacebar) - // m_canvas->m_alpha_lock = false; if (ke->m_key == kKey::KeyTab) App::I.toggle_ui(); if (ke->m_key == kKey::KeyZ && App::I.keys[(int)kKey::KeyCtrl]) App::I.keys[(int)kKey::KeyShift] ? ActionManager::redo() : ActionManager::undo(); + if (ke->m_key == kKey::KeyS && App::I.keys[(int)kKey::KeyCtrl] && !App::I.keys[(int)kKey::KeyShift]) + { + if (ui::Canvas::I->m_newdoc) + { + App::I.dialog_save(); + } + else if (ui::Canvas::I->m_unsaved) + { + ui::Canvas::I->project_save(); + } + } + if (ke->m_key == kKey::KeyS && App::I.keys[(int)kKey::KeyCtrl] && App::I.keys[(int)kKey::KeyShift]) + { + if (ui::Canvas::I->m_newdoc) + { + App::I.dialog_save(); + } + else if (ui::Canvas::I->m_unsaved) + { + App::I.dialog_save_ver(); + } + } break; case kEventType::GestureStart: mouse_capture();