mirror of
https://github.com/Almamu/linux-wallpaperengine.git
synced 2025-07-14 05:12:25 +08:00
Implemented proper alignment for images
Signed-off-by: Alexis Maiquez <almamu@almamu.com>
This commit is contained in:
parent
b32275052f
commit
d8d05363a9
@ -20,18 +20,34 @@ CImage::CImage (CScene* scene, Core::Objects::CImage* image) :
|
||||
glm::vec2 size = this->getSize ();
|
||||
glm::vec3 scale = this->getImage ()->getScale ();
|
||||
|
||||
// depending on the alignment these values might change, for now just support center
|
||||
if (this->getImage ()->getAlignment () == "center")
|
||||
glm::vec2 scaledSize = size * glm::vec2 (scale);
|
||||
|
||||
// calculate the center and shift from there
|
||||
this->m_pos.x = (-scene_width / 2) + (origin.x - (scaledSize.x / 2));
|
||||
this->m_pos.z = (-scene_width / 2) + (origin.x + (scaledSize.x / 2));
|
||||
this->m_pos.y = (-scene_height / 2) + origin.y + (scaledSize.y / 2);
|
||||
this->m_pos.w = (-scene_height / 2) + (origin.y - (scaledSize.y / 2));
|
||||
|
||||
if (this->getImage ()->getAlignment ().find ("top") != std::string::npos)
|
||||
{
|
||||
// calculate the real position of the image
|
||||
this->m_pos.x = (-scene_width / 2) + (origin.x - (size.x * scale.x / 2));
|
||||
this->m_pos.z = (-scene_width / 2) + (origin.x + (size.x * scale.x / 2));
|
||||
this->m_pos.y = (-scene_height / 2) + origin.y + (size.y * scale.y / 2);
|
||||
this->m_pos.w = (-scene_height / 2) + (origin.y - (size.y * scale.y / 2));
|
||||
this->m_pos.y -= scaledSize.y / 2;
|
||||
this->m_pos.w -= scaledSize.y / 2;
|
||||
}
|
||||
else
|
||||
else if (this->getImage ()->getAlignment ().find ("bottom") != std::string::npos)
|
||||
{
|
||||
throw std::runtime_error ("Only centered images are supported for now!");
|
||||
this->m_pos.y += scaledSize.y / 2;
|
||||
this->m_pos.w += scaledSize.y / 2;
|
||||
}
|
||||
|
||||
if (this->getImage ()->getAlignment ().find ("left") != std::string::npos)
|
||||
{
|
||||
this->m_pos.x += scaledSize.x / 2;
|
||||
this->m_pos.z += scaledSize.x / 2;
|
||||
}
|
||||
else if (this->getImage ()->getAlignment ().find ("right") != std::string::npos)
|
||||
{
|
||||
this->m_pos.x -= scaledSize.x / 2;
|
||||
this->m_pos.z -= scaledSize.x / 2;
|
||||
}
|
||||
|
||||
// detect texture (if any)
|
||||
@ -141,8 +157,8 @@ CImage::CImage (CScene* scene, Core::Objects::CImage* image) :
|
||||
while (x < size.x) x <<= 1;
|
||||
while (y < size.y) y <<= 1;
|
||||
|
||||
width = size.x * scale.x / x;
|
||||
height = size.y * scale.y / y;
|
||||
width = scaledSize.x / x;
|
||||
height = scaledSize.y / y;
|
||||
}
|
||||
|
||||
float x = 0.0f;
|
||||
|
Loading…
Reference in New Issue
Block a user