You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.4 KiB
C++
64 lines
1.4 KiB
C++
#include "backgroundimage.hpp"
|
|
|
|
#include <MyGUI_Gui.h>
|
|
|
|
namespace MWGui
|
|
{
|
|
|
|
void BackgroundImage::setBackgroundImage (const std::string& image, bool fixedRatio, bool stretch)
|
|
{
|
|
if (mChild)
|
|
{
|
|
MyGUI::Gui::getInstance().destroyWidget(mChild);
|
|
mChild = nullptr;
|
|
}
|
|
if (!stretch)
|
|
{
|
|
setImageTexture("black");
|
|
|
|
if (fixedRatio)
|
|
mAspect = 4.0/3.0;
|
|
else
|
|
mAspect = 0; // TODO
|
|
|
|
mChild = createWidgetReal<MyGUI::ImageBox>("ImageBox",
|
|
MyGUI::FloatCoord(0,0,1,1), MyGUI::Align::Default);
|
|
mChild->setImageTexture(image);
|
|
|
|
adjustSize();
|
|
}
|
|
else
|
|
{
|
|
mAspect = 0;
|
|
setImageTexture(image);
|
|
}
|
|
}
|
|
|
|
void BackgroundImage::adjustSize()
|
|
{
|
|
if (mAspect == 0)
|
|
return;
|
|
|
|
MyGUI::IntSize screenSize = getSize();
|
|
|
|
int leftPadding = std::max(0, static_cast<int>(screenSize.width - screenSize.height * mAspect) / 2);
|
|
int topPadding = std::max(0, static_cast<int>(screenSize.height - screenSize.width / mAspect) / 2);
|
|
|
|
mChild->setCoord(leftPadding, topPadding, screenSize.width - leftPadding*2, screenSize.height - topPadding*2);
|
|
}
|
|
|
|
void BackgroundImage::setSize (const MyGUI::IntSize& _value)
|
|
{
|
|
MyGUI::Widget::setSize (_value);
|
|
adjustSize();
|
|
}
|
|
|
|
void BackgroundImage::setCoord (const MyGUI::IntCoord& _value)
|
|
{
|
|
MyGUI::Widget::setCoord (_value);
|
|
adjustSize();
|
|
}
|
|
|
|
|
|
}
|