aboutsummaryrefslogtreecommitdiff
path: root/src/Body.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Body.cpp')
-rw-r--r--src/Body.cpp33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/Body.cpp b/src/Body.cpp
index 73f101f..8224087 100644
--- a/src/Body.cpp
+++ b/src/Body.cpp
@@ -9,7 +9,6 @@
static const sf::Color front_color(32, 36, 42);
static const sf::Color back_color(33, 35, 37);
-static float image_max_height = 100.0f;
static const float spacing_y = 15.0f;
static const float padding_x = 10.0f;
static const float image_padding_x = 5.0f;
@@ -279,10 +278,6 @@ namespace QuickMedia {
const sf::Int32 elapsed_time = draw_timer.getElapsedTime().asMilliseconds();
- if(thumbnail_resize_target_size.x != 0 && thumbnail_resize_target_size.y != 0) {
- image_max_height = thumbnail_resize_target_size.y;
- }
-
//item_background.setFillColor(front_color);
//item_background.setOutlineThickness(1.0f);
//item_background.setOutlineColor(sf::Color(13, 15, 17));
@@ -568,17 +563,19 @@ namespace QuickMedia {
if(item_thumbnail->loading_state == LoadingState::APPLIED_TO_TEXTURE && item_thumbnail->texture.getNativeHandle() != 0) {
image.setTexture(item_thumbnail->texture, true);
auto image_size = image.getTexture()->getSize();
- auto height_ratio = std::min(image_max_height, (float)image_size.y) / image_size.y;
- auto scale = image.getScale();
- auto image_scale_ratio = scale.x / scale.y;
- const float width_ratio = height_ratio * image_scale_ratio;
- image.setScale(width_ratio, height_ratio);
+ sf::Vector2f image_size_f(image_size.x, image_size.y);
+ sf::Vector2f content_size(thumbnail_resize_target_size.x, thumbnail_resize_target_size.y);
+ if(item->thumbnail_size.x > 0 && item->thumbnail_size.y > 0)
+ content_size = sf::Vector2f(item->thumbnail_size.x, item->thumbnail_size.y);
+ auto new_image_size = clamp_to_size(image_size_f, content_size);
+ auto image_scale = get_ratio(image_size_f, new_image_size);
+ image.setScale(image_scale);
image.setPosition(item_pos + sf::Vector2f(image_padding_x, padding_y));
if(thumbnail_mask_shader && item->thumbnail_mask_type == ThumbnailMaskType::CIRCLE)
window.draw(image, thumbnail_mask_shader);
else
window.draw(image);
- text_offset_x += image_padding_x + width_ratio * image_size.x;
+ text_offset_x += image_padding_x + new_image_size.x;
// We want the next image fallback to have the same size as the successful image rendering, because its likely the image fallback will have the same size (for example thumbnails on youtube)
//image_fallback.setSize(sf::Vector2f(width_ratio * image_size.x, height_ratio * image_size.y));
} else if(!item->thumbnail_url.empty()) {
@@ -594,7 +591,10 @@ namespace QuickMedia {
image_fallback.setPosition(item_pos + sf::Vector2f(image_padding_x, padding_y));
window.draw(image_fallback);
}
- text_offset_x += image_padding_x + image_fallback.getSize().x;
+ float image_width = image_fallback.getSize().x;
+ if(item->thumbnail_size.x > 0 && item->thumbnail_size.y > 0)
+ image_width = item->thumbnail_size.x;
+ text_offset_x += image_padding_x + image_width;
}
}
@@ -700,6 +700,8 @@ namespace QuickMedia {
}
if(draw_thumbnails && !item->thumbnail_url.empty()) {
float image_height = image_fallback.getSize().y;
+ if(item->thumbnail_size.x > 0 && item->thumbnail_size.y > 0)
+ image_height = item->thumbnail_size.y;
std::shared_ptr<ThumbnailData> item_thumbnail;
auto item_thumbnail_it = item_thumbnail_textures.find(item->thumbnail_url);
@@ -731,7 +733,12 @@ namespace QuickMedia {
if(item_thumbnail && item_thumbnail->loading_state == LoadingState::APPLIED_TO_TEXTURE && item_thumbnail->texture.getNativeHandle() != 0) {
auto image_size = item_thumbnail->texture.getSize();
- image_height = std::min(image_max_height, (float)image_size.y);
+ sf::Vector2f image_size_f(image_size.x, image_size.y);
+ sf::Vector2f content_size(thumbnail_resize_target_size.x, thumbnail_resize_target_size.y);
+ if(item->thumbnail_size.x > 0 && item->thumbnail_size.y > 0)
+ content_size = sf::Vector2f(item->thumbnail_size.x, item->thumbnail_size.y);
+ auto new_image_size = clamp_to_size(image_size_f, content_size);
+ image_height = new_image_size.y;
}
item_height = std::max(item_height, image_height);