You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.8 KiB
73 lines
1.8 KiB
#pragma once |
|
|
|
#include <cstdint> |
|
|
|
#include "DiabloUI/ui_item.h" |
|
#include "engine/clx_sprite.hpp" |
|
#include "utils/sdl_geometry.h" |
|
|
|
namespace devilution { |
|
|
|
extern OptionalOwnedClxSpriteList ArtScrollBarBackground; |
|
extern OptionalOwnedClxSpriteList ArtScrollBarThumb; |
|
extern OptionalOwnedClxSpriteList ArtScrollBarArrow; |
|
constexpr Uint16 ScrollBarBgWidth = 25; |
|
|
|
enum ScrollBarArrowFrame : uint8_t { |
|
ScrollBarArrowFrame_UP_ACTIVE, |
|
ScrollBarArrowFrame_UP, |
|
ScrollBarArrowFrame_DOWN_ACTIVE, |
|
ScrollBarArrowFrame_DOWN, |
|
}; |
|
|
|
constexpr Uint16 ScrollBarArrowWidth = 25; |
|
|
|
inline SDL_Rect UpArrowRect(const UiScrollbar &bar) |
|
{ |
|
return MakeSdlRect( |
|
bar.m_rect.x, |
|
bar.m_rect.y, |
|
ScrollBarArrowWidth, |
|
bar.m_arrow[0].height()); |
|
} |
|
|
|
inline SDL_Rect DownArrowRect(const UiScrollbar &bar) |
|
{ |
|
return MakeSdlRect( |
|
bar.m_rect.x, |
|
bar.m_rect.y + bar.m_rect.h - bar.m_arrow[0].height(), |
|
ScrollBarArrowWidth, |
|
bar.m_arrow[0].height()); |
|
} |
|
|
|
inline Uint16 BarHeight(const UiScrollbar &bar) |
|
{ |
|
return bar.m_rect.h - 2 * bar.m_arrow[0].height(); |
|
} |
|
|
|
inline SDL_Rect BarRect(const UiScrollbar &bar) |
|
{ |
|
return MakeSdlRect( |
|
bar.m_rect.x, |
|
bar.m_rect.y + bar.m_arrow[0].height(), |
|
ScrollBarArrowWidth, |
|
BarHeight(bar)); |
|
} |
|
|
|
inline SDL_Rect ThumbRect(const UiScrollbar &bar, size_t selectedIndex, size_t numItems) |
|
{ |
|
constexpr int ThumbOffsetX = 3; |
|
const int thumbMaxY = BarHeight(bar) - bar.m_thumb.height(); |
|
const int thumbY = static_cast<int>(selectedIndex * thumbMaxY / (numItems - 1)); |
|
|
|
return MakeSdlRect( |
|
bar.m_rect.x + ThumbOffsetX, |
|
bar.m_rect.y + bar.m_arrow[0].height() + thumbY, |
|
bar.m_rect.w - ThumbOffsetX, |
|
bar.m_thumb.height()); |
|
} |
|
|
|
void LoadScrollBar(); |
|
void UnloadScrollBar(); |
|
|
|
} // namespace devilution
|
|
|