diff --git a/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs b/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs index a8f841bf92..ab404bdb83 100644 --- a/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs @@ -143,6 +143,18 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture return UUID.Zero; } + + public void GetDrawStringSize(string contentType, string text, string fontName, int fontSize, + out double xSize, out double ySize) + { + xSize = 0; + ySize = 0; + if (RenderPlugins.ContainsKey(contentType)) + { + RenderPlugins[contentType].GetDrawStringSize(text, fontName, fontSize, out xSize, out ySize); + } + } + #endregion #region IRegionModule Members diff --git a/OpenSim/Region/CoreModules/Scripting/LoadImageURL/LoadImageURLModule.cs b/OpenSim/Region/CoreModules/Scripting/LoadImageURL/LoadImageURLModule.cs index 2eb8fc07ea..96618e03b9 100644 --- a/OpenSim/Region/CoreModules/Scripting/LoadImageURL/LoadImageURLModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/LoadImageURL/LoadImageURLModule.cs @@ -84,6 +84,13 @@ namespace OpenSim.Region.CoreModules.Scripting.LoadImageURL return false; } + public void GetDrawStringSize(string text, string fontName, int fontSize, + out double xSize, out double ySize) + { + xSize = 0; + ySize = 0; + } + #endregion #region IRegionModule Members diff --git a/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs b/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs index 6a348a35ee..c3e39ade52 100644 --- a/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs @@ -89,6 +89,20 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender return true; } + public void GetDrawStringSize(string text, string fontName, int fontSize, + out double xSize, out double ySize) + { + Bitmap bitmap = new Bitmap(1024, 1024, PixelFormat.Format32bppArgb); + Graphics graph = Graphics.FromImage(bitmap); + + Font myFont = new Font(fontName, fontSize); + SizeF stringSize = new SizeF(); + stringSize = graph.MeasureString(text, myFont); + xSize = stringSize.Width; + ySize = stringSize.Height; + } + + #endregion #region IRegionModule Members diff --git a/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs b/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs index e119bc3c40..9b29209a48 100644 --- a/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs +++ b/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs @@ -43,6 +43,8 @@ namespace OpenSim.Region.Framework.Interfaces int updateTimer); UUID AddDynamicTextureData(UUID simID, UUID primID, string contentType, string data, string extraParams, int updateTimer, bool SetBlending, byte AlphaValue); + void GetDrawStringSize(string contentType, string text, string fontName, int fontSize, + out double xSize, out double ySize); } public interface IDynamicTextureRender @@ -54,5 +56,7 @@ namespace OpenSim.Region.Framework.Interfaces byte[] ConvertStream(Stream data, string extraParams); bool AsyncConvertUrl(UUID id, string url, string extraParams); bool AsyncConvertData(UUID id, string bodyData, string extraParams); + void GetDrawStringSize(string text, string fontName, int fontSize, + out double xSize, out double ySize); } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 564648bfac..597592da61 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -677,6 +677,24 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return drawList; } + public LSL_Vector osGetDrawStringSize(string contentType, string text, string fontName, int fontSize) + { + CheckThreatLevel(ThreatLevel.VeryLow, "osGetDrawStringSize"); + m_host.AddScriptLPS(1); + + LSL_Vector vec = new LSL_Vector(0,0,0); + IDynamicTextureManager textureManager = World.RequestModuleInterface(); + if (textureManager != null) + { + double xSize, ySize; + textureManager.GetDrawStringSize(contentType, text, fontName, fontSize, + out xSize, out ySize); + vec.x = xSize; + vec.y = ySize; + } + return vec; + } + public void osSetStateEvents(int events) { // This function is a hack. There is no reason for it's existence diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index 72bb60cbc5..1150d76edb 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs @@ -88,6 +88,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces string osSetPenSize(string drawList, int penSize); string osSetPenColour(string drawList, string colour); string osDrawImage(string drawList, int width, int height, string imageUrl); + vector osGetDrawStringSize(string contentType, string text, string fontName, int fontSize); void osSetStateEvents(int events); double osList2Double(LSL_Types.list src, int index); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index a92f046883..6ba8b20c05 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs @@ -212,6 +212,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase { return m_OSSL_Functions.osDrawImage(drawList, width, height, imageUrl); } + + public vector osGetDrawStringSize(string contentType, string text, string fontName, int fontSize) + { + return m_OSSL_Functions.osGetDrawStringSize(contentType, text, fontName, fontSize); + } + public void osSetStateEvents(int events) { m_OSSL_Functions.osSetStateEvents(events);