diff options
author | dec05eba <dec05eba@protonmail.com> | 2021-03-24 08:42:40 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2021-03-24 08:42:40 +0100 |
commit | 84d4d43d2f79da48c3494e11c8b29790fb6eae12 (patch) | |
tree | d530ff3bff5737cf224de069d9fe10fa649c454a /include | |
parent | 1bd8a4008499c78e4ee6ed40fd01657506b24983 (diff) |
Matrix: merge body items if same author
Diffstat (limited to 'include')
-rw-r--r-- | include/Body.hpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/include/Body.hpp b/include/Body.hpp index 53622e8..738c41b 100644 --- a/include/Body.hpp +++ b/include/Body.hpp @@ -160,6 +160,8 @@ namespace QuickMedia { using BodyItems = std::vector<std::shared_ptr<BodyItem>>; using BodyItemRenderCallback = std::function<void(BodyItem *body_item)>; + // Return true to merge + using BodyItemMergeHandler = std::function<bool(BodyItem *prev_item, BodyItem *this_item)>; enum class AttachSide { TOP, @@ -216,7 +218,7 @@ namespace QuickMedia { // because of Text::setMaxWidth void draw_item(sf::RenderWindow &window, BodyItem *item, sf::Vector2f pos, sf::Vector2f size, bool include_embedded_item = true, bool is_embedded = false); - float get_item_height(BodyItem *item, float width, bool load_texture = true, bool include_embedded_item = true); + float get_item_height(BodyItem *item, float width, bool load_texture = true, bool include_embedded_item = true, bool merge_with_previous = false); float get_spacing_y() const; static bool string_find_case_insensitive(const std::string &str, const std::string &substr); @@ -249,14 +251,17 @@ namespace QuickMedia { sf::Vector2i thumbnail_max_size; sf::Color line_separator_color; BodyItemRenderCallback body_item_render_callback; + BodyItemMergeHandler body_item_merge_handler; std::function<void(BodyItem*)> body_item_select_callback; sf::Shader *thumbnail_mask_shader; AttachSide attach_side = AttachSide::TOP; private: - void draw_item(sf::RenderWindow &window, BodyItem *item, const sf::Vector2f &pos, const sf::Vector2f &size, const float item_height, const int item_index, const Json::Value &content_progress, bool include_embedded_item = true); + void draw_item(sf::RenderWindow &window, BodyItem *item, const sf::Vector2f &pos, const sf::Vector2f &size, const float item_height, const int item_index, const Json::Value &content_progress, bool include_embedded_item = true, bool merge_with_previous = false); void update_dirty_state(BodyItem *body_item, float width); void clear_body_item_cache(BodyItem *body_item); sf::Vector2i get_item_thumbnail_size(BodyItem *item) const; + BodyItem* get_previous_visible_item(int start_index); + BodyItem* get_next_visible_item(int start_index); private: Program *program; std::unordered_map<std::string, std::shared_ptr<ThumbnailData>> item_thumbnail_textures; |