summaryrefslogtreecommitdiff
path: root/unity-shared
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2014-09-24 02:46:40 +0200
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2014-09-24 02:46:40 +0200
commit85f535335b1ae316eee7971bb9049c08b8ecc37c (patch)
tree061f181731a39a9351bdd7e0bca01c0f1e422744 /unity-shared
parentd5518e6302eff102383a612bcecc3a3457e025f8 (diff)
CompizUtils: avoid matrix updates when only a texture size changes
(bzr r3806.12.11)
Diffstat (limited to 'unity-shared')
-rw-r--r--unity-shared/CompizUtils.cpp27
-rw-r--r--unity-shared/CompizUtils.h7
2 files changed, 19 insertions, 15 deletions
diff --git a/unity-shared/CompizUtils.cpp b/unity-shared/CompizUtils.cpp
index 53b08de82..3139f3725 100644
--- a/unity-shared/CompizUtils.cpp
+++ b/unity-shared/CompizUtils.cpp
@@ -39,7 +39,7 @@ SimpleTexture::SimpleTexture(GLTexture::List const& tex)
//
SimpleTextureQuad::SimpleTextureQuad()
- : scale(DEFAULT_SCALE)
+ : scale_(DEFAULT_SCALE)
{}
bool SimpleTextureQuad::SetTexture(SimpleTexture::Ptr const& simple_texture)
@@ -52,24 +52,27 @@ bool SimpleTextureQuad::SetTexture(SimpleTexture::Ptr const& simple_texture)
if (st && st->texture())
{
auto* tex = st->texture();
- CompPoint old_coords(quad.box.x(), quad.box.y());
- short invalid = std::numeric_limits<short>::min();
- quad.box.setGeometry(invalid, invalid, tex->width() * scale, tex->height() * scale);
- SetCoords(old_coords.x(), old_coords.y());
+ CompSize size(tex->width() * scale_, tex->height() * scale_);
+
+ if (quad.box.width() != size.width() || quad.box.height() != size.height())
+ {
+ quad.box.setSize(size);
+ UpdateMatrix();
+ }
}
return true;
}
-bool SimpleTextureQuad::SetScale(float s)
+bool SimpleTextureQuad::SetScale(double s)
{
- if (!st || scale == s)
+ if (!st || scale_ == s)
return false;
- scale = s;
+ scale_ = s;
auto* tex = st->texture();
- quad.box.setWidth(tex->width() * scale);
- quad.box.setHeight(tex->height() * scale);
+ quad.box.setWidth(tex->width() * scale_);
+ quad.box.setHeight(tex->height() * scale_);
UpdateMatrix();
return true;
}
@@ -91,8 +94,8 @@ void SimpleTextureQuad::UpdateMatrix()
int y = quad.box.y();
quad.matrix = (st && st->texture()) ? st->texture()->matrix() : GLTexture::Matrix();
- quad.matrix.xx /= scale;
- quad.matrix.yy /= scale;
+ quad.matrix.xx /= scale_;
+ quad.matrix.yy /= scale_;
quad.matrix.x0 = 0.0f - COMP_TEX_COORD_X(quad.matrix, x);
quad.matrix.y0 = 0.0f - COMP_TEX_COORD_Y(quad.matrix, y);
}
diff --git a/unity-shared/CompizUtils.h b/unity-shared/CompizUtils.h
index f60070cea..5dafd7b82 100644
--- a/unity-shared/CompizUtils.h
+++ b/unity-shared/CompizUtils.h
@@ -65,11 +65,13 @@ struct SimpleTextureQuad
{
SimpleTextureQuad();
bool SetTexture(SimpleTexture::Ptr const&);
- bool SetScale(float scale);
+ bool SetScale(double scale);
bool SetCoords(int x, int y);
bool SetX(int x);
bool SetY(int y);
+ void UpdateMatrix();
+
operator SimpleTexture::Ptr() const { return st; }
operator bool() const { return st && st->texture(); }
operator GLTexture*() const { return st ? st->texture() : nullptr; }
@@ -79,8 +81,7 @@ struct SimpleTextureQuad
TextureQuad quad;
private:
- void UpdateMatrix();
- float scale;
+ double scale_;
};
struct PixmapTexture : SimpleTexture