summaryrefslogtreecommitdiff
path: root/indra/newview/llviewermedia.cpp
diff options
context:
space:
mode:
authorVadim Savchuk <vsavchuk@productengine.com>2009-12-03 17:10:43 +0200
committerVadim Savchuk <vsavchuk@productengine.com>2009-12-03 17:10:43 +0200
commitf838c5d3ae25e90dba80817f98b50df3e58a4010 (patch)
tree0c80900206ac15dad0e923264a844ae002d99251 /indra/newview/llviewermedia.cpp
parent3b05656ba1f698535453622267996df14fef3dde (diff)
parent67f11add9c2e05e1c86e30c44c94ee1b7d9205d0 (diff)
Merge from default branch.
--HG-- branch : product-engine
Diffstat (limited to 'indra/newview/llviewermedia.cpp')
-rw-r--r--indra/newview/llviewermedia.cpp48
1 files changed, 30 insertions, 18 deletions
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 608c5c2097..d5fd23ac51 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -1290,16 +1290,36 @@ void LLViewerMediaImpl::mouseMove(S32 x, S32 y, MASK mask)
}
//////////////////////////////////////////////////////////////////////////////////////////
+//static
+void LLViewerMediaImpl::scaleTextureCoords(const LLVector2& texture_coords, S32 *x, S32 *y)
+{
+ F32 texture_x = texture_coords.mV[VX];
+ F32 texture_y = texture_coords.mV[VY];
+
+ // Deal with repeating textures by wrapping the coordinates into the range [0, 1.0)
+ texture_x = fmodf(texture_x, 1.0f);
+ if(texture_x < 0.0f)
+ texture_x = 1.0 + texture_x;
+
+ texture_y = fmodf(texture_y, 1.0f);
+ if(texture_y < 0.0f)
+ texture_y = 1.0 + texture_y;
+
+ // scale x and y to texel units.
+ *x = llround(texture_x * mMediaSource->getTextureWidth());
+ *y = llround((1.0f - texture_y) * mMediaSource->getTextureHeight());
+
+ // Adjust for the difference between the actual texture height and the amount of the texture in use.
+ *y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight());
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
void LLViewerMediaImpl::mouseDown(const LLVector2& texture_coords, MASK mask, S32 button)
{
if(mMediaSource)
{
- // scale x and y to texel units.
- S32 x = llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth());
- S32 y = llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight());
-
- // Adjust for the difference between the actual texture height and the amount of the texture in use.
- y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight());
+ S32 x, y;
+ scaleTextureCoords(texture_coords, &x, &y);
mouseDown(x, y, mask, button);
}
@@ -1309,12 +1329,8 @@ void LLViewerMediaImpl::mouseUp(const LLVector2& texture_coords, MASK mask, S32
{
if(mMediaSource)
{
- // scale x and y to texel units.
- S32 x = llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth());
- S32 y = llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight());
-
- // Adjust for the difference between the actual texture height and the amount of the texture in use.
- y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight());
+ S32 x, y;
+ scaleTextureCoords(texture_coords, &x, &y);
mouseUp(x, y, mask, button);
}
@@ -1324,12 +1340,8 @@ void LLViewerMediaImpl::mouseMove(const LLVector2& texture_coords, MASK mask)
{
if(mMediaSource)
{
- // scale x and y to texel units.
- S32 x = llround(texture_coords.mV[VX] * mMediaSource->getTextureWidth());
- S32 y = llround((1.0f - texture_coords.mV[VY]) * mMediaSource->getTextureHeight());
-
- // Adjust for the difference between the actual texture height and the amount of the texture in use.
- y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight());
+ S32 x, y;
+ scaleTextureCoords(texture_coords, &x, &y);
mouseMove(x, y, mask);
}