Fix missing item images clipping in formspecs (#8652)

* Fix clipping of itemimage

* Code style

* More code styling
This commit is contained in:
Pierre-Yves Rollo 2019-07-26 19:44:29 +02:00 committed by SmallJoker
parent a8446d29e8
commit c3daf2a8be

@ -649,10 +649,31 @@ void drawItemStack(video::IVideoDriver *driver,
core::rect<s32> oldViewPort = driver->getViewPort(); core::rect<s32> oldViewPort = driver->getViewPort();
core::matrix4 oldProjMat = driver->getTransform(video::ETS_PROJECTION); core::matrix4 oldProjMat = driver->getTransform(video::ETS_PROJECTION);
core::matrix4 oldViewMat = driver->getTransform(video::ETS_VIEW); core::matrix4 oldViewMat = driver->getTransform(video::ETS_VIEW);
core::rect<s32> viewrect = rect;
if (clip)
viewrect.clipAgainst(*clip);
core::matrix4 ProjMatrix; core::matrix4 ProjMatrix;
ProjMatrix.buildProjectionMatrixOrthoLH(2, 2, -1, 100); ProjMatrix.buildProjectionMatrixOrthoLH(2.0f, 2.0f, -1.0f, 100.0f);
core::matrix4 ViewMatrix;
ViewMatrix.buildProjectionMatrixOrthoLH(
2.0f * viewrect.getWidth() / rect.getWidth(),
2.0f * viewrect.getHeight() / rect.getHeight(),
-1.0f,
100.0f);
ViewMatrix.setTranslation(core::vector3df(
1.0f * (rect.LowerRightCorner.X + rect.UpperLeftCorner.X -
viewrect.LowerRightCorner.X - viewrect.UpperLeftCorner.X) /
viewrect.getWidth(),
1.0f * (viewrect.LowerRightCorner.Y + viewrect.UpperLeftCorner.Y -
rect.LowerRightCorner.Y - rect.UpperLeftCorner.Y) /
viewrect.getHeight(),
0.0f));
driver->setTransform(video::ETS_PROJECTION, ProjMatrix); driver->setTransform(video::ETS_PROJECTION, ProjMatrix);
driver->setTransform(video::ETS_VIEW, ProjMatrix); driver->setTransform(video::ETS_VIEW, ViewMatrix);
core::matrix4 matrix; core::matrix4 matrix;
matrix.makeIdentity(); matrix.makeIdentity();
@ -662,7 +683,7 @@ void drawItemStack(video::IVideoDriver *driver,
} }
driver->setTransform(video::ETS_WORLD, matrix); driver->setTransform(video::ETS_WORLD, matrix);
driver->setViewPort(rect); driver->setViewPort(viewrect);
video::SColor basecolor = video::SColor basecolor =
client->idef()->getItemstackColor(item, client); client->idef()->getItemstackColor(item, client);