fix imported image aspect ratio and the transform handles for touch devices

This commit is contained in:
2018-11-27 11:27:28 +01:00
parent a99af642bc
commit 5c39e07434
3 changed files with 18 additions and 7 deletions

View File

@@ -97,13 +97,13 @@ std::recursive_mutex lock_mutex;
std::string path = [chosenImage cStringUsingEncoding:NSUTF8StringEncoding]; std::string path = [chosenImage cStringUsingEncoding:NSUTF8StringEncoding];
p->callback(path); p->callback(path);
[picker dismissViewControllerAnimated:YES completion:^{ [picker dismissViewControllerAnimated:YES completion:^{
[self keyboardWillBeHidden:nil]; [self keyboardWasHidden:nil];
}]; }];
} }
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{ {
[picker dismissViewControllerAnimated:YES completion:^{ [picker dismissViewControllerAnimated:YES completion:^{
[self keyboardWillBeHidden:nil]; [self keyboardWasHidden:nil];
}]; }];
} }

View File

@@ -171,7 +171,7 @@ glm::uint8_t* Asset::read_all()
if (m_len != fread(m_data, 1, m_len, m_fp)) if (m_len != fread(m_data, 1, m_len, m_fp))
{ {
LOG("ASSET READ FAILED for %s", m_current_path.c_str()); LOG("ASSET READ FAILED for %s", m_current_path.c_str());
delete m_data; delete[] m_data;
m_data = nullptr; m_data = nullptr;
} }
} }

View File

@@ -869,11 +869,11 @@ void CanvasModeTransform::enter()
if (m_source_image.data()) if (m_source_image.data())
{ {
m_tex[0].create(m_source_image); m_tex[0].create(m_source_image);
aspect = m_source_image.width / m_source_image.height; aspect = (float)m_source_image.width / (float)m_source_image.height;
} }
auto center = zw(canvas->m_box) * 0.5f; auto center = zw(canvas->m_box) * 0.5f;
glm::vec2 bb_sz = glm::vec2(aspect, 0.75f) * 100.f; glm::vec2 bb_sz = glm::vec2(aspect, 1.f) * 100.f;
glm::vec2 bb_min = center - bb_sz * 0.5f; glm::vec2 bb_min = center - bb_sz * 0.5f;
glm::vec2 bb_max = center + bb_sz * 0.5f; glm::vec2 bb_max = center + bb_sz * 0.5f;
glm::vec2 midpoint = (bb_min + bb_max) * 0.5f; glm::vec2 midpoint = (bb_min + bb_max) * 0.5f;
@@ -1221,7 +1221,7 @@ void CanvasModeTransform::on_Draw(const glm::mat4& ortho, const glm::mat4& proj,
auto c2d = (xy(c3d) * 0.5f + 0.5f) * zw(canvas->m_box); auto c2d = (xy(c3d) * 0.5f + 0.5f) * zw(canvas->m_box);
ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP, ui::ShaderManager::u_mat4(ui::kShaderUniform::MVP,
ortho * glm::translate(glm::vec3(c2d, 0)) * glm::scale(glm::vec3(10.f))); ortho * glm::translate(glm::vec3(c2d, 0)) * glm::scale(glm::vec3(20.f) * App::I.zoom));
// draw inside // draw inside
ui::ShaderManager::u_vec4(ui::kShaderUniform::Col, { 1, 1, 1, i == corner_hl ? 1.f : .1f }); ui::ShaderManager::u_vec4(ui::kShaderUniform::Col, { 1, 1, 1, i == corner_hl ? 1.f : .1f });
@@ -1248,8 +1248,19 @@ void CanvasModeTransform::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
break; break;
case kEventType::MouseUpL: case kEventType::MouseUpL:
m_dragging = false; m_dragging = false;
corner_hl = -1;
break; break;
case kEventType::MouseDownL: case kEventType::MouseDownL:
corner_hl = -1;
corners2d.resize(corners.size());
for (int i = 0; i < corners.size(); i++)
{
auto c = m2d * glm::vec4(corners[i], 1);
corners2d[i] = ((xy(c) / c.z) * 0.5f + 0.5f) * zw(canvas->m_box);
float d = glm::distance(corners2d[i], loc);
if (d < 20.f * App::I.zoom)
corner_hl = i;
}
if (corner_hl != -1) if (corner_hl != -1)
{ {
m_dragging = true; m_dragging = true;
@@ -1273,7 +1284,7 @@ void CanvasModeTransform::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
auto c = m2d * glm::vec4(corners[i], 1); auto c = m2d * glm::vec4(corners[i], 1);
corners2d[i] = ((xy(c) / c.z) * 0.5f + 0.5f) * zw(canvas->m_box); corners2d[i] = ((xy(c) / c.z) * 0.5f + 0.5f) * zw(canvas->m_box);
float d = glm::distance(corners2d[i], loc); float d = glm::distance(corners2d[i], loc);
if (d < 10) if (d < 20.f * App::I.zoom)
corner_hl = i; corner_hl = i;
} }
if (m_dragging) if (m_dragging)