1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-17 20:58:07 +02:00

Merge pull request #1675 from rilian-la-te/scholar-infobox

Fix #1385 and similar
This commit is contained in:
Ivan Savenko 2023-03-13 12:49:30 +02:00 committed by GitHub
commit e1310f88e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 20 deletions

View File

@ -1053,11 +1053,17 @@ void CPlayerInterface::showInfoDialog(EInfoWindowMode type, const std::string &t
{
return;
}
std::vector<std::shared_ptr<CComponent>> intComps;
for (auto & component : components)
intComps.push_back(std::make_shared<CComponent>(component));
showInfoDialog(text,intComps,soundID);
std::vector<Component> vect = components; //I do not know currently how to avoid copy here
do
{
std::vector<Component> sender = {vect.begin(), vect.begin() + std::min(vect.size(), static_cast<size_t>(8))};
std::vector<std::shared_ptr<CComponent>> intComps;
for (auto & component : sender)
intComps.push_back(std::make_shared<CComponent>(component));
showInfoDialog(text,intComps,soundID);
vect.erase(vect.begin(), vect.begin() + std::min(vect.size(), static_cast<size_t>(8)));
}
while(!vect.empty());
}
void CPlayerInterface::showInfoDialog(const std::string & text, std::shared_ptr<CComponent> component)

View File

@ -217,17 +217,6 @@ CInfoBar::VisibleComponentInfo::VisibleComponentInfo(const std::vector<Component
text = std::make_shared<CTextBox>(message, textRect, 0, font, ETextAlignment::CENTER, Colors::WHITE);
}
int CInfoBar::getEstimatedComponentHeight(int numComps) const
{
if (numComps > 8) //Bigger than 8 components - return invalid value
return std::numeric_limits<int>::max();
else if (numComps > 2)
return 160; // 32px * 1 row + 20 to offset
else if (numComps)
return 118; // 118 px to offset
return 0;
}
void CInfoBar::playNewDaySound()
{
if(LOCPLINT->cb->getDate(Date::DAY_OF_WEEK) != 1) // not first day of the week
@ -402,7 +391,7 @@ void CInfoBar::pushComponents(const std::vector<Component> & components, std::st
void CInfoBar::prepareComponents(const std::vector<Component> & components, std::string message, int timer)
{
auto imageH = getEstimatedComponentHeight(components.size()) + (components.empty() ? 0 : 2 * CInfoBar::offset);
auto imageH = CMessage::getEstimatedComponentHeight(components.size()) + (components.empty() ? 0 : 2 * CInfoBar::offset);
auto textH = CMessage::guessHeight(message,CInfoBar::data_width - 2 * CInfoBar::offset, FONT_SMALL);
auto tinyH = CMessage::guessHeight(message,CInfoBar::data_width - 2 * CInfoBar::offset, FONT_TINY);
auto header = CMessage::guessHeader(message);

View File

@ -189,8 +189,5 @@ public:
/// check if infobar is showed something about pickups
bool showingComponents();
/// get estimated component height for InfoBar
int getEstimatedComponentHeight(int numComps) const;
};

View File

@ -221,6 +221,17 @@ int CMessage::guessHeight(const std::string & txt, int width, EFonts font)
return lineHeight * (int)lines.size();
}
int CMessage::getEstimatedComponentHeight(int numComps)
{
if (numComps > 8) //Bigger than 8 components - return invalid value
return std::numeric_limits<int>::max();
else if (numComps > 2)
return 160; // 32px * 1 row + 20 to offset
else if (numComps)
return 118; // 118 px to offset
return 0;
}
void CMessage::drawIWindow(CInfoWindow * ret, std::string text, PlayerColor player)
{
bool blitOr = false;

View File

@ -38,6 +38,7 @@ public:
/// For convenience
static int guessHeight(const std::string & string, int width, EFonts fnt);
static int getEstimatedComponentHeight(int numComps);
/// constructor
static void init();
/// destructor