Esempio n. 1
0
        void SetTextToSprites(List <SpriteInfo> sprites, string text, TextRenderType renderType)
        {
            var bytes     = encoding.GetBytes(text);
            int charIndex = 0;

            // the length of sprites is the same than the text length
            for (int i = 0; i < bytes.Length; ++i)
            {
                if (bytes[i] > 32) // no sys chars nor spaces
                {
                    if (renderType == TextRenderType.NewUI)
                    {
                        var textureAtlasOffset = UI.GuiObject.GetTextureAtlasOffset(Data.Resource.UIText, 0);
                        textureAtlasOffset.X           += (bytes[i] % Global.UIFontCharactersPerLine) * Global.UIFontCharacterWidth;
                        textureAtlasOffset.Y           += (bytes[i] / Global.UIFontCharactersPerLine) * Global.UIFontCharacterHeight;
                        sprites[charIndex].Sprite.Layer = layerNewFont;
                        sprites[charIndex++].Sprite.TextureAtlasOffset = textureAtlasOffset;
                    }
                    else
                    {
                        sprites[charIndex].Sprite.Layer = layerLegacy;

                        if (renderType == TextRenderType.LegacySpecialDigits && bytes[i] >= '0' && bytes[i] <= '9')
                        {
                            sprites[charIndex++].Sprite.TextureAtlasOffset = UI.GuiObject.GetTextureAtlasOffset(Data.Resource.Icon, 78u + (uint)(bytes[i] - '0'));
                        }
                        else
                        {
                            sprites[charIndex++].Sprite.TextureAtlasOffset = UI.GuiObject.GetTextureAtlasOffset(Data.Resource.Font, MapCharacterToSpriteIndex(bytes[i]));
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        public int CreateText(string text, byte displayLayer, TextRenderType renderType, Position position = null, int characterGapSize = 8)
        {
            var renderTexts      = renderType == TextRenderType.NewUI ? renderTextsNew : renderTextsLegacy;
            var characterSprites = renderType == TextRenderType.NewUI ? characterSpritesNew : characterSpritesLegacy;

            // look if we have an unused render text
            int index                  = renderTexts.FindIndex(checkText => checkText == null);
            var spritePool             = characterSprites.Where(sprite => !sprite.InUse);
            int numAvailableCharacters = spritePool.Count();
            int lengthWithoutSpaces    = text.Replace(" ", "").Length;

            List <SpriteInfo> sprites;

            if (numAvailableCharacters < lengthWithoutSpaces)
            {
                sprites = new List <SpriteInfo>(spritePool);
                sprites.AddRange(AddCharacterSprites(lengthWithoutSpaces - numAvailableCharacters, renderType));
            }
            else
            {
                sprites = new List <SpriteInfo>(spritePool.Take(lengthWithoutSpaces));
            }

            // mark all as in use
            foreach (var sprite in sprites)
            {
                sprite.InUse = true;
            }

            var renderText = new RenderText(text);

            renderText.TextRenderType = renderType;
            renderText.Characters     = sprites;

            if (position != null)
            {
                renderText.Position.X = position.X;
                renderText.Position.Y = position.Y;
            }

            SetTextToSprites(renderText.Characters, text, renderText.TextRenderType);
            renderText.UpdatePositions(characterGapSize);
            renderText.UpdateDisplayLayer(displayLayer);

            if (index == -1)
            {
                index = renderTexts.Count;
                renderTexts.Add(renderText);
            }
            else
            {
                renderTexts[index] = renderText;
            }

            return(index);
        }
Esempio n. 3
0
        public ListBox(Interface interf, TextRenderType renderType = TextRenderType.NewUI)
            : base(interf)
        {
            background       = interf.RenderView.ColoredRectFactory.Create(0, 0, colorBackground, BaseDisplayLayer);
            background.Layer = Layer;

            selectionBackground       = interf.RenderView.ColoredRectFactory.Create(0, 0, colorFocus, (byte)(BaseDisplayLayer + 1));
            selectionBackground.Layer = Layer;
            this.renderType           = renderType;
        }
Esempio n. 4
0
        public void ChangeDisplayLayer(TextRenderType renderType, int index, byte displayLayer)
        {
            var renderTexts = renderType == TextRenderType.NewUI ? renderTextsNew : renderTextsLegacy;
            var renderText  = renderTexts[index];

            foreach (var character in renderText.Characters)
            {
                character.Sprite.DisplayLayer = displayLayer;
            }
        }
Esempio n. 5
0
        public bool IsVisible(TextRenderType renderType, int index)
        {
            var renderTexts = renderType == TextRenderType.NewUI ? renderTextsNew : renderTextsLegacy;

            if (renderTexts[index] == null)
            {
                return(false);
            }

            return(renderTexts[index].Visible);
        }
Esempio n. 6
0
        public void DestroyText(TextRenderType renderType, int index)
        {
            var renderTexts = renderType == TextRenderType.NewUI ? renderTextsNew : renderTextsLegacy;
            var renderText  = renderTexts[index];

            foreach (var character in renderText.Characters)
            {
                character.Sprite.Visible = false;
                character.InUse          = false;
            }

            renderTexts[index] = null;
        }
Esempio n. 7
0
        public void SetPosition(TextRenderType renderType, int index, Position position, int characterGapSize = 8)
        {
            var renderTexts = renderType == TextRenderType.NewUI ? renderTextsNew : renderTextsLegacy;
            var renderText  = renderTexts[index];

            if (position == renderText.Position)
            {
                return;
            }

            renderText.Position.X = position.X;
            renderText.Position.Y = position.Y;

            renderText.UpdatePositions(characterGapSize);
        }
Esempio n. 8
0
        public void ShowText(TextRenderType renderType, int index, bool show)
        {
            var renderTexts = renderType == TextRenderType.NewUI ? renderTextsNew : renderTextsLegacy;
            var renderText  = renderTexts[index];

            if (renderText.Visible == show)
            {
                return; // nothing to do
            }
            foreach (var character in renderText.Characters)
            {
                character.Sprite.Visible = show;
            }

            renderText.Visible = show;
        }
Esempio n. 9
0
        /// <summary>
        /// This is only used for legacy types
        /// </summary>
        /// <param name="index"></param>
        /// <param name="type"></param>
        public void SetRenderType(int index, TextRenderType type)
        {
            if (type == TextRenderType.NewUI)
            {
                throw new ExceptionFreeserf("Switching to new UI font is not supported.");
            }

            var renderText = renderTextsLegacy[index];

            if (type == renderText.TextRenderType)
            {
                return;
            }

            renderText.TextRenderType = type;

            SetTextToSprites(renderText.Characters, renderText.Text, renderText.TextRenderType);
        }
Esempio n. 10
0
        List <SpriteInfo> AddCharacterSprites(int number, TextRenderType renderType)
        {
            var characterSprites      = renderType == TextRenderType.NewUI ? characterSpritesNew : characterSpritesLegacy;
            var characterSize         = renderType == TextRenderType.NewUI ? characterSizeNew : characterSizeLegacy;
            List <SpriteInfo> sprites = new List <SpriteInfo>(number);

            for (int i = 0; i < number; ++i)
            {
                var spriteInfo = new SpriteInfo()
                {
                    Sprite = spriteFactory.Create(characterSize.Width, characterSize.Height, 0, 0, false, true, 0) as ILayerSprite,
                    InUse  = false
                };

                spriteInfo.Sprite.Layer = renderType == TextRenderType.NewUI ? layerNewFont : layerLegacy;

                sprites.Add(spriteInfo);
            }

            characterSprites.AddRange(sprites);

            return(sprites);
        }
Esempio n. 11
0
 public static byte[] ValidCharacters(TextRenderType renderType) => renderType == TextRenderType.NewUI ? null : ValidLegcyCharacters;
Esempio n. 12
0
 public static FastString HtmlString(string text, TextRenderType textRenderType, string fontSize = "13px;")
 {
     return(HtmlString(text, textRenderType, CRLF.html, false, fontSize));
 }
Esempio n. 13
0
        internal static FastString HtmlString(string text, TextRenderType textRenderType, CRLF crlf, bool excel2007)
        {
            FastString Result = new FastString(text.Length);
            int        len    = text.Length;

            for (int i = 0; i < len; i++)
            {
                if (crlf != CRLF.xml && crlf != CRLF.odt && text[i] == ' ' && (text.Length == 1 ||
                                                                               (i < (len - 1) && text[i + 1] == ' ') ||
                                                                               (i > 0 && text[i - 1] == ' ') ||
                                                                               i == len - 1))
                {
                    Result.Append("&nbsp;");
                }
                else if (text[i] == '<' && textRenderType == TextRenderType.HtmlTags && crlf == CRLF.odt)
                {
                    i += text.IndexOf('>', i) - i;
                }
                else if (i < text.Length - 1 && text[i] == '\r' && text[i + 1] == '\n')
                {
                    if (crlf == CRLF.xml)
                    {
                        Result.Append("&#10;");
                    }
                    else if (crlf == CRLF.odt)
                    {
                        Result.Append("<text:line-break />");
                    }
                    else
                    {
                        Result.Append("<p style=\"margin-top:0px;margin-bottom:0px;\">");
                    }
                    i++;
                }
                else if (text[i] == '\t' && crlf == CRLF.odt)
                {
                    Result.Append("<text:tab/>");
                }
                else if (text[i] == ' ' && crlf == CRLF.odt)
                {
                    int spaces = 1;
                    while (i < text.Length - 1)
                    {
                        if (text[i + 1] == ' ')
                        {
                            i++;
                            spaces++;
                        }
                        else
                        {
                            break;
                        }
                    }
                    Result.Append("<text:s text:c=\"" + spaces + "\"/>");
                }
                else if (text[i] == '\\')
                {
                    Result.Append("&#92;");
                }
                else if (text[i] == '~' && !excel2007)
                {
                    Result.Append("&tilde;");
                }
                else if (text[i] == '€' && !excel2007)
                {
                    Result.Append("&euro;");
                }
                else if (text[i] == '‹' && !excel2007)
                {
                    Result.Append("&lsaquo;");
                }
                else if (text[i] == '›' && !excel2007)
                {
                    Result.Append("&rsaquo;");
                }
                else if (text[i] == 'ˆ' && !excel2007)
                {
                    Result.Append("&circ;");
                }
                else if (text[i] == '&' && textRenderType == TextRenderType.Default)
                {
                    Result.Append("&amp;");
                }
                else if (text[i] == '"' && textRenderType == TextRenderType.Default)
                {
                    Result.Append("&quot;");
                }
                else if (text[i] == '<' && textRenderType == TextRenderType.Default)
                {
                    Result.Append("&lt;");
                }
                else if (text[i] == '>' && textRenderType == TextRenderType.Default)
                {
                    Result.Append("&gt;");
                }
                else if (text[i] == '\t' && excel2007)
                {
                    continue;
                }
                else
                {
                    Result.Append(text[i]);
                }
            }
            return(Result);
        }
Esempio n. 14
0
 internal static string OdtString(string Str, TextRenderType textRenderType)
 {
     return(HtmlString(Str, textRenderType, CRLF.odt, false).ToString());
 }
Esempio n. 15
0
 internal static string Excel2007String(string Str, TextRenderType textRenderType)
 {
     return(HtmlString(Str, textRenderType, CRLF.xml, true).ToString());
 }
Esempio n. 16
0
 internal static FastString HtmlString(string text, TextRenderType textRenderType)
 {
     return(HtmlString(text, textRenderType, CRLF.html, false));
 }
Esempio n. 17
0
        internal static FastString HtmlString(string text, TextRenderType textRenderType, CRLF crlf, bool excel2007)
        {
            FastString Result = new FastString(text.Length);
            int        len    = text.Length;

            for (int i = 0; i < len; i++)
            {
                if (crlf != CRLF.xml && crlf != CRLF.odt && text[i] == ' ' && (text.Length == 1 ||
                                                                               (i < (len - 1) && text[i + 1] == ' ') ||
                                                                               (i > 0 && text[i - 1] == ' ') ||
                                                                               i == len - 1))
                {
                    Result.Append("&nbsp;");
                }
                else if (i < text.Length - 1 && text[i] == '\r' && text[i + 1] == '\n')
                {
                    if (crlf == CRLF.xml)
                    {
                        Result.Append("&#10;");
                    }
                    else if (crlf == CRLF.odt)
                    {
                        Result.Append("<text:line-break />");
                    }
                    else
                    {
                        Result.Append("<br />");
                    }
                    i++;
                }
                else if (text[i] == '\\')
                {
                    Result.Append("&#92;");
                }
                else if (text[i] == '~' && !excel2007)
                {
                    Result.Append("&tilde;");
                }
                else if (text[i] == '€' && !excel2007)
                {
                    Result.Append("&euro;");
                }
                else if (text[i] == '‹' && !excel2007)
                {
                    Result.Append("&lsaquo;");
                }
                else if (text[i] == '›' && !excel2007)
                {
                    Result.Append("&rsaquo;");
                }
                else if (text[i] == 'ˆ' && !excel2007)
                {
                    Result.Append("&circ;");
                }
                else if (text[i] == '&' && textRenderType == TextRenderType.Default)
                {
                    Result.Append("&amp;");
                }
                else if (text[i] == '"' && textRenderType == TextRenderType.Default)
                {
                    Result.Append("&quot;");
                }
                else if (text[i] == '<' && textRenderType == TextRenderType.Default)
                {
                    Result.Append("&lt;");
                }
                else if (text[i] == '>' && textRenderType == TextRenderType.Default)
                {
                    Result.Append("&gt;");
                }
                else if (text[i] == '\t' && excel2007)
                {
                    continue;
                }
                else
                {
                    Result.Append(text[i]);
                }
            }
            return(Result);
        }
Esempio n. 18
0
        public void ChangeText(int index, string newText, byte displayLayer, TextRenderType renderType, int characterGapSize = 8)
        {
            var characterSprites = renderType == TextRenderType.NewUI ? characterSpritesNew : characterSpritesLegacy;
            var renderTexts      = renderType == TextRenderType.NewUI ? renderTextsNew : renderTextsLegacy;
            var renderText       = renderTexts[index];

            if (renderText.Text == newText)
            {
                return;
            }

            int newLengthWithoutSpaces = newText.Replace(" ", "").Length;

            if (renderText.Characters.Count < newLengthWithoutSpaces)
            {
                var spritePool = characterSprites.Where(sprite => !sprite.InUse);

                int numAdditionalChars = newLengthWithoutSpaces - renderText.Characters.Count;
                int numAvailableChars  = spritePool.Count();

                List <SpriteInfo> sprites;

                if (numAvailableChars < numAdditionalChars)
                {
                    sprites = new List <SpriteInfo>(spritePool);
                    sprites.AddRange(AddCharacterSprites(numAdditionalChars - numAvailableChars, renderType));
                }
                else
                {
                    sprites = new List <SpriteInfo>(spritePool.Take(numAdditionalChars));
                }

                // mark all as in use
                foreach (var sprite in sprites)
                {
                    sprite.InUse = true;
                }

                renderText.Characters.AddRange(sprites);
            }
            else if (renderText.Characters.Count > newLengthWithoutSpaces)
            {
                for (int i = newLengthWithoutSpaces; i < renderText.Characters.Count; ++i)
                {
                    renderText.Characters[i].Sprite.Visible = false;
                    renderText.Characters[i].InUse          = false;
                }

                renderText.Characters.RemoveRange(newLengthWithoutSpaces, renderText.Characters.Count - newLengthWithoutSpaces);
            }

            SetTextToSprites(renderText.Characters, newText, renderText.TextRenderType);
            renderText.Text = newText;

            renderText.UpdatePositions(characterGapSize);
            renderText.UpdateDisplayLayer(displayLayer);

            // update character visibility
            foreach (var character in renderText.Characters)
            {
                character.Sprite.Visible = renderText.Visible;
            }
        }
Esempio n. 19
0
        internal static FastString HtmlString(string text, TextRenderType textRenderType, CRLF crlf, bool excel2007, string fontSize = "13px;")
        {
            FastString Result         = new FastString(text.Length);
            int        len            = text.Length;
            int        lineBreakCount = 0;

            if (textRenderType == TextRenderType.HtmlTags)
            {
                string wingdings = "<font face=\"Wingdings\">";
                string webdings = "<font face=\"Webdings\">";
                int    ind1 = 0, ind2 = 0;
                if (text.Contains(wingdings))
                {
                    ind1 = text.IndexOf(wingdings) + wingdings.Length;
                    ind2 = text.IndexOf('<', ind1);
                    text = text.Substring(0, ind1) +
                           WingdingsToUnicodeConverter.Convert(text.Substring(ind1, ind2 - ind1)) +
                           text.Substring(ind2, text.Length - ind2);
                }
                else if (text.Contains(webdings))
                {
                    ind1 = text.IndexOf(webdings) + webdings.Length;
                    ind2 = text.IndexOf('<', ind1);
                    text = text.Substring(0, ind1) +
                           WingdingsToUnicodeConverter.Convert(text.Substring(ind1, ind2 - ind1)) +
                           text.Substring(ind2, text.Length - ind2);
                }
            }

            for (int i = 0; i < len; i++)
            {
                if (crlf != CRLF.xml && crlf != CRLF.odt && text[i] == ' ' && (text.Length == 1 ||
                                                                               (i < (len - 1) && text[i + 1] == ' ') ||
                                                                               (i > 0 && text[i - 1] == ' ') ||
                                                                               i == len - 1))
                {
                    Result.Append("&nbsp;");
                }
                else if (text[i] == '<' && textRenderType == TextRenderType.HtmlTags && crlf == CRLF.odt)
                {
                    i += text.IndexOf('>', i) - i;
                }
                else if (i < text.Length - 1 && text[i] == '\r' && text[i + 1] == '\n')
                {
                    if (crlf == CRLF.xml)
                    {
                        Result.Append("&#10;");
                    }
                    else if (crlf == CRLF.odt)
                    {
                        Result.Append("<text:line-break />");
                    }
                    else
                    {
                        if (lineBreakCount == 0)
                        {
                            Result.Append("<p style=\"margin-top:0px;margin-bottom:0px;\"></p>");
                        }
                        else
                        {
                            Result.Append($"<p style=\"margin-top:0px;height:{fontSize}margin-bottom:0px\"></p>");
                        }
                        lineBreakCount++;
                    }
                    i++;
                }
                else
                {
                    lineBreakCount = 0;
                    if (text[i] == '\t' && crlf == CRLF.odt)
                    {
                        Result.Append("<text:tab/>");
                    }
                    else if (text[i] == ' ' && crlf == CRLF.odt)
                    {
                        int spaces = 1;
                        while (i < text.Length - 1)
                        {
                            if (text[i + 1] == ' ')
                            {
                                i++;
                                spaces++;
                            }
                            else
                            {
                                break;
                            }
                        }
                        Result.Append("<text:s text:c=\"" + spaces + "\"/>");
                    }
                    else if (text[i] == '\\')
                    {
                        Result.Append("&#92;");
                    }
                    else if (text[i] == '~' && !excel2007)
                    {
                        Result.Append("&tilde;");
                    }
                    else if (text[i] == '€' && !excel2007)
                    {
                        Result.Append("&euro;");
                    }
                    else if (text[i] == '‹' && !excel2007)
                    {
                        Result.Append("&lsaquo;");
                    }
                    else if (text[i] == '›' && !excel2007)
                    {
                        Result.Append("&rsaquo;");
                    }
                    else if (text[i] == 'ˆ' && !excel2007)
                    {
                        Result.Append("&circ;");
                    }
                    else if (text[i] == '&' && textRenderType == TextRenderType.Default)
                    {
                        Result.Append("&amp;");
                    }
                    else if (text[i] == '"' && textRenderType == TextRenderType.Default)
                    {
                        Result.Append("&quot;");
                    }
                    else if (text[i] == '<' && textRenderType == TextRenderType.Default)
                    {
                        Result.Append("&lt;");
                    }
                    else if (text[i] == '>' && textRenderType == TextRenderType.Default)
                    {
                        Result.Append("&gt;");
                    }
                    else if (text[i] == '\t' && excel2007)
                    {
                        continue;
                    }
                    else
                    {
                        Result.Append(text[i]);
                    }
                }
            }
            return(Result);
        }