void ColorPicker::_w_input(const Ref<InputEvent> &ev) { Ref<InputEventMouseButton> bev = ev; if (bev.is_valid()) { if (bev->is_pressed() && bev->get_button_index() == BUTTON_LEFT) { changing_color = true; h = 1 - ((float)bev->get_position().y) / 256.0; } else { changing_color = false; } color.set_hsv(h, s, v, color.a); last_hsv = color; set_pick_color(color); _update_color(); emit_signal("color_changed", color); } Ref<InputEventMouseMotion> mev = ev; if (mev.is_valid()) { if (!changing_color) return; float y = CLAMP((float)mev->get_position().y, 0, 256); h = 1.0 - y / 256.0; color.set_hsv(h, s, v, color.a); last_hsv = color; set_pick_color(color); _update_color(); emit_signal("color_changed", color); } }
void ColorPicker::_w_input(const InputEvent &ev) { if (ev.type == InputEvent::MOUSE_BUTTON) { const InputEventMouseButton &bev = ev.mouse_button; if (bev.pressed) { changing_color = true; h=1-((float)bev.y)/256.0; } else { changing_color = false; } color.set_hsv(h,s,v,color.a); last_hsv = color; set_color(color); _update_color(); emit_signal("color_changed", color); } else if (ev.type == InputEvent::MOUSE_MOTION) { const InputEventMouse &bev = ev.mouse_motion; if (!changing_color) return; float y = CLAMP((float)bev.y,0,256); h=1.0-y/256.0; color.set_hsv(h,s,v,color.a); last_hsv = color; set_color(color); _update_color(); emit_signal("color_changed", color); } }
void ColorPicker::_notification(int p_what) { switch(p_what) { case NOTIFICATION_THEME_CHANGED: { uv_material->set_shader(get_shader("uv_editor")); w_material->set_shader(get_shader("w_editor")); update_material(uv_material,color,h,s,v); update_material(w_material,color,h,s,v); _update_controls(); } break; case NOTIFICATION_ENTER_TREE: { btn_pick->set_icon(get_icon("screen_picker", "ColorPicker")); update_material(uv_material, color,h,s,v); update_material(w_material, color,h,s,v); uv_edit->get_child(0)->cast_to<Control>()->update(); w_edit->get_child(0)->cast_to<Control>()->update(); _update_color(); } case NOTIFICATION_VISIBILITY_CHANGED: { c_text->call_deferred("grab_focus"); c_text->call_deferred("select"); } break; } }
void ColorPicker::_preset_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> bev = p_event; if (bev.is_valid()) { if (bev->is_pressed() && bev->get_button_index() == BUTTON_LEFT) { int index = bev->get_position().x / (preset->get_size().x / presets.size()); set_pick_color(presets[index]); _update_color(); emit_signal("color_changed", color); } else if (bev->is_pressed() && bev->get_button_index() == BUTTON_RIGHT) { int index = bev->get_position().x / (preset->get_size().x / presets.size()); Color clicked_preset = presets[index]; erase_preset(clicked_preset); emit_signal("preset_removed", clicked_preset); bt_add_preset->show(); } } Ref<InputEventMouseMotion> mev = p_event; if (mev.is_valid()) { int index = mev->get_position().x * presets.size(); if (preset->get_size().x != 0) { index /= preset->get_size().x; } if (index < 0 || index >= presets.size()) return; preset->set_tooltip("Color: #" + presets[index].to_html(presets[index].a < 1) + "\n" "LMB: Set color\n" "RMB: Remove preset"); } }
void ColorPicker::_preset_input(const InputEvent &ev) { if (ev.type == InputEvent::MOUSE_BUTTON) { const InputEventMouseButton &bev = ev.mouse_button; if (bev.pressed && bev.button_index==BUTTON_LEFT) { int index = bev.x/(preset->get_size().x/presets.size()); set_color(presets[index]); } else if (bev.pressed && bev.button_index==BUTTON_RIGHT) { int index = bev.x/(preset->get_size().x/presets.size()); presets.erase(presets[index]); _update_presets(); bt_add_preset->show(); } _update_color(); emit_signal("color_changed", color); } else if (ev.type == InputEvent::MOUSE_MOTION) { const InputEventMouse &mev = ev.mouse_motion; int index = mev.x * presets.size(); if( preset->get_size().x != 0 ) { index /= preset->get_size().x; } if (index<0 || index >= presets.size()) return; preset->set_tooltip("Color: #"+presets[index].to_html(presets[index].a<1)+"\n" "LMB: Set color\n" "RMB: Remove preset"); } }
void ColorPicker::set_edit_alpha(bool p_show) { edit_alpha=p_show; _update_controls(); _update_color(); color_box->update(); }
void ColorPicker::_html_entered(const String& p_html) { if (updating) return; color = Color::html(p_html); _update_color(); emit_signal("color_changed",color); }
void ColorPicker::set_mode(Mode p_mode) { ERR_FAIL_INDEX(p_mode,3); mode=p_mode; if (mode_box->get_selected()!=p_mode) mode_box->select(p_mode); _update_controls(); _update_color(); }
void ColorPicker::_uv_input(const Ref<InputEvent> &p_event) { Ref<InputEventMouseButton> bev = p_event; if (bev.is_valid()) { if (bev->is_pressed() && bev->get_button_index() == BUTTON_LEFT) { changing_color = true; float x = CLAMP((float)bev->get_position().x, 0, uv_edit->get_size().width); float y = CLAMP((float)bev->get_position().y, 0, uv_edit->get_size().height); s = x / uv_edit->get_size().width; v = 1.0 - y / uv_edit->get_size().height; color.set_hsv(h, s, v, color.a); last_hsv = color; set_pick_color(color); _update_color(); if (!deferred_mode_enabled) emit_signal("color_changed", color); } else if (deferred_mode_enabled && !bev->is_pressed() && bev->get_button_index() == BUTTON_LEFT) { emit_signal("color_changed", color); changing_color = false; } else { changing_color = false; } } Ref<InputEventMouseMotion> mev = p_event; if (mev.is_valid()) { if (!changing_color) return; float x = CLAMP((float)mev->get_position().x, 0, uv_edit->get_size().width); float y = CLAMP((float)mev->get_position().y, 0, uv_edit->get_size().height); s = x / uv_edit->get_size().width; v = 1.0 - y / uv_edit->get_size().height; color.set_hsv(h, s, v, color.a); last_hsv = color; set_pick_color(color); _update_color(); if (!deferred_mode_enabled) emit_signal("color_changed", color); } }
void ColorPicker::set_edit_alpha(bool p_show) { edit_alpha = p_show; _update_controls(); if (!is_inside_tree()) return; _update_color(); sample->update(); }
void ColorPicker::_text_type_toggled() { if (!Engine::get_singleton()->is_editor_hint()) return; text_is_constructor = !text_is_constructor; if (text_is_constructor) { text_type->set_text(""); text_type->set_icon(get_icon("Script", "EditorIcons")); } else { text_type->set_text("#"); text_type->set_icon(NULL); } _update_color(); }
void ColorPicker::set_raw_mode(bool p_enabled) { if (raw_mode_enabled == p_enabled) return; raw_mode_enabled = p_enabled; if (btn_mode->is_pressed() != p_enabled) btn_mode->set_pressed(p_enabled); if (!is_inside_tree()) return; _update_controls(); _update_color(); }
void ColorPicker::set_pick_color(const Color &p_color) { color = p_color; if (color != last_hsv) { h = color.get_h(); s = color.get_s(); v = color.get_v(); last_hsv = color; } if (!is_inside_tree()) return; _update_color(); }
void ColorPicker::_notification(int p_what) { switch (p_what) { case NOTIFICATION_THEME_CHANGED: { btn_pick->set_icon(get_icon("screen_picker", "ColorPicker")); bt_add_preset->set_icon(get_icon("add_preset")); _update_controls(); } break; case NOTIFICATION_ENTER_TREE: { btn_pick->set_icon(get_icon("screen_picker", "ColorPicker")); bt_add_preset->set_icon(get_icon("add_preset")); _update_color(); #ifdef TOOLS_ENABLED if (Engine::get_singleton()->is_editor_hint()) { PoolColorArray saved_presets = EditorSettings::get_singleton()->get_project_metadata("color_picker", "presets", PoolColorArray()); for (int i = 0; i < saved_presets.size(); i++) { add_preset(saved_presets[i]); } } #endif } break; case NOTIFICATION_PARENTED: { for (int i = 0; i < 4; i++) set_margin((Margin)i, get_constant("margin")); } break; case NOTIFICATION_VISIBILITY_CHANGED: { Popup *p = Object::cast_to<Popup>(get_parent()); if (p) p->set_size(Size2(get_combined_minimum_size().width + get_constant("margin") * 2, get_combined_minimum_size().height + get_constant("margin") * 2)); } break; case MainLoop::NOTIFICATION_WM_QUIT_REQUEST: { if (screen != NULL) { if (screen->is_visible()) { screen->hide(); } } } break; } }
void ColorPicker::_notification(int p_what) { switch (p_what) { case NOTIFICATION_THEME_CHANGED: { //sample->set_texture(get_icon("color_sample")); _update_controls(); } break; case NOTIFICATION_ENTER_TREE: { btn_pick->set_icon(get_icon("screen_picker", "ColorPicker")); _update_color(); } } }
void ColorPicker::set_color(const Color& p_color) { color=p_color; h=color.get_h(); s=color.get_s(); v=color.get_v(); if (!is_inside_tree()) return; update_material(uv_material, color); update_material(w_material, color); uv_edit->get_child(0)->cast_to<Control>()->update(); w_edit->get_child(0)->cast_to<Control>()->update(); _update_color(); }
void ColorPicker::set_pick_color(const Color &p_color) { color = p_color; if (color != last_hsv) { h = color.get_h(); s = color.get_s(); v = color.get_v(); last_hsv = color; } if (!is_inside_tree()) return; return; //it crashes, so returning uv_edit->get_child(0)->cast_to<Control>()->update(); w_edit->get_child(0)->cast_to<Control>()->update(); _update_color(); }
ColorPicker::ColorPicker() { //edit_alpha=false; updating=true; edit_alpha=true; VBoxContainer *vbl = memnew( VBoxContainer ); add_child(vbl); mode_box = memnew( OptionButton ); mode_box->add_item("RGB"); mode_box->add_item("HSV"); mode_box->add_item("RAW"); mode_box->connect("item_selected",this,"set_mode"); color_box=memnew( Control ); color_box->set_v_size_flags(SIZE_EXPAND_FILL); vbl->add_child(color_box); color_box->connect("draw",this,"_color_box_draw"); vbl->add_child(mode_box); VBoxContainer *vbr = memnew( VBoxContainer ); add_child(vbr); vbr->set_h_size_flags(SIZE_EXPAND_FILL); for(int i=0;i<4;i++) { HBoxContainer *hbc = memnew( HBoxContainer ); labels[i]=memnew( Label ); hbc->add_child(labels[i]); scroll[i]=memnew( HSlider ); hbc->add_child(scroll[i]); values[i]=memnew( SpinBox ); scroll[i]->share(values[i]); hbc->add_child(values[i]); scroll[i]->set_min(0); scroll[i]->set_page(0); scroll[i]->set_h_size_flags(SIZE_EXPAND_FILL); scroll[i]->connect("value_changed",this,"_value_changed"); vbr->add_child(hbc); } HBoxContainer *hhb = memnew( HBoxContainer ); vbr->add_child(hhb); html_num = memnew( Label ); hhb->add_child(html_num); html = memnew( LineEdit ); hhb->add_child(html); html->connect("text_entered",this,"_html_entered"); html_num->set_text("#"); html->set_h_size_flags(SIZE_EXPAND_FILL); mode=MODE_RGB; _update_controls(); _update_color(); updating=false; }
void ColorPicker::set_color(const Color& p_color) { color=p_color; _update_color(); }