|
@@ -15,7 +15,7 @@ namespace BansheeEngine
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
GUITexture::GUITexture(const String& styleName, const HSpriteTexture& texture,
|
|
GUITexture::GUITexture(const String& styleName, const HSpriteTexture& texture,
|
|
|
- GUIImageScaleMode scale, bool transparent, const GUIDimensions& dimensions)
|
|
|
|
|
|
|
+ TextureScaleMode scale, bool transparent, const GUIDimensions& dimensions)
|
|
|
:GUIElement(styleName, dimensions), mScaleMode(scale), mTransparent(transparent), mUsingStyleTexture(false)
|
|
:GUIElement(styleName, dimensions), mScaleMode(scale), mTransparent(transparent), mUsingStyleTexture(false)
|
|
|
{
|
|
{
|
|
|
mImageSprite = bs_new<ImageSprite>();
|
|
mImageSprite = bs_new<ImageSprite>();
|
|
@@ -37,28 +37,28 @@ namespace BansheeEngine
|
|
|
bs_delete(mImageSprite);
|
|
bs_delete(mImageSprite);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- GUITexture* GUITexture::create(const HSpriteTexture& texture, GUIImageScaleMode scale, bool transparent,
|
|
|
|
|
|
|
+ GUITexture* GUITexture::create(const HSpriteTexture& texture, TextureScaleMode scale, bool transparent,
|
|
|
const GUIOptions& options, const String& styleName)
|
|
const GUIOptions& options, const String& styleName)
|
|
|
{
|
|
{
|
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
|
texture, scale, transparent, GUIDimensions::create(options));
|
|
texture, scale, transparent, GUIDimensions::create(options));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- GUITexture* GUITexture::create(const HSpriteTexture& texture, GUIImageScaleMode scale, bool transparent,
|
|
|
|
|
|
|
+ GUITexture* GUITexture::create(const HSpriteTexture& texture, TextureScaleMode scale, bool transparent,
|
|
|
const String& styleName)
|
|
const String& styleName)
|
|
|
{
|
|
{
|
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
|
texture, scale, transparent, GUIDimensions::create());
|
|
texture, scale, transparent, GUIDimensions::create());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- GUITexture* GUITexture::create(const HSpriteTexture& texture, GUIImageScaleMode scale,
|
|
|
|
|
|
|
+ GUITexture* GUITexture::create(const HSpriteTexture& texture, TextureScaleMode scale,
|
|
|
const GUIOptions& options, const String& styleName)
|
|
const GUIOptions& options, const String& styleName)
|
|
|
{
|
|
{
|
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
|
texture, scale, true, GUIDimensions::create(options));
|
|
texture, scale, true, GUIDimensions::create(options));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- GUITexture* GUITexture::create(const HSpriteTexture& texture, GUIImageScaleMode scale,
|
|
|
|
|
|
|
+ GUITexture* GUITexture::create(const HSpriteTexture& texture, TextureScaleMode scale,
|
|
|
const String& styleName)
|
|
const String& styleName)
|
|
|
{
|
|
{
|
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
@@ -69,22 +69,22 @@ namespace BansheeEngine
|
|
|
const GUIOptions& options, const String& styleName)
|
|
const GUIOptions& options, const String& styleName)
|
|
|
{
|
|
{
|
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
|
- texture, GUIImageScaleMode::StretchToFit, true, GUIDimensions::create(options));
|
|
|
|
|
|
|
+ texture, TextureScaleMode::StretchToFit, true, GUIDimensions::create(options));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
GUITexture* GUITexture::create(const HSpriteTexture& texture, const String& styleName)
|
|
GUITexture* GUITexture::create(const HSpriteTexture& texture, const String& styleName)
|
|
|
{
|
|
{
|
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
|
- texture, GUIImageScaleMode::StretchToFit, true, GUIDimensions::create());
|
|
|
|
|
|
|
+ texture, TextureScaleMode::StretchToFit, true, GUIDimensions::create());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- GUITexture* GUITexture::create(GUIImageScaleMode scale, const GUIOptions& options, const String& styleName)
|
|
|
|
|
|
|
+ GUITexture* GUITexture::create(TextureScaleMode scale, const GUIOptions& options, const String& styleName)
|
|
|
{
|
|
{
|
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
|
HSpriteTexture(), scale, true, GUIDimensions::create(options));
|
|
HSpriteTexture(), scale, true, GUIDimensions::create(options));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- GUITexture* GUITexture::create(GUIImageScaleMode scale, const String& styleName)
|
|
|
|
|
|
|
+ GUITexture* GUITexture::create(TextureScaleMode scale, const String& styleName)
|
|
|
{
|
|
{
|
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
|
HSpriteTexture(), scale, true, GUIDimensions::create());
|
|
HSpriteTexture(), scale, true, GUIDimensions::create());
|
|
@@ -93,13 +93,13 @@ namespace BansheeEngine
|
|
|
GUITexture* GUITexture::create(const GUIOptions& options, const String& styleName)
|
|
GUITexture* GUITexture::create(const GUIOptions& options, const String& styleName)
|
|
|
{
|
|
{
|
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
|
- HSpriteTexture(), GUIImageScaleMode::StretchToFit, true, GUIDimensions::create(options));
|
|
|
|
|
|
|
+ HSpriteTexture(), TextureScaleMode::StretchToFit, true, GUIDimensions::create(options));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
GUITexture* GUITexture::create(const String& styleName)
|
|
GUITexture* GUITexture::create(const String& styleName)
|
|
|
{
|
|
{
|
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
return new (bs_alloc<GUITexture>()) GUITexture(getStyleName<GUITexture>(styleName),
|
|
|
- HSpriteTexture(), GUIImageScaleMode::StretchToFit, true, GUIDimensions::create());
|
|
|
|
|
|
|
+ HSpriteTexture(), TextureScaleMode::StretchToFit, true, GUIDimensions::create());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void GUITexture::setTexture(const HSpriteTexture& texture)
|
|
void GUITexture::setTexture(const HSpriteTexture& texture)
|
|
@@ -143,60 +143,17 @@ namespace BansheeEngine
|
|
|
mDesc.transparent = mTransparent;
|
|
mDesc.transparent = mTransparent;
|
|
|
mDesc.color = getTint();
|
|
mDesc.color = getTint();
|
|
|
|
|
|
|
|
- float optimalWidth = 0.0f;
|
|
|
|
|
- float optimalHeight = 0.0f;
|
|
|
|
|
|
|
+ Vector2I textureSize;
|
|
|
if (SpriteTexture::checkIsLoaded(mActiveTexture))
|
|
if (SpriteTexture::checkIsLoaded(mActiveTexture))
|
|
|
{
|
|
{
|
|
|
mDesc.texture = mActiveTexture.getInternalPtr();
|
|
mDesc.texture = mActiveTexture.getInternalPtr();
|
|
|
- optimalWidth = (float)mDesc.texture->getWidth();
|
|
|
|
|
- optimalHeight = (float)mDesc.texture->getHeight();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- switch (mScaleMode)
|
|
|
|
|
- {
|
|
|
|
|
- case GUIImageScaleMode::StretchToFit:
|
|
|
|
|
- mDesc.uvScale = Vector2(1.0f, 1.0f);
|
|
|
|
|
- break;
|
|
|
|
|
- case GUIImageScaleMode::ScaleToFit:
|
|
|
|
|
- mDesc.uvScale.x = optimalWidth / mLayoutData.area.width;
|
|
|
|
|
- mDesc.uvScale.y = optimalHeight / mLayoutData.area.height;
|
|
|
|
|
-
|
|
|
|
|
- if(mDesc.uvScale.x < mDesc.uvScale.y)
|
|
|
|
|
- {
|
|
|
|
|
- mDesc.uvScale.x = 1.0f;
|
|
|
|
|
- mDesc.uvScale.y = (mLayoutData.area.width * (optimalHeight / optimalWidth)) / mLayoutData.area.height;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- mDesc.uvScale.x = (mLayoutData.area.height * (optimalWidth / optimalHeight)) / mLayoutData.area.width;
|
|
|
|
|
- mDesc.uvScale.y = 1.0f;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- break;
|
|
|
|
|
- case GUIImageScaleMode::CropToFit:
|
|
|
|
|
- mDesc.uvScale.x = optimalWidth / mLayoutData.area.width;
|
|
|
|
|
- mDesc.uvScale.y = optimalHeight / mLayoutData.area.height;
|
|
|
|
|
-
|
|
|
|
|
- if(mDesc.uvScale.x < mDesc.uvScale.y)
|
|
|
|
|
- {
|
|
|
|
|
- mDesc.uvScale.x = (mLayoutData.area.height * (optimalWidth / optimalHeight)) / mLayoutData.area.width;
|
|
|
|
|
- mDesc.uvScale.y = 1.0f;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- mDesc.uvScale.x = 1.0f;
|
|
|
|
|
- mDesc.uvScale.y = (mLayoutData.area.width * (optimalHeight / optimalWidth)) / mLayoutData.area.height;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- break;
|
|
|
|
|
- case GUIImageScaleMode::RepeatToFit:
|
|
|
|
|
- mDesc.uvScale.x = mLayoutData.area.width / optimalWidth;
|
|
|
|
|
- mDesc.uvScale.y = mLayoutData.area.height / optimalHeight;
|
|
|
|
|
- break;
|
|
|
|
|
- default:
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ textureSize.x = mDesc.texture->getWidth();
|
|
|
|
|
+ textureSize.y = mDesc.texture->getHeight();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ Vector2I destSize(mLayoutData.area.width, mLayoutData.area.height);
|
|
|
|
|
+ mDesc.uvScale = ImageSprite::getTextureUVScale(textureSize, destSize, mScaleMode);
|
|
|
|
|
+
|
|
|
mImageSprite->update(mDesc, (UINT64)_getParentWidget());
|
|
mImageSprite->update(mDesc, (UINT64)_getParentWidget());
|
|
|
|
|
|
|
|
GUIElement::updateRenderElementsInternal();
|
|
GUIElement::updateRenderElementsInternal();
|