add more shortcuts and checks

This commit is contained in:
2018-08-10 00:12:35 +02:00
parent 94fa4022f0
commit e4e7719f83
9 changed files with 222 additions and 138 deletions

View File

@@ -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");

View File

@@ -393,13 +393,13 @@ void App::init_menu_file()
popup->destroy();
};
popup->find<NodeButtonCustom>("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<NodeButtonCustom>("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();
};

View File

@@ -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<void()> 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)

View File

@@ -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;

View File

@@ -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,

View File

@@ -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

View File

@@ -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;

View File

@@ -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();