void scrollarea::consume_gui_event(event_info e) { if (!is_needed()) return; auto& gr = e.owner; auto& wnd = gr.state; if (e == gui_event::ldown && box) { gr.rect_held_by_lmb = box; if (flags & orientation::HORIZONTAL) { box->rc.center_x(wnd.mouse.pos.x - get_rect_absolute().l); update_scroll_x(); } if (flags & orientation::VERTICAL) { box->rc.center_y(wnd.mouse.pos.y - get_rect_absolute().t); update_scroll_y(); } box->rc_pos_before_dragging = vec2i(box->rc.l, box->rc.t); } }
void item_button::draw_proc(draw_info in, bool draw_inside, bool draw_border, bool draw_connector, bool decrease_alpha, bool decrease_border_alpha, bool draw_container_opened_mark) { if (is_inventory_root()) return; auto parent_slot = item->get<components::item>().current_slot; rgba inside_col = cyan; rgba border_col = cyan; if (parent_slot->for_categorized_items_only) { border_col = pink; inside_col = violet; } inside_col.a = 20; border_col.a = 190; if (detector.is_hovered) { inside_col.a = 30; border_col.a = 220; } if (detector.current_appearance == decltype(detector)::appearance::pushed) { inside_col.a = 60; border_col.a = 255; } if (decrease_alpha) { inside_col.a = 15; } if (decrease_border_alpha) { border_col = slightly_visible_white; } if (draw_inside) { draw_stretched_texture(in, augs::gui::material(assets::texture_id::BLANK, inside_col)); iterate_children_attachments(true, &in.v, border_col); auto& item_data = item->get<components::item>(); float bottom_number_val = -1.f; auto* container = item->find<components::container>(); bool append_x = false; auto label_color = border_col; if (item_data.charges > 1) { bottom_number_val = item_data.charges; append_x = true; } else if (DRAW_FREE_SPACE_INSIDE_CONTAINER_ICONS && item[slot_function::ITEM_DEPOSIT].alive()) { bottom_number_val = item[slot_function::ITEM_DEPOSIT].calculate_free_space_with_parent_containers(); if (item[slot_function::ITEM_DEPOSIT]->for_categorized_items_only) label_color.rgb() = pink.rgb(); else label_color.rgb() = cyan.rgb(); } if (bottom_number_val > -1.f) { std::wstring label_wstr; if (append_x) { label_wstr = L'x'; label_wstr += augs::to_wstring(bottom_number_val); } else label_wstr = augs::to_wstring(bottom_number_val, 2); // else label_wstr = L'{' + label_wstr + L'}'; auto bottom_number = augs::gui::text::format(label_wstr, augs::gui::text::style(assets::font_id::GUI_FONT, label_color)); charges_caption.set_text(bottom_number); charges_caption.bottom_right(get_rect_absolute()); charges_caption.draw(in); } } if (draw_border) { augs::gui::solid_stroke stroke; stroke.set_material(augs::gui::material(assets::texture_id::BLANK, border_col)); stroke.draw(in.v, *this); } if (draw_connector && get_meta(parent_slot).gui_element_entity != parent_slot.container_entity) { draw_pixel_line_connector(get_rect_absolute(), get_meta(parent_slot.container_entity).get_rect_absolute(), in, border_col); } if (draw_container_opened_mark) { if (item->find<components::container>()) { components::sprite container_status_sprite; if(is_container_open) container_status_sprite.set(assets::CONTAINER_OPEN_ICON, border_col); else container_status_sprite.set(assets::CONTAINER_CLOSED_ICON, border_col); shared::state_for_drawing_renderable state; state.screen_space_mode = true; state.overridden_target_buffer = &in.v; state.renderable_transform.pos.set(get_rect_absolute().r - container_status_sprite.size.x + 2, get_rect_absolute().t + 1 //- container_status_sprite.size.y + 2 ); container_status_sprite.draw(state); } } }