Add option to scale image to percentage values
authorBlockMen <nmuelll@web.de>
Thu, 19 Sep 2013 18:39:19 +0000 (20:39 +0200)
committerKahrl <kahrl@gmx.net>
Fri, 20 Sep 2013 18:03:58 +0000 (20:03 +0200)
doc/lua_api.txt
src/hud.cpp

index 1cd6a134e29f60dba7c8c23af500db3a5c9c6af7..43c719a434dfc0280d1f84585bb7e717f5189980 100644 (file)
@@ -478,8 +478,10 @@ Note: Future revisions to the HUD API may be incompatible; the HUD API is still
 
 - image
     Displays an image on the HUD.
-       - scale: The scale of the image, with 1 being the original texture size.
-             Only the X coordinate scale is used.
+    - scale: The scale of the image, with 1 being the original texture size.
+             Only the X coordinate scale is used (positive values)
+             Negative values represent that percentage of the screen it
+             should take; e.g. x=-100 means 100% (width)
     - text: The name of the texture that is displayed.
     - alignment: The alignment of the image.
     - offset: offset in pixels from position.
index a0086b2f7bbbcc4a8d7d24a8c1a2a99a1f97d5e8..183f94e4905140d2402c19dbdb04143755bbecd7 100644 (file)
@@ -234,13 +234,16 @@ void Hud::drawLuaElements() {
                                const video::SColor color(255, 255, 255, 255);
                                const video::SColor colors[] = {color, color, color, color};
                                core::dimension2di imgsize(texture->getOriginalSize());
-                               core::rect<s32> rect(0, 0, imgsize.Width  * e->scale.X,
-                                                                              imgsize.Height * e->scale.X);
-                               rect += pos;
-                               v2s32 offset((e->align.X - 1.0) * ((imgsize.Width  * e->scale.X) / 2),
-                                            (e->align.Y - 1.0) * ((imgsize.Height * e->scale.X) / 2));
-                               rect += offset;
-                               rect += v2s32(e->offset.X, e->offset.Y);
+                               v2s32 dstsize(imgsize.Width * e->scale.X,
+                                             imgsize.Height * e->scale.Y);
+                               if (e->scale.X < 0)
+                                       dstsize.X = screensize.X * (e->scale.X * -0.01);
+                               if (e->scale.Y < 0)
+                                       dstsize.Y = screensize.Y * (e->scale.Y * -0.01);
+                               v2s32 offset((e->align.X - 1.0) * dstsize.X / 2,
+                                            (e->align.Y - 1.0) * dstsize.Y / 2);
+                               core::rect<s32> rect(0, 0, dstsize.X, dstsize.Y);
+                               rect += pos + offset + v2s32(e->offset.X, e->offset.Y);
                                driver->draw2DImage(texture, rect,
                                        core::rect<s32>(core::position2d<s32>(0,0), imgsize),
                                        NULL, colors, true);