Merge pull request #2068 from Krzycho666/color_ramp

ColorRamp new features
This commit is contained in:
Juan Linietsky 2015-06-23 00:01:01 -03:00
commit 46692cccf2

View File

@ -48,6 +48,7 @@ void ColorRampEdit::_input_event(const InputEvent& p_event) {
points.remove(grabbed);
grabbed=-1;
grabbing=false;
update();
emit_signal("ramp_changed");
accept_event();
@ -67,12 +68,38 @@ void ColorRampEdit::_input_event(const InputEvent& p_event) {
{
points.remove(grabbed);
grabbed=-1;
grabbing=false;
update();
emit_signal("ramp_changed");
accept_event();
}
}
//Hold alt key to duplicate selected color
if (p_event.type==InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index==1 && p_event.mouse_button.pressed && p_event.key.mod.alt ) {
int x = p_event.mouse_button.x;
grabbed=_get_point_from_pos(x);
if( grabbed != -1 ) {
int total_w = get_size().width-get_size().height-3;
ColorRamp::Point newPoint = points[grabbed];
newPoint.offset=CLAMP(x/float(total_w),0,1);
points.push_back(newPoint);
points.sort();
for(int i=0;i<points.size();++i) {
if (points[i].offset==newPoint.offset) {
grabbed=i;
break;
}
}
emit_signal("ramp_changed");
update();
}
}
if (p_event.type==InputEvent::MOUSE_BUTTON && p_event.mouse_button.button_index==1 && p_event.mouse_button.pressed) {
update();
@ -158,6 +185,33 @@ void ColorRampEdit::_input_event(const InputEvent& p_event) {
int x = p_event.mouse_motion.x;
float newofs = CLAMP(x/float(total_w),0,1);
//Snap to nearest point if holding shift
if (p_event.key.mod.shift) {
float snap_treshhold = 0.03;
float smallest_ofs = snap_treshhold;
bool founded = false;
int nearest_point;
for(int i=0;i<points.size();++i) {
if (i != grabbed) {
float temp_ofs = ABS(points[i].offset - newofs);
if (temp_ofs < smallest_ofs) {
smallest_ofs = temp_ofs;
nearest_point = i;
if (founded)
break;
founded = true;
}
}
}
if (founded) {
if (points[nearest_point].offset < newofs)
newofs = points[nearest_point].offset+0.00001;
else
newofs = points[nearest_point].offset-0.00001;
newofs = CLAMP(newofs,0,1);
}
}
bool valid=true;
for(int i=0;i<points.size();i++) {