Browse Source

Merge pull request #32112 from Calinou/project-manager-add-hover-style

Add an "hover" style to items in the project manager
Rémi Verschelde 6 years ago
parent
commit
d249bb37e5
2 changed files with 27 additions and 0 deletions
  1. 5 0
      editor/editor_themes.cpp
  2. 22 0
      editor/project_manager.cpp

+ 5 - 0
editor/editor_themes.cpp

@@ -714,6 +714,11 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
 	style_tree_btn->set_border_width_all(0);
 	theme->set_stylebox("button_pressed", "Tree", style_tree_btn);
 
+	Ref<StyleBoxFlat> style_tree_hover = style_default->duplicate();
+	style_tree_hover->set_bg_color(highlight_color * Color(1, 1, 1, 0.4));
+	style_tree_hover->set_border_width_all(0);
+	theme->set_stylebox("hover", "Tree", style_tree_hover);
+
 	Ref<StyleBoxFlat> style_tree_focus = style_default->duplicate();
 	style_tree_focus->set_bg_color(highlight_color);
 	style_tree_focus->set_border_width_all(0);

+ 22 - 0
editor/project_manager.cpp

@@ -928,16 +928,36 @@ public:
 	TextureButton *favorite_button;
 	TextureRect *icon;
 	bool icon_needs_reload;
+	bool hover;
 
 	ProjectListItemControl() {
 		favorite_button = NULL;
 		icon = NULL;
 		icon_needs_reload = true;
+		hover = false;
 	}
 
 	void set_is_favorite(bool fav) {
 		favorite_button->set_modulate(fav ? Color(1, 1, 1, 1) : Color(1, 1, 1, 0.2));
 	}
+
+	void _notification(int p_what) {
+		switch (p_what) {
+			case NOTIFICATION_MOUSE_ENTER: {
+				hover = true;
+				update();
+			} break;
+			case NOTIFICATION_MOUSE_EXIT: {
+				hover = false;
+				update();
+			} break;
+			case NOTIFICATION_DRAW: {
+				if (hover) {
+					draw_style_box(get_stylebox("hover", "Tree"), Rect2(Point2(), get_size() - Size2(10, 0) * EDSCALE));
+				}
+			} break;
+		}
+	}
 };
 
 class ProjectList : public ScrollContainer {
@@ -1260,6 +1280,8 @@ void ProjectList::create_project_item_control(int p_index) {
 	TextureButton *favorite = memnew(TextureButton);
 	favorite->set_name("FavoriteButton");
 	favorite->set_normal_texture(favorite_icon);
+	// This makes the project's "hover" style display correctly when hovering the favorite icon
+	favorite->set_mouse_filter(MOUSE_FILTER_PASS);
 	favorite->connect("pressed", this, "_favorite_pressed", varray(hb));
 	favorite_box->add_child(favorite);
 	favorite_box->set_alignment(BoxContainer::ALIGN_CENTER);