diff --git a/data/layout.xml b/data/layout.xml index 99eacf1..b9204f5 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -862,7 +862,7 @@ Here's a list of what's available in this release. - + @@ -1088,9 +1088,11 @@ Here's a list of what's available in this release. + diff --git a/src/canvas_modes.cpp b/src/canvas_modes.cpp index 6d8a972..0df2fc1 100644 --- a/src/canvas_modes.cpp +++ b/src/canvas_modes.cpp @@ -878,7 +878,7 @@ void CanvasModeTransform::enter() } auto center = zw(canvas->m_box) * 0.5f; - glm::vec2 bb_sz = glm::vec2(aspect, 1.f) * 100.f; + glm::vec2 bb_sz = glm::vec2(aspect, 1.f) * 100.f * App::I.zoom; glm::vec2 bb_min = center - bb_sz * 0.5f; glm::vec2 bb_max = center + bb_sz * 0.5f; glm::vec2 midpoint = (bb_min + bb_max) * 0.5f; @@ -1141,48 +1141,17 @@ void CanvasModeTransform::leave() poly_cam.reserve(m_points_face[j].size()); for (auto p : m_points_face[j]) poly_cam.push_back(mv * p.pos); - poly_cam = poly_clip_near(poly_cam, 0.01f); + + auto poly_clipped = poly_clip_near(poly_cam, 0.01f); - for (int pi = 0; pi < poly_cam.size(); pi++) + for (auto p : poly_clipped) { - auto p = poly_cam[pi]; - auto p_clip = proj * glm::vec4(p, 1); - auto p_norm = p_clip / p_clip.w; - -/* - // compute the next point - auto p_next = m_points_face[j][(pi + 1) % m_points_face[j].size()]; - auto p_next_clip = mvp * p_next.pos; - auto p_next_norm = p_next_clip / p_next_clip.z; - // now test if there's a collision with on of the face edge - static glm::vec2 face_corners[4]{ {-1,1}, {1,1}, {1,-1}, {-1,-1} }; - glm::vec2 poly_seg[2] = { xy(p_norm), xy(p_next_norm) }; - bool edge_intersection = false; - for (int edge_i = 0; edge_i < 4; edge_i++) - { - glm::vec2 edge[2]{ face_corners[edge_i], face_corners[(edge_i + 1) % 4] }; - glm::vec2 unused_pt, unused_uv; - if (segments_intersect(edge[0], edge[1], poly_seg[0], poly_seg[1], unused_pt, unused_uv)) - { - edge_intersection = true; - break; - } - } - - if (p_clip.w < 0 || glm::any(glm::greaterThan(glm::abs(xy(p_norm)), { 1, 1 }))) - { - // now the point is outside, but will its edge cross the face? - if (!edge_intersection) - continue; - } -*/ if (p_clip.w < 0) continue; - + auto p_norm = p_clip / p_clip.w; poly2d.push_back(p_norm); } - } auto clipped = poly_intersect(poly2d, face_corners); diff --git a/src/node_canvas.cpp b/src/node_canvas.cpp index d627a8a..9c9ba91 100644 --- a/src/node_canvas.cpp +++ b/src/node_canvas.cpp @@ -268,7 +268,9 @@ void NodeCanvas::draw() mode->on_Draw(ortho_proj, proj, camera); glDisable(GL_DEPTH_TEST); - if (m_canvas->m_smask_active || m_canvas->m_state == Canvas::kCanvasMode::Transform) + auto transform_mode = static_cast(Canvas::modes[(int)Canvas::kCanvasMode::Transform][0]); + bool importing = transform_mode->m_action == CanvasModeTransform::ActionType::Import; + if (m_canvas->m_smask_active || m_canvas->m_state == Canvas::kCanvasMode::Transform && !importing) { m_canvas->modes[(int)Canvas::kCanvasMode::MaskFree][0]->on_Draw(ortho_proj, proj, camera); m_canvas->modes[(int)Canvas::kCanvasMode::MaskLine][0]->on_Draw(ortho_proj, proj, camera); diff --git a/src/util.h b/src/util.h index 0e63ba9..7b66a5f 100644 --- a/src/util.h +++ b/src/util.h @@ -34,7 +34,8 @@ std::vector poly_remove_duplicate(const std::vector& v, const float toller std::vector ret; for (size_t i = 0; i < v.size(); i++) { - if (glm::distance2(v[i], v[(i + 1) % v.size()]) > tollerance) + //if (glm::distance2(v[i], v[(i + 1) % v.size()]) > tollerance) + if (v[i] != v[(i + 1) % v.size()]) ret.push_back(v[i]); } return ret; diff --git a/src/wacom.cpp b/src/wacom.cpp index d45d966..a219ad6 100644 --- a/src/wacom.cpp +++ b/src/wacom.cpp @@ -79,7 +79,7 @@ HCTX WacomTablet::TabletInit(HWND hWnd) CHAR* TabletName = new CHAR[wWTInfoRetVal]; wWTInfoRetVal = gpWTInfoA(WTI_DEVICES, DVC_NAME, TabletName); LOG("Tablet: %s", TabletName); - delete TabletName; + delete[] TabletName; }