Add an "hover" style to items in the project manager

This makes the project manager feel more responsive to user input.
This commit is contained in:
Hugo Locurcio 2019-09-13 02:31:02 +02:00
parent 24e1039eb6
commit 9e5f1d6641
No known key found for this signature in database
GPG Key ID: 39E8F8BE30B0A49C
2 changed files with 27 additions and 0 deletions

View File

@ -717,6 +717,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);

View File

@ -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);