From 56fa1079c649a256f0ee9918dac30216d572806d Mon Sep 17 00:00:00 2001 From: omigamedev Date: Tue, 29 Jan 2019 22:33:40 +0100 Subject: [PATCH] fix stroke preview, add license messages, fix node scroll --- data/layout.xml | 2 +- src/app.cpp | 5 +++++ src/app_dialogs.cpp | 18 ++++++++++++++++++ src/canvas.h | 13 +++++++++++++ src/layout.cpp | 5 +++++ src/layout.h | 1 + src/main.cpp | 2 ++ src/node_scroll.cpp | 19 ++++++++++++++----- src/node_stroke_preview.cpp | 8 +++++--- 9 files changed, 64 insertions(+), 9 deletions(-) diff --git a/data/layout.xml b/data/layout.xml index d2cc8b0..cb364b3 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -1151,7 +1151,7 @@ Here's a list of what's available in this release. - + diff --git a/src/app.cpp b/src/app.cpp index b09f852..d7b5e7c 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -371,6 +371,11 @@ void App::init() initAssets(); initLayout(); title_update(); + + if (!check_license()) + { + message_box("License", "Could not validate this license, running in demo mode."); + } //GLfloat width_range[2]; //glGetFloatv(GL_SMOOTH_LINE_WIDTH_RANGE, width_range); diff --git a/src/app_dialogs.cpp b/src/app_dialogs.cpp index 7e2016e..0ef5c79 100644 --- a/src/app_dialogs.cpp +++ b/src/app_dialogs.cpp @@ -308,6 +308,12 @@ void App::dialog_browse() void App::dialog_save_ver() { + if (!check_license()) + { + message_box("License", "This function is disabled in demo mode."); + return; + } + int current = 0; std::string next = doc_name + ".01"; std::string base = doc_name; @@ -338,6 +344,12 @@ void App::dialog_save_ver() void App::dialog_save() { + if (!check_license()) + { + message_box("License", "This function is disabled in demo mode."); + return; + } + if (canvas) { auto dialog = std::make_shared(); @@ -402,6 +414,12 @@ void App::dialog_save() void App::dialog_export() { + if (!check_license()) + { + message_box("License", "This function is disabled in demo mode."); + return; + } + if (canvas) { // TODO: use picker diff --git a/src/canvas.h b/src/canvas.h index e06de2d..aceea1b 100644 --- a/src/canvas.h +++ b/src/canvas.h @@ -307,9 +307,22 @@ public: if (!m_image[i]) continue; + LOG("undo box %d dirty=%s [%d,%d,%d,%d] to dirty=%s [%d,%d,%d,%d]", + i, + m_canvas->m_layers[m_layer_idx].m_dirty_face[i] ? "true" : "false", + (int)m_canvas->m_layers[m_layer_idx].m_dirty_box[i].x, + (int)m_canvas->m_layers[m_layer_idx].m_dirty_box[i].y, + (int)m_canvas->m_layers[m_layer_idx].m_dirty_box[i].z, + (int)m_canvas->m_layers[m_layer_idx].m_dirty_box[i].w, + m_old_dirty[i] ? "true" : "false", + (int)m_old_box[i].x, + (int)m_old_box[i].y, + (int)m_old_box[i].z, + (int)m_old_box[i].w); m_canvas->m_layers[m_layer_idx].m_dirty_box[i] = m_old_box[i]; m_canvas->m_layers[m_layer_idx].m_dirty_face[i] = m_old_dirty[i]; + glm::vec2 box_sz = zw(m_box[i]) - xy(m_box[i]); if (box_sz.x > 0 && box_sz.y > 0 && box_sz.x <= m_canvas->m_layers[m_layer_idx].w && box_sz.y <= m_canvas->m_layers[m_layer_idx].h) { diff --git a/src/layout.cpp b/src/layout.cpp index 12fd921..2684b1b 100644 --- a/src/layout.cpp +++ b/src/layout.cpp @@ -6,6 +6,11 @@ #include "node.h" #include "node_border.h" +void LayoutManager::create() +{ + m_layouts[const_hash("main")] = std::make_unique(); +} + bool LayoutManager::load(const char* path) { auto abs_path = Asset::absolute(path); diff --git a/src/layout.h b/src/layout.h index 411180a..39edf12 100644 --- a/src/layout.h +++ b/src/layout.h @@ -19,6 +19,7 @@ class LayoutManager public: bool m_loaded = false; std::function on_loaded; + void create(); bool load(const char* path); bool reload(); class Node* operator[](uint16_t id) diff --git a/src/main.cpp b/src/main.cpp index 9420d00..9681aa1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -408,12 +408,14 @@ int main(int argc, char** argv) if (argc == 1) App::I.initLog(); +/* if (!App::I.check_license()) { MessageBoxA(NULL, "Unable to verify this demo license, please make sure you are connected to Internet.", "PanoPainter - License Error", MB_ICONERROR | MB_OK); return -1; } +*/ FILE* fp_check = fopen("data\\layout.xml", "rb"); diff --git a/src/node_scroll.cpp b/src/node_scroll.cpp index 1c32968..ebcda4a 100644 --- a/src/node_scroll.cpp +++ b/src/node_scroll.cpp @@ -36,15 +36,21 @@ void NodeScroll::draw() { NodeBorder::draw(); glm::vec4 rect = get_children_rect(); - if (rect.x == 0 || rect.w < m_size.y) + glm::vec4 pad = GetPadding(); + float sz = m_size.y - (pad[0] + pad[2]); + if (rect.w == 0 || rect.w <= sz) + { + YGNodeStyleSetPadding(y_node, YGEdgeRight, 5); return; - float h = m_size.y / rect.w * m_size.y; - float offset_percent = m_offset.y / (rect.w - m_size.y); + } + YGNodeStyleSetPadding(y_node, YGEdgeRight, 35); + float h = sz / rect.w * sz; + float offset_percent = m_offset.y / (rect.w - sz); float pr = YGNodeLayoutGetPadding(y_node, YGEdgeRight) - 5; glDisable(GL_BLEND); ShaderManager::use(kShader::Color); ShaderManager::u_mat4(kShaderUniform::MVP, m_proj - * glm::translate(glm::vec3(m_pos.x + m_size.x - pr, m_pos.y - offset_percent * (m_size.y - h), 0)) + * glm::translate(glm::vec3(m_pos.x + m_size.x - pr, m_pos.y - offset_percent * (sz - h) + pad[0], 0)) * glm::scale(glm::vec3(pr, h, 1)) * glm::translate(glm::vec3(.5, .5, 0)) ); @@ -71,7 +77,10 @@ kEventResult NodeScroll::handle_event(Event* e) case kEventType::MouseMove: if (m_dragging) { - m_offset = m_offset_start + (me->m_pos - m_drag_start) * m_mask * m_scroll_dir; + glm::vec4 rect = get_children_rect(); + glm::vec4 pad = GetPadding(); + float speed = rect.w / (m_size.y - (pad[0] + pad[2])); + m_offset = m_offset_start + (me->m_pos - m_drag_start) * m_mask * m_scroll_dir * speed; fix_scroll(); } break; diff --git a/src/node_stroke_preview.cpp b/src/node_stroke_preview.cpp index b805fb5..78785f5 100644 --- a/src/node_stroke_preview.cpp +++ b/src/node_stroke_preview.cpp @@ -148,10 +148,14 @@ void NodeStrokePreview::handle_resize(glm::vec2 old_size, glm::vec2 new_size) float pad = m_size.x * .15f; new_size *= root()->m_zoom; + + m_rtt.destroy(); + m_rtt.create((int)new_size.x, (int)new_size.y); + float w = new_size.x; float h = new_size.y; std::vector kp = { { pad, pad },{ pad, h - pad },{ w - pad, pad },{ w - pad, h - pad } }; - m_stroke.reset(); + m_stroke.reset(true); m_stroke.start(m_brush); for (int i = 0; i < 20; i++) { @@ -160,7 +164,5 @@ void NodeStrokePreview::handle_resize(glm::vec2 old_size, glm::vec2 new_size) m_stroke.add_point(glm::vec3(BezierCurve::Bezier2D(kp, t), 0), p); } - m_rtt.destroy(); - m_rtt.create((int)new_size.x, (int)new_size.y); draw_stroke(); }