Bugs fixed and eye candies

This commit is contained in:
brunoherbelin
2020-12-31 00:50:50 +01:00
parent 85d72a1c0e
commit e2bb90208e
5 changed files with 108 additions and 190 deletions

View File

@@ -146,27 +146,23 @@ void PickingVisitor::visit(Handles &n)
} }
else if ( n.type() == Handles::ROTATE ){ else if ( n.type() == Handles::ROTATE ){
// the icon for rotation is on the right top corner at (0.12, 0.12) in scene coordinates // the icon for rotation is on the right top corner at (0.12, 0.12) in scene coordinates
glm::vec4 vec = glm::inverse(modelview_) * glm::vec4( 0.1f, 0.1f, 0.f, 0.f ); glm::vec4 vec = glm::inverse(modelview_) * glm::vec4( 0.12f, 0.12f, 0.f, 0.f );
float l = glm::length( glm::vec2(vec) ); picked = glm::length( glm::vec2( 1.f, 1.f) + glm::vec2(vec) - glm::vec2(P) ) < 1.5f * scale;
picked = glm::length( glm::vec2( 1.f + l, 1.f + l) - glm::vec2(P) ) < 1.5f * scale;
} }
else if ( n.type() == Handles::SCALE ){ else if ( n.type() == Handles::SCALE ){
// the icon for scaling is on the right bottom corner at (0.12, -0.12) in scene coordinates // the icon for scaling is on the right bottom corner at (0.12, -0.12) in scene coordinates
glm::vec4 vec = glm::inverse(modelview_) * glm::vec4( 0.1f, 0.1f, 0.f, 0.f ); glm::vec4 vec = glm::inverse(modelview_) * glm::vec4( 0.12f, -0.12f, 0.f, 0.f );
float l = glm::length( glm::vec2(vec) ); picked = glm::length( glm::vec2( 1.f, -1.f) + glm::vec2(vec) - glm::vec2(P) ) < 1.5f * scale;
picked = glm::length( glm::vec2( 1.f + l, -1.f - l) - glm::vec2(P) ) < 1.5f * scale;
} }
else if ( n.type() == Handles::CROP ){ else if ( n.type() == Handles::CROP ){
// the icon for scaling is on the right bottom corner at (0.12, -0.12) in scene coordinates // the icon for cropping is on the left bottom corner at (0.12, 0.12) in scene coordinates
glm::vec4 vec = glm::inverse(modelview_) * glm::vec4( 0.1f, 0.1f, 0.f, 0.f ); glm::vec4 vec = glm::inverse(modelview_) * glm::vec4( 0.12f, 0.12f, 0.f, 0.f );
float l = glm::length( glm::vec2(vec) ); picked = glm::length( glm::vec2( -1.f, -1.f) + glm::vec2(vec) - glm::vec2(P) ) < 1.5f * scale;
picked = glm::length( glm::vec2( -1.f + l, -1.f + l) - glm::vec2(P) ) < 1.5f * scale;
} }
else if ( n.type() == Handles::MENU ){ else if ( n.type() == Handles::MENU ){
// the icon for restore is on the left top corner at (-0.12, 0.12) in scene coordinates // the icon for restore is on the left top corner at (-0.12, 0.12) in scene coordinates
glm::vec4 vec = glm::inverse(modelview_) * glm::vec4( 0.1f, 0.1f, 0.f, 0.f ); glm::vec4 vec = glm::inverse(modelview_) * glm::vec4( -0.12f, 0.12f, 0.f, 0.f );
float l = glm::length( glm::vec2(vec) ); picked = glm::length( glm::vec2( -1.f, 1.f) + glm::vec2(vec) - glm::vec2(P) ) < 1.5f * scale;
picked = glm::length( glm::vec2( -1.f - l, 1.f + l) - glm::vec2(P) ) < 1.5f * scale;
} }
if ( picked ) if ( picked )

View File

@@ -1015,7 +1015,7 @@ void UserInterface::RenderHistory()
ImVec2 MinWindowSize = ImVec2(250.f, history_height); ImVec2 MinWindowSize = ImVec2(250.f, history_height);
ImGui::SetNextWindowPos(ImVec2(1180, 400), ImGuiCond_FirstUseEver); ImGui::SetNextWindowPos(ImVec2(1180, 400), ImGuiCond_FirstUseEver);
ImGui::SetNextWindowSize(ImVec2(250, 400), ImGuiCond_FirstUseEver); ImGui::SetNextWindowSize(ImVec2(400, 400), ImGuiCond_FirstUseEver);
ImGui::SetNextWindowSizeConstraints(MinWindowSize, ImVec2(FLT_MAX, FLT_MAX)); ImGui::SetNextWindowSizeConstraints(MinWindowSize, ImVec2(FLT_MAX, FLT_MAX));
if ( !ImGui::Begin(IMGUI_TITLE_HISTORY, &Settings::application.widget.history, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse )) if ( !ImGui::Begin(IMGUI_TITLE_HISTORY, &Settings::application.widget.history, ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse ))
{ {
@@ -1055,7 +1055,7 @@ void UserInterface::RenderHistory()
if (ImGui::ListBoxHeader("##History", ImGui::GetContentRegionAvail() ) ) if (ImGui::ListBoxHeader("##History", ImGui::GetContentRegionAvail() ) )
{ {
for (int i = 1; i <= Action::manager().max(); i++) { for (int i = Action::manager().max(); i > 0; i--) {
std::string step_label_ = Action::manager().label(i); std::string step_label_ = Action::manager().label(i);
@@ -1976,13 +1976,13 @@ void Navigator::Render()
} }
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
about = "Layers [ F3 ]"; about = "Layers [ F3 ]";
if (ImGui::Selectable( ICON_FA_VECTOR_SQUARE, &selected_view[4], 0, iconsize)) if (ImGui::Selectable( ICON_FA_CHESS_BOARD, &selected_view[4], 0, iconsize))
{ {
Mixer::manager().setView(View::APPEARANCE); Mixer::manager().setView(View::APPEARANCE);
view_pannel_visible = previous_view == Settings::application.current_view; view_pannel_visible = previous_view == Settings::application.current_view;
} }
if (ImGui::IsItemHovered()) if (ImGui::IsItemHovered())
about = "Source apppearance [F4]"; about = "Texturing [ F4 ]";
ImGui::End(); ImGui::End();

234
View.cpp
View File

@@ -1878,6 +1878,19 @@ AppearanceView::AppearanceView() : View(APPEARANCE), edit_source_(nullptr), need
preview_frame_ = new Frame(Frame::SHARP, Frame::THIN, Frame::GLOW); preview_frame_ = new Frame(Frame::SHARP, Frame::THIN, Frame::GLOW);
preview_frame_->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f ); preview_frame_->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f );
scene.bg()->attach(preview_frame_); scene.bg()->attach(preview_frame_);
// marks on the frame to show scale
show_scale_ = false;
horizontal_mark_ = new Mesh("mesh/h_mark.ply");
horizontal_mark_->translation_ = glm::vec3(0.f, 1.f, 0.0f);
horizontal_mark_->scale_ = glm::vec3(2.5f, -2.5f, 0.0f);
horizontal_mark_->shader()->color = glm::vec4( COLOR_TRANSITION_LINES, 0.9f );
scene.bg()->attach(horizontal_mark_);
vertical_mark_ = new Mesh("mesh/h_mark.ply");
vertical_mark_->translation_ = glm::vec3(-1.0f, 0.0f, 0.0f);
vertical_mark_->scale_ = glm::vec3(2.5f, -2.5f, 0.0f);
vertical_mark_->rotation_.z = M_PI_2;
vertical_mark_->shader()->color = glm::vec4( COLOR_TRANSITION_LINES, 0.9f );
scene.bg()->attach(vertical_mark_);
// //
// surface to show the texture of the source // surface to show the texture of the source
@@ -1887,79 +1900,25 @@ AppearanceView::AppearanceView() : View(APPEARANCE), edit_source_(nullptr), need
preview_surface_->translation_.z = 0.002f; preview_surface_->translation_.z = 0.002f;
scene.bg()->attach(preview_surface_); scene.bg()->attach(preview_surface_);
// // Horizontal axis
// horizontal_line_ = new Mesh("mesh/h_line.ply");
// horizontal_line_->shader()->color = glm::vec4( COLOR_TRANSITION_LINES, 0.9f );
// horizontal_line_->translation_ = glm::vec3(0.f, 1.12f, 0.0f);
// horizontal_line_->scale_.x = 1.0f;
// horizontal_line_->scale_.y = 3.0f;
//// scene.bg()->attach(horizontal_line_);
// show_horizontal_scale_ = false;
// horizontal_mark_ = new Mesh("mesh/h_mark.ply");
// horizontal_mark_->translation_ = glm::vec3(0.f, 1.12f, 0.0f);
// horizontal_mark_->scale_ = glm::vec3(2.5f, -2.5f, 0.0f);
// horizontal_mark_->shader()->color = glm::vec4( COLOR_TRANSITION_LINES, 0.9f );
//// scene.bg()->attach(horizontal_mark_);
// // vertical axis
// vertical_line_ = new Group;
// Mesh *line = new Mesh("mesh/h_line.ply");
// line->shader()->color = glm::vec4( COLOR_TRANSITION_LINES, 0.9f );
// line->translation_ = glm::vec3(-0.12f, 0.0f, 0.0f);
// line->scale_.x = 1.0f;
// line->scale_.y = 3.0f;
// line->rotation_.z = M_PI_2;
//// vertical_line_->attach(line);
// vertical_mark_ = new Mesh("mesh/h_mark.ply");
// vertical_mark_->translation_ = glm::vec3(-0.12f, 0.0f, 0.0f);
// vertical_mark_->scale_ = glm::vec3(2.5f, -2.5f, 0.0f);
// vertical_mark_->rotation_.z = M_PI_2;
// vertical_mark_->shader()->color = glm::vec4( COLOR_TRANSITION_LINES, 0.9f );
// vertical_line_->attach(vertical_mark_);
//// scene.bg()->attach(vertical_line_);
/// Tests
// test_buffer = new FrameBuffer(800, 450);
// Log::Info("test_buffer %s", test_buffer->info().c_str());
// test_shader = new MaskShader;
// test_shader->type = 0;
// test_shader->blur = 0.0;
// test_surface = new Surface(test_shader);
// preview_mask_ = new FrameBufferSurface(test_buffer); // to attach source preview
// preview_mask_->translation_.z = 0.002f;
//// scene.bg()->attach(preview_mask_);
// Scene foreground
//
// // crop icons
// crop_horizontal_ = new Symbol(Symbol::ARROWS);
// crop_horizontal_->translation_ = glm::vec3(1.0f, 1.12f, 0.f);
//// scene.fg()->attach(crop_horizontal_);
// crop_vertical_ = new Symbol(Symbol::ARROWS);
// crop_vertical_->rotation_.z = M_PI_2;
// crop_vertical_->translation_ = glm::vec3(-1.12f, -1.0f, 0.f);
//// scene.fg()->attach(crop_vertical_);
// //
// User interface foreground // User interface foreground
// //
// Mask manipulation // Mask manipulation
mask_node_ = new Group; mask_node_ = new Group;
mask_square_ = new Frame(Frame::SHARP, Frame::LARGE, Frame::NONE); mask_square_ = new Frame(Frame::SHARP, Frame::LARGE, Frame::NONE);
mask_square_->color = glm::vec4( 0.2f, 1.f, 1.f, 1.0f ); //BLUE mask_square_->color = glm::vec4( COLOR_APPEARANCE_MASK, 1.0f ); //BLUE
mask_node_->attach(mask_square_); mask_node_->attach(mask_square_);
mask_handle_ = new Handles(Handles::CROP); mask_handle_ = new Handles(Handles::CROP);
mask_handle_->color = glm::vec4( 0.2f, 1.f, 1.f, 1.0f ); //BLUE mask_handle_->color = glm::vec4( COLOR_APPEARANCE_MASK, 1.0f ); //BLUE
mask_node_->attach(mask_handle_); mask_node_->attach(mask_handle_);
mask_circle_ = new Mesh("mesh/circle.ply"); mask_circle_ = new Mesh("mesh/circle.ply");
mask_circle_->shader()->color = glm::vec4( 0.2f, 1.f, 1.f, 1.0f ); mask_circle_->shader()->color = glm::vec4( COLOR_APPEARANCE_MASK, 1.0f );
mask_node_->attach(mask_circle_); mask_node_->attach(mask_circle_);
mask_corner_ = new Mesh("mesh/corner.ply"); mask_corner_ = new Mesh("mesh/corner.ply");
mask_corner_->shader()->color = glm::vec4( 0.2f, 1.f, 1.f, 0.9f ); mask_corner_->shader()->color = glm::vec4( COLOR_APPEARANCE_MASK, 0.9f );
mask_corner_->translation_ = glm::vec3(-1.f, -1.0f, 0.0f); mask_corner_->translation_ = glm::vec3(-1.f, -1.0f, 0.0f);
mask_corner_->scale_ = glm::vec3(0.5f, 0.5f, 1.f);
mask_node_->attach(mask_corner_); mask_node_->attach(mask_corner_);
scene.fg()->attach(mask_node_); scene.fg()->attach(mask_node_);
// Source manipulation (texture coordinates) // Source manipulation (texture coordinates)
@@ -2036,6 +1995,18 @@ AppearanceView::AppearanceView() : View(APPEARANCE), edit_source_(nullptr), need
scene.fg()->attach(overlay_rotation_); scene.fg()->attach(overlay_rotation_);
overlay_rotation_->visible_ = false; overlay_rotation_->visible_ = false;
/// Tests
// test_buffer = new FrameBuffer(800, 450);
// Log::Info("test_buffer %s", test_buffer->info().c_str());
// test_shader = new MaskShader;
// test_shader->type = 0;
// test_shader->blur = 0.0;
// test_surface = new Surface(test_shader);
// preview_mask_ = new FrameBufferSurface(test_buffer); // to attach source preview
// preview_mask_->translation_.z = 0.002f;
//// scene.bg()->attach(preview_mask_);
} }
void AppearanceView::update(float dt) void AppearanceView::update(float dt)
@@ -2129,10 +2100,6 @@ std::pair<Node *, glm::vec2> AppearanceView::pick(glm::vec2 P)
pick = *itp; pick = *itp;
break; break;
} }
// else if ( (*itp).first == crop_horizontal_ || (*itp).first == crop_vertical_ ) {
// pick = *itp;
// break;
// }
else if ( (*itp).first == mask_handle_ ) { else if ( (*itp).first == mask_handle_ ) {
pick = *itp; pick = *itp;
break; break;
@@ -2172,44 +2139,33 @@ void AppearanceView::adjustBackground()
// update rendering frame to match edit source AR // update rendering frame to match edit source AR
image_original_width = edit_source_->frame()->aspectRatio(); image_original_width = edit_source_->frame()->aspectRatio();
scale = edit_source_->mixingsurface_->scale_; scale = edit_source_->mixingsurface_->scale_;
preview_surface_->setTextureIndex( edit_source_->frame()->texture() ); preview_surface_->setTextureIndex( edit_source_->frame()->texture() );
preview_shader_->mask_texture = edit_source_->blendingShader()->mask_texture; preview_shader_->mask_texture = edit_source_->blendingShader()->mask_texture;
preview_surface_->scale_ = scale; preview_surface_->scale_ = scale;
// mask appearance
mask_node_->visible_ = edit_source_->maskShader()->mode > 0; mask_node_->visible_ = edit_source_->maskShader()->mode > 0;
mask_circle_->visible_ = edit_source_->maskShader()->mode == 1; mask_circle_->visible_ = edit_source_->maskShader()->mode == 1;
mask_square_->visible_ = edit_source_->maskShader()->mode >= 2; mask_square_->visible_ = edit_source_->maskShader()->mode >= 2;
mask_node_->scale_ = scale * glm::vec3(edit_source_->maskShader()->size, 1.f); mask_node_->scale_ = scale * glm::vec3(edit_source_->maskShader()->size, 1.f);
mask_corner_->scale_.y = mask_node_->scale_.x / mask_node_->scale_.y; mask_corner_->scale_.y = mask_corner_->scale_.x * mask_node_->scale_.x / mask_node_->scale_.y;
///// Tests
// preview_mask_->scale_ = edit_source_->mixingsurface_->scale_;
} }
// /// Tests
// // update mask
// test_buffer->begin();
// test_surface->draw(glm::identity<glm::mat4>(), test_buffer->projection());
// test_buffer->end();
// background scene // background scene
// horizontal_line_->scale_.x = image_original_width;
// vertical_line_->translation_.x = -image_original_width;
background_surface_->scale_.x = image_original_width; background_surface_->scale_.x = image_original_width;
background_surface_->scale_.y = 1.f; background_surface_->scale_.y = 1.f;
background_frame_->scale_.x = image_original_width; background_frame_->scale_.x = image_original_width;
vertical_mark_->translation_.x = -image_original_width;
preview_frame_->scale_ = scale; preview_frame_->scale_ = scale;
preview_checker_->scale_ = scale; preview_checker_->scale_ = scale;
glm::mat4 Ar = glm::scale(glm::identity<glm::mat4>(), scale ); glm::mat4 Ar = glm::scale(glm::identity<glm::mat4>(), scale );
static glm::mat4 Tra = glm::scale(glm::translate(glm::identity<glm::mat4>(), glm::vec3( -32.f, -32.f, 0.f)), glm::vec3( 64.f, 64.f, 1.f)); static glm::mat4 Tra = glm::scale(glm::translate(glm::identity<glm::mat4>(), glm::vec3( -32.f, -32.f, 0.f)), glm::vec3( 64.f, 64.f, 1.f));
preview_checker_->shader()->iTransform = Ar * Tra; preview_checker_->shader()->iTransform = Ar * Tra;
// /// Tests
// // update mask
// test_buffer->begin();
// test_surface->draw(glm::identity<glm::mat4>(), test_buffer->projection());
// test_buffer->end();
} }
Source *AppearanceView::getEditOrCurrentSource() Source *AppearanceView::getEditOrCurrentSource()
@@ -2255,23 +2211,23 @@ void AppearanceView::draw()
adjustBackground(); adjustBackground();
} }
// // draw marks in axis // draw marks in axis
// if (edit_source_ != nullptr){ if (edit_source_ != nullptr && show_scale_){
// if (show_horizontal_scale_) { {
// int n = static_cast<int>( edit_source_->frame()->aspectRatio() / 0.2f ); glm::vec3 dT = glm::vec3( -0.2f * edit_source_->mixingsurface_->scale_.x, 0.f, 0.f);
// static glm::mat4 T = glm::translate(glm::identity<glm::mat4>(), glm::vec3( 0.2f, 0.f, 0.f)); glm::mat4 T = glm::translate(glm::identity<glm::mat4>(), dT);
// DrawVisitor dv(horizontal_mark_, Rendering::manager().Projection()); DrawVisitor dv(horizontal_mark_, Rendering::manager().Projection());
// dv.loop(n + 1, T); dv.loop(6, T);
// scene.accept(dv); scene.accept(dv);
// } }
// if (show_vertical_scale_) { {
// static glm::mat4 T = glm::translate(glm::identity<glm::mat4>(), glm::vec3( 0.f, -0.2f, 0.f)); glm::vec3 dT = glm::vec3( 0.f, -0.2f * edit_source_->mixingsurface_->scale_.y, 0.f);
// DrawVisitor dv(vertical_mark_, Rendering::manager().Projection()); glm::mat4 T = glm::translate(glm::identity<glm::mat4>(), dT);
// dv.loop(6, T); DrawVisitor dv(vertical_mark_, Rendering::manager().Projection());
// scene.accept(dv); dv.loop(6, T);
// } scene.accept(dv);
// } }
}
// draw general view // draw general view
Shader::force_blending_opacity = true; Shader::force_blending_opacity = true;
@@ -2300,16 +2256,29 @@ void AppearanceView::draw()
edit_source_->maskShader()->mode = type; edit_source_->maskShader()->mode = type;
edit_source_->touch(); edit_source_->touch();
need_edit_update_ = true; need_edit_update_ = true;
// store action history
std::ostringstream oss;
oss << edit_source_->name() << ": Texture Mask " << type;
Action::manager().store(oss.str(), edit_source_->id());
} }
if (edit_source_->maskShader()->mode > 0) { if (edit_source_->maskShader()->mode > 0) {
int val = int(edit_source_->maskShader()->blur * 100.f); int val = int(edit_source_->maskShader()->blur * 100.f);
static bool smoothchanged = false;
ImGui::SameLine(); ImGui::SameLine();
ImGui::SetNextItemWidth(190.f); ImGui::SetNextItemWidth(190.f);
if (ImGui::DragInt("Smooth", &val, 1, 0, 100, "%d%%") ) { if (ImGui::DragInt("Smooth", &val, 1, 0, 100, "%d%%") ) {
edit_source_->maskShader()->blur = float(val) / 100.f; edit_source_->maskShader()->blur = float(val) / 100.f;
edit_source_->touch(); edit_source_->touch();
need_edit_update_ = true; need_edit_update_ = true;
smoothchanged = true;
}
else if (smoothchanged && ImGui::IsMouseReleased(ImGuiMouseButton_Left)){
// store action history
std::ostringstream oss;
oss << edit_source_->name() << ": Texture Smooth " << edit_source_->maskShader()->blur;
Action::manager().store(oss.str(), edit_source_->id());
smoothchanged = false;
} }
} }
@@ -2319,9 +2288,6 @@ void AppearanceView::draw()
} }
// show_vertical_scale_ = false;
// show_horizontal_scale_ = false;
// display popup menu // display popup menu
if (show_context_menu_) { if (show_context_menu_) {
ImGui::OpenPopup( "AppearanceContextMenu" ); ImGui::OpenPopup( "AppearanceContextMenu" );
@@ -2329,7 +2295,7 @@ void AppearanceView::draw()
} }
showContextMenu(mode_,"AppearanceContextMenu"); showContextMenu(mode_,"AppearanceContextMenu");
show_scale_ = false;
} }
View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick) View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair<Node *, glm::vec2> pick)
@@ -2348,7 +2314,6 @@ View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
if ( edit_source_ != nullptr ) { if ( edit_source_ != nullptr ) {
// match edit source AR // match edit source AR
// float image_original_width = edit_source_->frame()->aspectRatio();
glm::vec3 scale = edit_source_->mixingsurface_->scale_; glm::vec3 scale = edit_source_->mixingsurface_->scale_;
glm::vec3 delta = glm::vec3(0.1) / glm::vec3(scene.root()->scale_.x, scene.root()->scale_.y, 1.0); glm::vec3 delta = glm::vec3(0.1) / glm::vec3(scene.root()->scale_.x, scene.root()->scale_.y, 1.0);
@@ -2360,57 +2325,20 @@ View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
if (UserInterface::manager().altModifier()) { if (UserInterface::manager().altModifier()) {
val.x = ROUND(val.x, 5.f); val.x = ROUND(val.x, 5.f);
val.y = ROUND(val.y, 5.f); val.y = ROUND(val.y, 5.f);
show_scale_ = true;
} }
// crop mask horizontally // crop mask horizontally
edit_source_->maskShader()->size.x = CLAMP(val.x, 0.3f, 2.f); edit_source_->maskShader()->size.x = CLAMP(val.x, 0.2f, 2.f);
edit_source_->maskShader()->size.y = CLAMP(val.y, 0.3f, 2.f); edit_source_->maskShader()->size.y = CLAMP(val.y, 0.2f, 2.f);
edit_source_->touch(); edit_source_->touch();
// update // update
need_edit_update_ = true; need_edit_update_ = true;
// cursor indication // cursor indication
info << "Mask " << std::fixed << std::setprecision(3) << edit_source_->maskShader()->size.x; info << "Texture Mask " << std::fixed << std::setprecision(3) << edit_source_->maskShader()->size.x;
info << " x " << edit_source_->maskShader()->size.y; info << " x " << edit_source_->maskShader()->size.y;
ret.type = Cursor_ResizeNESW; ret.type = Cursor_ResizeNESW;
} }
// // picking on the resizing handles in the corners
// if ( pick.first == crop_horizontal_ ) {
// float max_width = edit_source_->frame()->aspectRatio();
// // discretized scaling with ALT
// float val = scene_to.x;
// if (UserInterface::manager().altModifier()) {
// val = ROUND(val, 5.f);
// show_horizontal_scale_ = true;
// }
// // crop mask horizontally
// edit_source_->maskShader()->size.x = CLAMP(val, 0.2f, max_width) / max_width;
// edit_source_->touch();
// // update
// need_edit_update_ = true;
// // cursor indication
// info << "Mask " << std::fixed << std::setprecision(3) << max_width * edit_source_->maskShader()->size.x;
// info << " x " << edit_source_->maskShader()->size.y;
// ret.type = Cursor_ResizeEW;
// }
// if ( pick.first == crop_vertical_ ) {
// float max_width = edit_source_->frame()->aspectRatio();
// float val = -scene_to.y;
// // discretized scaling with ALT
// if (UserInterface::manager().altModifier()) {
// val = ROUND(val, 5.f);
// show_vertical_scale_ = true;
// }
// // crop mask vertically
// edit_source_->maskShader()->size.y = CLAMP(val, 0.2f, 1.0f);
// edit_source_->touch();
// // update
// need_edit_update_ = true;
// // cursor indication
// info << "Mask " << std::fixed << std::setprecision(3) << max_width * edit_source_->maskShader()->size.x ;
// info << " x " << edit_source_->maskShader()->size.y;
// ret.type = Cursor_ResizeNS;
// }
// store action in history // store action in history
current_action_ = edit_source_->name() + ": " + info.str(); current_action_ = edit_source_->name() + ": " + info.str();
current_id_ = edit_source_->id(); current_id_ = edit_source_->id();
@@ -2504,7 +2432,7 @@ View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
T = glm::scale(T, s->stored_status_->scale_); T = glm::scale(T, s->stored_status_->scale_);
corner = T * glm::vec4( corner, 0.f, 0.f ); corner = T * glm::vec4( corner, 0.f, 0.f );
ret.type = corner.x * corner.y > 0.f ? Cursor_ResizeNESW : Cursor_ResizeNWSE; ret.type = corner.x * corner.y > 0.f ? Cursor_ResizeNESW : Cursor_ResizeNWSE;
info << "UV scale " << std::fixed << std::setprecision(3) << sourceNode->scale_.x; info << "Texture scale " << std::fixed << std::setprecision(3) << sourceNode->scale_.x;
info << " x " << sourceNode->scale_.y; info << " x " << sourceNode->scale_.y;
} }
@@ -2547,7 +2475,7 @@ View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
// show cursor depending on angle // show cursor depending on angle
float c = tan(sourceNode->rotation_.z); float c = tan(sourceNode->rotation_.z);
ret.type = ABS(c) > 1.f ? Cursor_ResizeNS : Cursor_ResizeEW; ret.type = ABS(c) > 1.f ? Cursor_ResizeNS : Cursor_ResizeEW;
info << "UV scale " << std::fixed << std::setprecision(3) << sourceNode->scale_.x; info << "Texture Scale " << std::fixed << std::setprecision(3) << sourceNode->scale_.x;
info << " x " << sourceNode->scale_.y; info << " x " << sourceNode->scale_.y;
} }
// picking on the BORDER RESIZING handles top or bottom // picking on the BORDER RESIZING handles top or bottom
@@ -2589,7 +2517,7 @@ View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
// show cursor depending on angle // show cursor depending on angle
float c = tan(sourceNode->rotation_.z); float c = tan(sourceNode->rotation_.z);
ret.type = ABS(c) > 1.f ? Cursor_ResizeEW : Cursor_ResizeNS; ret.type = ABS(c) > 1.f ? Cursor_ResizeEW : Cursor_ResizeNS;
info << "UV scale " << std::fixed << std::setprecision(3) << sourceNode->scale_.x; info << "Texture Scale " << std::fixed << std::setprecision(3) << sourceNode->scale_.x;
info << " x " << sourceNode->scale_.y; info << " x " << sourceNode->scale_.y;
} }
// picking on the CENTRER SCALING handle // picking on the CENTRER SCALING handle
@@ -2630,7 +2558,7 @@ View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
// show cursor depending on diagonal // show cursor depending on diagonal
corner = glm::sign(sourceNode->scale_); corner = glm::sign(sourceNode->scale_);
ret.type = (corner.x * corner.y) > 0.f ? Cursor_ResizeNWSE : Cursor_ResizeNESW; ret.type = (corner.x * corner.y) > 0.f ? Cursor_ResizeNWSE : Cursor_ResizeNESW;
info << "UV scale " << std::fixed << std::setprecision(3) << sourceNode->scale_.x; info << "Texture Scale " << std::fixed << std::setprecision(3) << sourceNode->scale_.x;
info << " x " << sourceNode->scale_.y; info << " x " << sourceNode->scale_.y;
} }
// picking on the rotating handle // picking on the rotating handle
@@ -2667,10 +2595,10 @@ View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
sourceNode->rotation_.z = glm::radians( float(degrees) ); sourceNode->rotation_.z = glm::radians( float(degrees) );
overlay_rotation_clock_->visible_ = true; overlay_rotation_clock_->visible_ = true;
overlay_rotation_clock_->copyTransform(overlay_rotation_); overlay_rotation_clock_->copyTransform(overlay_rotation_);
info << "Angle " << degrees << "\u00b0"; // degree symbol info << "Texture Angle " << degrees << "\u00b0"; // degree symbol
} }
else else
info << "Angle " << std::fixed << std::setprecision(1) << glm::degrees(sourceNode->rotation_.z) << "\u00b0"; // degree symbol info << "Texture Angle " << std::fixed << std::setprecision(1) << glm::degrees(sourceNode->rotation_.z) << "\u00b0"; // degree symbol
overlay_rotation_clock_hand_->visible_ = true; overlay_rotation_clock_hand_->visible_ = true;
overlay_rotation_clock_hand_->translation_.x = s->stored_status_->translation_.x; overlay_rotation_clock_hand_->translation_.x = s->stored_status_->translation_.x;
@@ -2687,7 +2615,7 @@ View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
source_scaling = glm::vec3(factor, factor, 1.f); source_scaling = glm::vec3(factor, factor, 1.f);
// apply center scaling // apply center scaling
sourceNode->scale_ = s->stored_status_->scale_ * source_scaling; sourceNode->scale_ = s->stored_status_->scale_ * source_scaling;
info << std::endl << " UV scale " << std::fixed << std::setprecision(3) << sourceNode->scale_.x; info << std::endl << " Scale " << std::fixed << std::setprecision(3) << sourceNode->scale_.x;
info << " x " << sourceNode->scale_.y ; info << " x " << sourceNode->scale_.y ;
overlay_rotation_fix_->visible_ = false; overlay_rotation_fix_->visible_ = false;
} }
@@ -2724,7 +2652,7 @@ View::Cursor AppearanceView::grab (Source *s, glm::vec2 from, glm::vec2 to, std:
overlay_position_->translation_.y = sourceNode->translation_.y; overlay_position_->translation_.y = sourceNode->translation_.y;
overlay_position_->update(0); overlay_position_->update(0);
// Show move cursor // Show move cursor
info << "UV shift " << std::fixed << std::setprecision(3) << sourceNode->translation_.x; info << "Texture Shift " << std::fixed << std::setprecision(3) << sourceNode->translation_.x;
info << ", " << sourceNode->translation_.y ; info << ", " << sourceNode->translation_.y ;
} }
} }

27
View.h
View File

@@ -249,29 +249,15 @@ private:
Source *getEditOrCurrentSource(); Source *getEditOrCurrentSource();
void adjustBackground(); void adjustBackground();
// /// tests
// Surface *preview_mask_;
// Surface *test_surface;
// class MaskShader *test_shader;
// FrameBuffer *test_buffer;
Surface *preview_surface_; Surface *preview_surface_;
class ImageShader *preview_shader_; class ImageShader *preview_shader_;
Surface *preview_checker_; Surface *preview_checker_;
Frame *preview_frame_; Frame *preview_frame_;
Surface *background_surface_; Surface *background_surface_;
Frame *background_frame_; Frame *background_frame_;
// Mesh *horizontal_line_; Mesh *horizontal_mark_;
// Mesh *horizontal_mark_; Mesh *vertical_mark_;
// bool show_horizontal_scale_; bool show_scale_;
// Group *vertical_line_;
// Mesh *vertical_mark_;
// bool show_vertical_scale_;
// Symbol *crop_horizontal_;
// Symbol *crop_vertical_;
Group *mask_node_; Group *mask_node_;
Frame *mask_square_; Frame *mask_square_;
Mesh *mask_circle_; Mesh *mask_circle_;
@@ -288,6 +274,13 @@ private:
Node *overlay_rotation_clock_; Node *overlay_rotation_clock_;
Symbol *overlay_rotation_clock_hand_; Symbol *overlay_rotation_clock_hand_;
bool show_context_menu_; bool show_context_menu_;
// /// tests
// Surface *preview_mask_;
// Surface *test_surface;
// class MaskShader *test_shader;
// FrameBuffer *test_buffer;
}; };

View File

@@ -72,6 +72,7 @@
#define COLOR_TRANSITION_SOURCE 1.f, 0.5f, 1.f #define COLOR_TRANSITION_SOURCE 1.f, 0.5f, 1.f
#define COLOR_TRANSITION_LINES 0.9f, 0.9f, 0.9f #define COLOR_TRANSITION_LINES 0.9f, 0.9f, 0.9f
#define COLOR_APPEARANCE_SOURCE 0.9f, 0.9f, 0.1f #define COLOR_APPEARANCE_SOURCE 0.9f, 0.9f, 0.1f
#define COLOR_APPEARANCE_MASK 0.1f, 0.9f, 0.9f
#define COLOR_FRAME 0.8f, 0.f, 0.8f #define COLOR_FRAME 0.8f, 0.f, 0.8f
#define COLOR_LIMBO_CIRCLE 0.16f, 0.16f, 0.16f #define COLOR_LIMBO_CIRCLE 0.16f, 0.16f, 0.16f
#define COLOR_SLIDER_CIRCLE 0.11f, 0.11f, 0.11f #define COLOR_SLIDER_CIRCLE 0.11f, 0.11f, 0.11f