diff options
author | Sean Dague | 2009-02-18 12:56:36 +0000 |
---|---|---|
committer | Sean Dague | 2009-02-18 12:56:36 +0000 |
commit | 383f8b3ac601baef7b2cb322f53fb36b69367286 (patch) | |
tree | f90b2535f102be4f3ba50a41bb2668dc2cb956f2 | |
parent | remove legacy pre-migration code for mysql grid adapter, who knew this (diff) | |
download | opensim-SC-383f8b3ac601baef7b2cb322f53fb36b69367286.zip opensim-SC-383f8b3ac601baef7b2cb322f53fb36b69367286.tar.gz opensim-SC-383f8b3ac601baef7b2cb322f53fb36b69367286.tar.bz2 opensim-SC-383f8b3ac601baef7b2cb322f53fb36b69367286.tar.xz |
From: Christopher Yeoh <yeohc@au1.ibm.com>
The attached patch implements osGetDrawStringSize that looks like:
vector osGetDrawStringSize(string contentType, string text, string
fontName, int fontSize)
in LSL. It is meant to be used in conjunction with the osDraw*
functions. It returns accurate information on the size that a given
string will be rendered given the specified font and font size.
This allows for nicely formatted and positioned text on the generated
image.
7 files changed, 62 insertions, 0 deletions
diff --git a/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs b/OpenSim/Region/CoreModules/Scripting/DynamicTexture/DynamicTextureModule.cs index a8f841b..ab404bd 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 | |||
143 | return UUID.Zero; | 143 | return UUID.Zero; |
144 | } | 144 | } |
145 | 145 | ||
146 | |||
147 | public void GetDrawStringSize(string contentType, string text, string fontName, int fontSize, | ||
148 | out double xSize, out double ySize) | ||
149 | { | ||
150 | xSize = 0; | ||
151 | ySize = 0; | ||
152 | if (RenderPlugins.ContainsKey(contentType)) | ||
153 | { | ||
154 | RenderPlugins[contentType].GetDrawStringSize(text, fontName, fontSize, out xSize, out ySize); | ||
155 | } | ||
156 | } | ||
157 | |||
146 | #endregion | 158 | #endregion |
147 | 159 | ||
148 | #region IRegionModule Members | 160 | #region IRegionModule Members |
diff --git a/OpenSim/Region/CoreModules/Scripting/LoadImageURL/LoadImageURLModule.cs b/OpenSim/Region/CoreModules/Scripting/LoadImageURL/LoadImageURLModule.cs index 2eb8fc0..96618e0 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 | |||
84 | return false; | 84 | return false; |
85 | } | 85 | } |
86 | 86 | ||
87 | public void GetDrawStringSize(string text, string fontName, int fontSize, | ||
88 | out double xSize, out double ySize) | ||
89 | { | ||
90 | xSize = 0; | ||
91 | ySize = 0; | ||
92 | } | ||
93 | |||
87 | #endregion | 94 | #endregion |
88 | 95 | ||
89 | #region IRegionModule Members | 96 | #region IRegionModule Members |
diff --git a/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs b/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs index 6a348a3..c3e39ad 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 | |||
89 | return true; | 89 | return true; |
90 | } | 90 | } |
91 | 91 | ||
92 | public void GetDrawStringSize(string text, string fontName, int fontSize, | ||
93 | out double xSize, out double ySize) | ||
94 | { | ||
95 | Bitmap bitmap = new Bitmap(1024, 1024, PixelFormat.Format32bppArgb); | ||
96 | Graphics graph = Graphics.FromImage(bitmap); | ||
97 | |||
98 | Font myFont = new Font(fontName, fontSize); | ||
99 | SizeF stringSize = new SizeF(); | ||
100 | stringSize = graph.MeasureString(text, myFont); | ||
101 | xSize = stringSize.Width; | ||
102 | ySize = stringSize.Height; | ||
103 | } | ||
104 | |||
105 | |||
92 | #endregion | 106 | #endregion |
93 | 107 | ||
94 | #region IRegionModule Members | 108 | #region IRegionModule Members |
diff --git a/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs b/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs index e119bc3..9b29209 100644 --- a/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs +++ b/OpenSim/Region/Framework/Interfaces/IDynamicTextureManager.cs | |||
@@ -43,6 +43,8 @@ namespace OpenSim.Region.Framework.Interfaces | |||
43 | int updateTimer); | 43 | int updateTimer); |
44 | UUID AddDynamicTextureData(UUID simID, UUID primID, string contentType, string data, string extraParams, | 44 | UUID AddDynamicTextureData(UUID simID, UUID primID, string contentType, string data, string extraParams, |
45 | int updateTimer, bool SetBlending, byte AlphaValue); | 45 | int updateTimer, bool SetBlending, byte AlphaValue); |
46 | void GetDrawStringSize(string contentType, string text, string fontName, int fontSize, | ||
47 | out double xSize, out double ySize); | ||
46 | } | 48 | } |
47 | 49 | ||
48 | public interface IDynamicTextureRender | 50 | public interface IDynamicTextureRender |
@@ -54,5 +56,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
54 | byte[] ConvertStream(Stream data, string extraParams); | 56 | byte[] ConvertStream(Stream data, string extraParams); |
55 | bool AsyncConvertUrl(UUID id, string url, string extraParams); | 57 | bool AsyncConvertUrl(UUID id, string url, string extraParams); |
56 | bool AsyncConvertData(UUID id, string bodyData, string extraParams); | 58 | bool AsyncConvertData(UUID id, string bodyData, string extraParams); |
59 | void GetDrawStringSize(string text, string fontName, int fontSize, | ||
60 | out double xSize, out double ySize); | ||
57 | } | 61 | } |
58 | } | 62 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 564648b..597592d 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 | |||
677 | return drawList; | 677 | return drawList; |
678 | } | 678 | } |
679 | 679 | ||
680 | public LSL_Vector osGetDrawStringSize(string contentType, string text, string fontName, int fontSize) | ||
681 | { | ||
682 | CheckThreatLevel(ThreatLevel.VeryLow, "osGetDrawStringSize"); | ||
683 | m_host.AddScriptLPS(1); | ||
684 | |||
685 | LSL_Vector vec = new LSL_Vector(0,0,0); | ||
686 | IDynamicTextureManager textureManager = World.RequestModuleInterface<IDynamicTextureManager>(); | ||
687 | if (textureManager != null) | ||
688 | { | ||
689 | double xSize, ySize; | ||
690 | textureManager.GetDrawStringSize(contentType, text, fontName, fontSize, | ||
691 | out xSize, out ySize); | ||
692 | vec.x = xSize; | ||
693 | vec.y = ySize; | ||
694 | } | ||
695 | return vec; | ||
696 | } | ||
697 | |||
680 | public void osSetStateEvents(int events) | 698 | public void osSetStateEvents(int events) |
681 | { | 699 | { |
682 | // This function is a hack. There is no reason for it's existence | 700 | // 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 72bb60c..1150d76 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 | |||
88 | string osSetPenSize(string drawList, int penSize); | 88 | string osSetPenSize(string drawList, int penSize); |
89 | string osSetPenColour(string drawList, string colour); | 89 | string osSetPenColour(string drawList, string colour); |
90 | string osDrawImage(string drawList, int width, int height, string imageUrl); | 90 | string osDrawImage(string drawList, int width, int height, string imageUrl); |
91 | vector osGetDrawStringSize(string contentType, string text, string fontName, int fontSize); | ||
91 | void osSetStateEvents(int events); | 92 | void osSetStateEvents(int events); |
92 | 93 | ||
93 | double osList2Double(LSL_Types.list src, int index); | 94 | 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 a92f046..6ba8b20 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 | |||
212 | { | 212 | { |
213 | return m_OSSL_Functions.osDrawImage(drawList, width, height, imageUrl); | 213 | return m_OSSL_Functions.osDrawImage(drawList, width, height, imageUrl); |
214 | } | 214 | } |
215 | |||
216 | public vector osGetDrawStringSize(string contentType, string text, string fontName, int fontSize) | ||
217 | { | ||
218 | return m_OSSL_Functions.osGetDrawStringSize(contentType, text, fontName, fontSize); | ||
219 | } | ||
220 | |||
215 | public void osSetStateEvents(int events) | 221 | public void osSetStateEvents(int events) |
216 | { | 222 | { |
217 | m_OSSL_Functions.osSetStateEvents(events); | 223 | m_OSSL_Functions.osSetStateEvents(events); |