From 5e7215b4675955fee8197076914599fe62f39c26 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 17 Sep 2020 16:44:52 +0200 Subject: Disable wrap around body, detect wrap around --- src/Body.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 16 deletions(-) (limited to 'src/Body.cpp') diff --git a/src/Body.cpp b/src/Body.cpp index 6500e16..2233f92 100644 --- a/src/Body.cpp +++ b/src/Body.cpp @@ -20,39 +20,73 @@ namespace QuickMedia { replies_text("", *font, 14), selected_item(0), draw_thumbnails(false), - loading_thumbnail(false) + loading_thumbnail(false), + wrap_around(false) { progress_text.setFillColor(sf::Color::White); author_text.setFillColor(sf::Color::White); replies_text.setFillColor(sf::Color(129, 162, 190)); } - void Body::select_previous_item() { + bool Body::select_previous_item() { if(items.empty()) - return; + return false; + int new_selected_item = selected_item; int num_items = (int)items.size(); + for(int i = 0; i < num_items; ++i) { - --selected_item; - if(selected_item < 0) - selected_item = num_items - 1; - if(items[selected_item]->visible) - return; + if(new_selected_item - 1 < 0) { + if(wrap_around) + new_selected_item = num_items - 1; + else { + new_selected_item = selected_item; + break; + } + } else { + --new_selected_item; + } + if(items[new_selected_item]->visible) + break; } + + if(selected_item == new_selected_item) + return false; + selected_item = new_selected_item; + return true; } - void Body::select_next_item() { + bool Body::select_next_item() { if(items.empty()) - return; + return false; + int new_selected_item = selected_item; int num_items = (int)items.size(); + for(int i = 0; i < num_items; ++i) { - ++selected_item; - if(selected_item == num_items) - selected_item = 0; - if(items[selected_item]->visible) - return; + if(new_selected_item + 1 == num_items) { + if(wrap_around) { + new_selected_item = 0; + } else { + new_selected_item = selected_item; + break; + } + } else { + ++new_selected_item; + } + if(items[new_selected_item]->visible) + break; } + + if(selected_item == new_selected_item) + return false; + selected_item = new_selected_item; + return true; + } + + void Body::set_selected_item(int item) { + assert(item >= 0 && item < (int)items.size()); + selected_item = item; } void Body::select_first_item() { @@ -178,7 +212,7 @@ namespace QuickMedia { body_item->title_text->setString(body_item->get_title()); else body_item->title_text = std::make_unique(body_item->get_title(), font, 14, size.x - 50 - image_padding_x * 2.0f); - //body_item->title_text->updateGeometry(); // TODO: Call this to make getHeight work on first frame (called below) + body_item->title_text->updateGeometry(); } if(!body_item->get_description().empty() && !body_item->description_text) { -- cgit v1.2.3