Use more explicit vector math via method overloads
This commit is contained in:
parent
a4b1be1da5
commit
87462fd7b0
|
@ -79,19 +79,68 @@ struct Vec2i
|
||||||
: x(x), y(y)
|
: x(x), y(y)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
explicit Vec2i(int xy)
|
||||||
|
: x(xy), y(xy)
|
||||||
|
{}
|
||||||
|
|
||||||
bool operator==(const Vec2i &other) const
|
bool operator==(const Vec2i &other) const
|
||||||
{
|
{
|
||||||
return x == other.x && y == other.y;
|
return x == other.x && y == other.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec2i &operator+=(const Vec2i &other)
|
Vec2i &operator+=(const Vec2i &value)
|
||||||
{
|
{
|
||||||
x += other.x;
|
x += value.x;
|
||||||
y += other.y;
|
y += value.y;
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vec2i &operator-=(const Vec2i &value)
|
||||||
|
{
|
||||||
|
x -= value.x;
|
||||||
|
y -= value.y;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec2i operator+(const Vec2i &value) const
|
||||||
|
{
|
||||||
|
return Vec2i(x + value.x, y + value.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec2i operator-(const Vec2i &value) const
|
||||||
|
{
|
||||||
|
return Vec2i(x - value.x, y - value.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
Vec2i operator*(T value) const
|
||||||
|
{
|
||||||
|
return Vec2i(x * value, y * value);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
Vec2i operator/(T value) const
|
||||||
|
{
|
||||||
|
return Vec2i(x / value, y / value);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec2i operator%(int value) const
|
||||||
|
{
|
||||||
|
return Vec2i(x % value, y % value);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec2i operator-() const
|
||||||
|
{
|
||||||
|
return Vec2i(-x, -y);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec2i operator!() const
|
||||||
|
{
|
||||||
|
return Vec2i(!x, !y);
|
||||||
|
}
|
||||||
|
|
||||||
operator Vec2() const
|
operator Vec2() const
|
||||||
{
|
{
|
||||||
return Vec2(x, y);
|
return Vec2(x, y);
|
||||||
|
@ -113,6 +162,14 @@ struct IntRect : SDL_Rect
|
||||||
this->h = h;
|
this->h = h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IntRect(const Vec2i &pos, const Vec2i &size)
|
||||||
|
{
|
||||||
|
x = pos.x;
|
||||||
|
y = pos.y;
|
||||||
|
w = size.x;
|
||||||
|
h = size.y;
|
||||||
|
}
|
||||||
|
|
||||||
bool operator==(const IntRect &other) const
|
bool operator==(const IntRect &other) const
|
||||||
{
|
{
|
||||||
return (x == other.x && y == other.y &&
|
return (x == other.x && y == other.y &&
|
||||||
|
@ -129,10 +186,16 @@ struct IntRect : SDL_Rect
|
||||||
return Vec2i(w, h);
|
return Vec2i(w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
operator SDL_Rect() const
|
void setPos(const Vec2i &value)
|
||||||
{
|
{
|
||||||
SDL_Rect r = { x, y, w, h };
|
x = value.x;
|
||||||
return r;
|
y = value.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSize(const Vec2i &value)
|
||||||
|
{
|
||||||
|
w = value.x;
|
||||||
|
h = value.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool encloses(const IntRect &o) const
|
bool encloses(const IntRect &o) const
|
||||||
|
@ -176,35 +239,10 @@ struct FloatRect
|
||||||
Vec2 topRight() const { return Vec2(x+w, y); }
|
Vec2 topRight() const { return Vec2(x+w, y); }
|
||||||
Vec2 bottomRight() const { return Vec2(x+w, y+h); }
|
Vec2 bottomRight() const { return Vec2(x+w, y+h); }
|
||||||
|
|
||||||
void shrinkHalf()
|
|
||||||
{
|
|
||||||
x += 0.5;
|
|
||||||
y += 0.5;
|
|
||||||
w -= 1.0;
|
|
||||||
h -= 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
FloatRect vFlipped() const
|
|
||||||
{
|
|
||||||
return FloatRect(x, y+h, w, -h);
|
|
||||||
}
|
|
||||||
|
|
||||||
FloatRect hFlipped() const
|
FloatRect hFlipped() const
|
||||||
{
|
{
|
||||||
return FloatRect(x+w, y, -w, h);
|
return FloatRect(x+w, y, -w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec2 corner(int i) const
|
|
||||||
{
|
|
||||||
switch (i)
|
|
||||||
{
|
|
||||||
case 0 : return topLeft();
|
|
||||||
case 1 : return topRight();
|
|
||||||
case 2 : return bottomRight();
|
|
||||||
case 3 : return bottomLeft();
|
|
||||||
default : return Vec2();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Value between 0 and 255 with internal
|
/* Value between 0 and 255 with internal
|
||||||
|
|
|
@ -90,8 +90,8 @@ struct PlanePrivate
|
||||||
if (gl.npot_repeat)
|
if (gl.npot_repeat)
|
||||||
{
|
{
|
||||||
FloatRect srcRect;
|
FloatRect srcRect;
|
||||||
srcRect.x = (sceneGeo.xOrigin + ox) / zoomX;
|
srcRect.x = (sceneGeo.orig.x + ox) / zoomX;
|
||||||
srcRect.y = (sceneGeo.yOrigin + oy) / zoomY;
|
srcRect.y = (sceneGeo.orig.y + oy) / zoomY;
|
||||||
srcRect.w = sceneGeo.rect.w / zoomX;
|
srcRect.w = sceneGeo.rect.w / zoomX;
|
||||||
srcRect.h = sceneGeo.rect.h / zoomY;
|
srcRect.h = sceneGeo.rect.h / zoomY;
|
||||||
|
|
||||||
|
|
|
@ -23,10 +23,7 @@
|
||||||
#include "sharedstate.h"
|
#include "sharedstate.h"
|
||||||
|
|
||||||
Scene::Scene()
|
Scene::Scene()
|
||||||
{
|
{}
|
||||||
geometry.xOrigin = geometry.yOrigin = 0;
|
|
||||||
geometry.rect = IntRect();
|
|
||||||
}
|
|
||||||
|
|
||||||
Scene::~Scene()
|
Scene::~Scene()
|
||||||
{
|
{
|
||||||
|
|
10
src/scene.h
10
src/scene.h
|
@ -39,8 +39,16 @@ class Scene
|
||||||
public:
|
public:
|
||||||
struct Geometry
|
struct Geometry
|
||||||
{
|
{
|
||||||
int xOrigin, yOrigin;
|
/* Position and size relative to parent */
|
||||||
IntRect rect;
|
IntRect rect;
|
||||||
|
|
||||||
|
/* Origin of contents */
|
||||||
|
Vec2i orig;
|
||||||
|
|
||||||
|
Vec2i offset() const
|
||||||
|
{
|
||||||
|
return rect.pos() - orig;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Scene();
|
Scene();
|
||||||
|
|
|
@ -57,7 +57,7 @@ struct SpritePrivate
|
||||||
NormValue opacity;
|
NormValue opacity;
|
||||||
BlendType blendType;
|
BlendType blendType;
|
||||||
|
|
||||||
SDL_Rect sceneRect;
|
IntRect sceneRect;
|
||||||
Vec2i sceneOrig;
|
Vec2i sceneOrig;
|
||||||
|
|
||||||
/* Would this sprite be visible on
|
/* Would this sprite be visible on
|
||||||
|
@ -183,9 +183,8 @@ struct SpritePrivate
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_Rect self;
|
IntRect self;
|
||||||
self.x = trans.getPosition().x - (trans.getOrigin().x + sceneOrig.x);
|
self.setPos(trans.getPositionI() - (trans.getOriginI() + sceneOrig));
|
||||||
self.y = trans.getPosition().y - (trans.getOrigin().y + sceneOrig.y);
|
|
||||||
self.w = bitmap->width();
|
self.w = bitmap->width();
|
||||||
self.h = bitmap->height();
|
self.h = bitmap->height();
|
||||||
|
|
||||||
|
@ -577,15 +576,10 @@ void Sprite::onGeometryChange(const Scene::Geometry &geo)
|
||||||
{
|
{
|
||||||
/* Offset at which the sprite will be drawn
|
/* Offset at which the sprite will be drawn
|
||||||
* relative to screen origin */
|
* relative to screen origin */
|
||||||
int xOffset = geo.rect.x - geo.xOrigin;
|
p->trans.setGlobalOffset(geo.offset());
|
||||||
int yOffset = geo.rect.y - geo.yOrigin;
|
|
||||||
|
|
||||||
p->trans.setGlobalOffset(xOffset, yOffset);
|
p->sceneRect.setSize(geo.rect.size());
|
||||||
|
p->sceneOrig = geo.orig;
|
||||||
p->sceneRect.w = geo.rect.w;
|
|
||||||
p->sceneRect.h = geo.rect.h;
|
|
||||||
p->sceneOrig.x = geo.xOrigin;
|
|
||||||
p->sceneOrig.y = geo.yOrigin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sprite::releaseResources()
|
void Sprite::releaseResources()
|
||||||
|
|
|
@ -442,15 +442,13 @@ struct TilemapPrivate
|
||||||
|
|
||||||
void updateSceneGeometry(const Scene::Geometry &geo)
|
void updateSceneGeometry(const Scene::Geometry &geo)
|
||||||
{
|
{
|
||||||
elem.sceneOffset.x = geo.rect.x - geo.xOrigin;
|
elem.sceneOffset = geo.offset();
|
||||||
elem.sceneOffset.y = geo.rect.y - geo.yOrigin;
|
|
||||||
elem.sceneGeo = geo;
|
elem.sceneGeo = geo;
|
||||||
}
|
}
|
||||||
|
|
||||||
void updatePosition()
|
void updatePosition()
|
||||||
{
|
{
|
||||||
dispPos.x = -(offset.x - viewpPos.x * 32) + elem.sceneOffset.x;
|
dispPos = -(offset - viewpPos * 32) + elem.sceneOffset;
|
||||||
dispPos.y = -(offset.y - viewpPos.y * 32) + elem.sceneOffset.y;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void invalidateAtlasSize()
|
void invalidateAtlasSize()
|
||||||
|
|
|
@ -366,11 +366,10 @@ struct TilemapVXPrivate : public ViewportElement, TileAtlasVX::Reader
|
||||||
|
|
||||||
void onGeometryChange(const Scene::Geometry &geo)
|
void onGeometryChange(const Scene::Geometry &geo)
|
||||||
{
|
{
|
||||||
mapViewp.w = (geo.rect.w / 32) + !!(geo.rect.w % 32) + 1;
|
const Vec2i geoSize = geo.rect.size();
|
||||||
mapViewp.h = (geo.rect.h / 32) + !!(geo.rect.h % 32) + 1;
|
mapViewp.setSize((geoSize / 32) + !!(geoSize % 32) + Vec2i(1));
|
||||||
|
|
||||||
sceneOffset.x = geo.rect.x - geo.xOrigin;
|
sceneOffset = geo.offset();
|
||||||
sceneOffset.y = geo.rect.y - geo.yOrigin;
|
|
||||||
sceneGeo = geo;
|
sceneGeo = geo;
|
||||||
|
|
||||||
buffersDirty = true;
|
buffersDirty = true;
|
||||||
|
|
|
@ -58,7 +58,6 @@ public:
|
||||||
Transform()
|
Transform()
|
||||||
: scale(1, 1),
|
: scale(1, 1),
|
||||||
rotation(0),
|
rotation(0),
|
||||||
xOffset(0), yOffset(0),
|
|
||||||
dirty(true)
|
dirty(true)
|
||||||
{
|
{
|
||||||
memset(matrix, 0, sizeof(matrix));
|
memset(matrix, 0, sizeof(matrix));
|
||||||
|
@ -68,38 +67,47 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec2 &getPosition() { return position; }
|
Vec2 &getPosition() { return position; }
|
||||||
Vec2 &getScale() { return scale; }
|
|
||||||
Vec2 &getOrigin() { return origin; }
|
Vec2 &getOrigin() { return origin; }
|
||||||
|
Vec2 &getScale() { return scale; }
|
||||||
float getRotation() { return rotation; }
|
float getRotation() { return rotation; }
|
||||||
|
|
||||||
|
Vec2i getPositionI() const
|
||||||
|
{
|
||||||
|
return Vec2i(position.x, position.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec2i getOriginI() const
|
||||||
|
{
|
||||||
|
return Vec2i(origin.x, origin.y);
|
||||||
|
}
|
||||||
|
|
||||||
void setPosition(const Vec2 &value)
|
void setPosition(const Vec2 &value)
|
||||||
{
|
{
|
||||||
position = value;
|
position = value;
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setScale(const Vec2 &value)
|
|
||||||
{
|
|
||||||
scale = value;
|
|
||||||
dirty = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setOrigin(const Vec2 &value)
|
void setOrigin(const Vec2 &value)
|
||||||
{
|
{
|
||||||
origin = value;
|
origin = value;
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setScale(const Vec2 &value)
|
||||||
|
{
|
||||||
|
scale = value;
|
||||||
|
dirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
void setRotation(float value)
|
void setRotation(float value)
|
||||||
{
|
{
|
||||||
rotation = value;
|
rotation = value;
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setGlobalOffset(int x, int y)
|
void setGlobalOffset(const Vec2i &value)
|
||||||
{
|
{
|
||||||
xOffset = x;
|
offset = value;
|
||||||
yOffset = y;
|
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,8 +137,8 @@ private:
|
||||||
float syc = scale.y * cosine;
|
float syc = scale.y * cosine;
|
||||||
float sxs = scale.x * sine;
|
float sxs = scale.x * sine;
|
||||||
float sys = scale.y * sine;
|
float sys = scale.y * sine;
|
||||||
float tx = -origin.x * sxc - origin.y * sys + position.x + xOffset;
|
float tx = -origin.x * sxc - origin.y * sys + position.x + offset.x;
|
||||||
float ty = origin.x * sxs - origin.y * syc + position.y + yOffset;
|
float ty = origin.x * sxs - origin.y * syc + position.y + offset.y;
|
||||||
|
|
||||||
matrix[0] = sxc;
|
matrix[0] = sxc;
|
||||||
matrix[1] = -sxs;
|
matrix[1] = -sxs;
|
||||||
|
@ -146,7 +154,7 @@ private:
|
||||||
float rotation;
|
float rotation;
|
||||||
|
|
||||||
/* Silently added to position */
|
/* Silently added to position */
|
||||||
int xOffset, yOffset;
|
Vec2i offset;
|
||||||
|
|
||||||
float matrix[16];
|
float matrix[16];
|
||||||
|
|
||||||
|
|
|
@ -144,8 +144,8 @@ void Viewport::update()
|
||||||
Flashable::update();
|
Flashable::update();
|
||||||
}
|
}
|
||||||
|
|
||||||
DEF_ATTR_RD_SIMPLE(Viewport, OX, int, geometry.xOrigin)
|
DEF_ATTR_RD_SIMPLE(Viewport, OX, int, geometry.orig.x)
|
||||||
DEF_ATTR_RD_SIMPLE(Viewport, OY, int, geometry.yOrigin)
|
DEF_ATTR_RD_SIMPLE(Viewport, OY, int, geometry.orig.y)
|
||||||
|
|
||||||
DEF_ATTR_SIMPLE(Viewport, Rect, Rect&, *p->rect)
|
DEF_ATTR_SIMPLE(Viewport, Rect, Rect&, *p->rect)
|
||||||
DEF_ATTR_SIMPLE(Viewport, Color, Color&, *p->color)
|
DEF_ATTR_SIMPLE(Viewport, Color, Color&, *p->color)
|
||||||
|
@ -155,10 +155,10 @@ void Viewport::setOX(int value)
|
||||||
{
|
{
|
||||||
guardDisposed();
|
guardDisposed();
|
||||||
|
|
||||||
if (geometry.xOrigin == value)
|
if (geometry.orig.x == value)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
geometry.xOrigin = value;
|
geometry.orig.x = value;
|
||||||
notifyGeometryChange();
|
notifyGeometryChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,10 +166,10 @@ void Viewport::setOY(int value)
|
||||||
{
|
{
|
||||||
guardDisposed();
|
guardDisposed();
|
||||||
|
|
||||||
if (geometry.yOrigin == value)
|
if (geometry.orig.y == value)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
geometry.yOrigin = value;
|
geometry.orig.y = value;
|
||||||
notifyGeometryChange();
|
notifyGeometryChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -471,16 +471,15 @@ struct WindowPrivate
|
||||||
i += TileQuads::buildFrame(effectRect, cursorVert.vert);
|
i += TileQuads::buildFrame(effectRect, cursorVert.vert);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Scroll arrows */
|
/* Scroll arrow position: Top Bottom X, Left Right Y */
|
||||||
int scrollLRY = (size.y - 16) / 2;
|
const Vec2i scroll = (size - Vec2i(16)) / 2;
|
||||||
int scrollTBX = (size.x - 16) / 2;
|
|
||||||
|
|
||||||
Sides<IntRect> scrollArrows;
|
Sides<IntRect> scrollArrows;
|
||||||
|
|
||||||
scrollArrows.l = IntRect(4, scrollLRY, 8, 16);
|
scrollArrows.l = IntRect(4, scroll.y, 8, 16);
|
||||||
scrollArrows.r = IntRect(size.x - 12, scrollLRY, 8, 16);
|
scrollArrows.r = IntRect(size.x - 12, scroll.y, 8, 16);
|
||||||
scrollArrows.t = IntRect(scrollTBX, 4, 16, 8);
|
scrollArrows.t = IntRect(scroll.x, 4, 16, 8);
|
||||||
scrollArrows.b = IntRect(scrollTBX, size.y - 12, 16, 8);
|
scrollArrows.b = IntRect(scroll.x, size.y - 12, 16, 8);
|
||||||
|
|
||||||
if (contents)
|
if (contents)
|
||||||
{
|
{
|
||||||
|
@ -557,13 +556,10 @@ struct WindowPrivate
|
||||||
if (size == Vec2i(0, 0))
|
if (size == Vec2i(0, 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Vec2i trans(position.x + sceneOffset.x,
|
|
||||||
position.y + sceneOffset.y);
|
|
||||||
|
|
||||||
SimpleAlphaShader &shader = shState->shaders().simpleAlpha;
|
SimpleAlphaShader &shader = shState->shaders().simpleAlpha;
|
||||||
shader.bind();
|
shader.bind();
|
||||||
shader.applyViewportProj();
|
shader.applyViewportProj();
|
||||||
shader.setTranslation(trans);
|
shader.setTranslation(position + sceneOffset);
|
||||||
|
|
||||||
if (useBaseTex)
|
if (useBaseTex)
|
||||||
{
|
{
|
||||||
|
@ -598,12 +594,11 @@ struct WindowPrivate
|
||||||
controlsVertDirty = false;
|
controlsVertDirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Actual on screen coordinates */
|
/* Effective on screen coordinates */
|
||||||
int effectX = position.x + sceneOffset.x;
|
const Vec2i efPos = position + sceneOffset;
|
||||||
int effectY = position.y + sceneOffset.y;
|
|
||||||
|
|
||||||
IntRect windowRect(effectX, effectY, size.x, size.y);
|
const IntRect windowRect(efPos, size);
|
||||||
IntRect contentsRect(effectX+16, effectY+16, size.x-32, size.y-32);
|
const IntRect contentsRect(efPos + Vec2i(16), size - Vec2i(32));
|
||||||
|
|
||||||
glState.scissorTest.pushSet(true);
|
glState.scissorTest.pushSet(true);
|
||||||
glState.scissorBox.push();
|
glState.scissorBox.push();
|
||||||
|
@ -615,7 +610,7 @@ struct WindowPrivate
|
||||||
|
|
||||||
if (!nullOrDisposed(windowskin))
|
if (!nullOrDisposed(windowskin))
|
||||||
{
|
{
|
||||||
shader.setTranslation(Vec2i(effectX, effectY));
|
shader.setTranslation(efPos);
|
||||||
|
|
||||||
/* Draw arrows / cursors */
|
/* Draw arrows / cursors */
|
||||||
windowskin->bindTex(shader);
|
windowskin->bindTex(shader);
|
||||||
|
@ -631,9 +626,7 @@ struct WindowPrivate
|
||||||
/* Draw contents bitmap */
|
/* Draw contents bitmap */
|
||||||
glState.scissorBox.setIntersect(contentsRect);
|
glState.scissorBox.setIntersect(contentsRect);
|
||||||
|
|
||||||
effectX += 16-contentsOffset.x;
|
shader.setTranslation(efPos + (Vec2i(16) - contentsOffset));
|
||||||
effectY += 16-contentsOffset.y;
|
|
||||||
shader.setTranslation(Vec2i(effectX, effectY));
|
|
||||||
|
|
||||||
contents->bindTex(shader);
|
contents->bindTex(shader);
|
||||||
contentsQuad.draw();
|
contentsQuad.draw();
|
||||||
|
@ -876,8 +869,7 @@ void Window::draw()
|
||||||
|
|
||||||
void Window::onGeometryChange(const Scene::Geometry &geo)
|
void Window::onGeometryChange(const Scene::Geometry &geo)
|
||||||
{
|
{
|
||||||
p->sceneOffset.x = geo.rect.x - geo.xOrigin;
|
p->sceneOffset = geo.offset();
|
||||||
p->sceneOffset.y = geo.rect.y - geo.yOrigin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::setZ(int value)
|
void Window::setZ(int value)
|
||||||
|
|
|
@ -506,15 +506,15 @@ struct WindowVXPrivate
|
||||||
|
|
||||||
void rebuildCtrlVert()
|
void rebuildCtrlVert()
|
||||||
{
|
{
|
||||||
const int arrowTBX = (geo.w - 16) / 2;
|
/* Scroll arrow position: Top Bottom X, Left Right Y */
|
||||||
const int arrowLRY = (geo.h - 16) / 2;
|
const Vec2i arrow = (geo.size() - Vec2i(16)) / 2;
|
||||||
|
|
||||||
const Sides<FloatRect> arrowPos =
|
const Sides<FloatRect> arrowPos =
|
||||||
{
|
{
|
||||||
FloatRect( 4, arrowLRY, 8, 16 ), /* Left */
|
FloatRect( 4, arrow.y, 8, 16 ), /* Left */
|
||||||
FloatRect( geo.w - 12, arrowLRY, 8, 16 ), /* Right */
|
FloatRect( geo.w - 12, arrow.y, 8, 16 ), /* Right */
|
||||||
FloatRect( arrowTBX, 4, 16, 8 ), /* Top */
|
FloatRect( arrow.x, 4, 16, 8 ), /* Top */
|
||||||
FloatRect( arrowTBX, geo.h - 12, 16, 8 ) /* Bottom */
|
FloatRect( arrow.x, geo.h - 12, 16, 8 ) /* Bottom */
|
||||||
};
|
};
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
|
@ -538,7 +538,7 @@ struct WindowVXPrivate
|
||||||
|
|
||||||
if (pause)
|
if (pause)
|
||||||
{
|
{
|
||||||
const FloatRect pausePos(arrowTBX, geo.h - 16, 16, 16);
|
const FloatRect pausePos(arrow.x, geo.h - 16, 16, 16);
|
||||||
pauseVert = &vert[i*4];
|
pauseVert = &vert[i*4];
|
||||||
|
|
||||||
i += Quad::setTexPosRect(&vert[i*4], pauseSrc[0], pausePos);
|
i += Quad::setTexPosRect(&vert[i*4], pauseSrc[0], pausePos);
|
||||||
|
@ -730,8 +730,7 @@ struct WindowVXPrivate
|
||||||
bool windowskinValid = !nullOrDisposed(windowskin);
|
bool windowskinValid = !nullOrDisposed(windowskin);
|
||||||
bool contentsValid = !nullOrDisposed(contents);
|
bool contentsValid = !nullOrDisposed(contents);
|
||||||
|
|
||||||
Vec2i trans(geo.x + sceneOffset.x,
|
Vec2i trans = geo.pos() + sceneOffset;
|
||||||
geo.y + sceneOffset.y);
|
|
||||||
|
|
||||||
SimpleAlphaShader &shader = shState->shaders().simpleAlpha;
|
SimpleAlphaShader &shader = shState->shaders().simpleAlpha;
|
||||||
shader.bind();
|
shader.bind();
|
||||||
|
@ -764,8 +763,7 @@ struct WindowVXPrivate
|
||||||
{
|
{
|
||||||
/* Translate cliprect from local into screen space */
|
/* Translate cliprect from local into screen space */
|
||||||
IntRect clip = clipRect;
|
IntRect clip = clipRect;
|
||||||
clip.x += trans.x;
|
clip.setPos(clip.pos() + trans);
|
||||||
clip.y += trans.y;
|
|
||||||
|
|
||||||
glState.scissorBox.push();
|
glState.scissorBox.push();
|
||||||
glState.scissorTest.pushSet(true);
|
glState.scissorTest.pushSet(true);
|
||||||
|
@ -773,11 +771,10 @@ struct WindowVXPrivate
|
||||||
if (rgssVer >= 3)
|
if (rgssVer >= 3)
|
||||||
glState.scissorBox.setIntersect(clip);
|
glState.scissorBox.setIntersect(clip);
|
||||||
else
|
else
|
||||||
glState.scissorBox.setIntersect(IntRect(trans.x, trans.y, geo.w, geo.h));
|
glState.scissorBox.setIntersect(IntRect(trans, geo.size()));
|
||||||
|
|
||||||
IntRect pad = padRect;
|
IntRect pad = padRect;
|
||||||
pad.x += trans.x;
|
pad.setPos(pad.pos() + trans);
|
||||||
pad.y += trans.y;
|
|
||||||
|
|
||||||
if (drawCursor)
|
if (drawCursor)
|
||||||
{
|
{
|
||||||
|
@ -786,10 +783,7 @@ struct WindowVXPrivate
|
||||||
contTrans.y += cursorRect->y;
|
contTrans.y += cursorRect->y;
|
||||||
|
|
||||||
if (rgssVer >= 3)
|
if (rgssVer >= 3)
|
||||||
{
|
contTrans -= contentsOff;
|
||||||
contTrans.x -= contentsOff.x;
|
|
||||||
contTrans.y -= contentsOff.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
shader.setTranslation(contTrans);
|
shader.setTranslation(contTrans);
|
||||||
|
|
||||||
|
@ -804,8 +798,7 @@ struct WindowVXPrivate
|
||||||
glState.scissorBox.setIntersect(clip);
|
glState.scissorBox.setIntersect(clip);
|
||||||
|
|
||||||
Vec2i contTrans = pad.pos();
|
Vec2i contTrans = pad.pos();
|
||||||
contTrans.x -= contentsOff.x;
|
contTrans -= contentsOff;
|
||||||
contTrans.y -= contentsOff.y;
|
|
||||||
shader.setTranslation(contTrans);
|
shader.setTranslation(contTrans);
|
||||||
|
|
||||||
TEX::setSmooth(false); // XXX
|
TEX::setSmooth(false); // XXX
|
||||||
|
@ -1105,8 +1098,7 @@ void WindowVX::draw()
|
||||||
|
|
||||||
void WindowVX::onGeometryChange(const Scene::Geometry &geo)
|
void WindowVX::onGeometryChange(const Scene::Geometry &geo)
|
||||||
{
|
{
|
||||||
p->sceneOffset.x = geo.rect.x - geo.xOrigin;
|
p->sceneOffset = geo.offset();
|
||||||
p->sceneOffset.y = geo.rect.y - geo.yOrigin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowVX::releaseResources()
|
void WindowVX::releaseResources()
|
||||||
|
|
Loading…
Reference in New Issue