Ejemplo n.º 1
0
 public static void drawString(
     SDKString _string,
     int x,
     int y,
     int anchor,
     SDKTextUtils.DrawRegionRoutineDelegate DrawRegionRoutine)
 {
     SDKTextUtils.drawSubString(_string, 0, _string.Length(), x, y, anchor, DrawRegionRoutine);
 }
Ejemplo n.º 2
0
        public static void drawWrappedString(
            SDKString _string,
            short[] offsets,
            int startLine,
            int lineCount,
            int xConst,
            int yConst,
            int anchorConst,
            SDKTextUtils.DrawRegionRoutineDelegate DrawRegionRoutine)
        {
            int xConst1  = xConst;
            int yConst1  = yConst;
            int anchor   = anchorConst;
            int lineSize = SDKTextUtils.getLineSize();
            int num1     = 0;
            int num2     = 0;
            int num3     = 0;

            if ((anchor & 2) != 0)
            {
                num3 = (int)offsets[0] * lineSize - SDKTextUtils.s_currentFont.getLeading() >> 1;
            }
            else if ((anchor & 4) != 0)
            {
                num3    = (int)offsets[0] * lineSize - SDKTextUtils.s_currentFont.getLeading();
                anchor ^= 4;
            }
            switch (SDKTextUtils.s_currentFont.m_transLineDirection)
            {
            case 1:
                xConst1 -= num3;
                num1     = lineSize;
                break;

            case 2:
                yConst1 -= num3;
                num2     = lineSize;
                break;

            case 4:
                xConst1 += num3;
                num1     = -lineSize;
                break;

            default:
                yConst1 += num3;
                num2     = -lineSize;
                break;
            }
            int offset1 = (int)offsets[(int)offsets[0] + 2];

            for (int index = startLine; index < startLine + lineCount; ++index)
            {
                int offset2 = (int)offsets[index];
                int len     = (int)offsets[index + 1] - offset2;
                int num4    = (int)_string.charCodeAt((int)offsets[index + 1] - 1);
                if (num4 == offset1 || num4 == 32)
                {
                    --len;
                }
                SDKTextUtils.drawSubString(_string, offset2, len, xConst1, yConst1, anchor, DrawRegionRoutine);
                xConst1 += num1;
                yConst1 += num2;
            }
        }
Ejemplo n.º 3
0
        public static void drawSubString(
            SDKString _string,
            int offset,
            int len,
            int xConst,
            int yConst,
            int anchor,
            SDKTextUtils.DrawRegionRoutineDelegate DrawRegionRoutine)
        {
            int num1 = xConst;
            int num2 = yConst;

            if (SDKTextUtils.s_currentFont == null)
            {
                return;
            }
            object fontImage = SDKTextUtils.s_currentFont.getFontImage();
            int    ascent    = SDKTextUtils.s_currentFont.getAscent();
            int    lineSize  = SDKTextUtils.s_currentFont.getLineSize();
            int    textDir   = SDKTextUtils.s_currentFont.getTextDir();
            int    lineDir   = SDKTextUtils.s_currentFont.getLineDir();

            if (SDKTextUtils.s_currentFont.m_charData == null)
            {
                return;
            }
            int num3 = 0;
            int num4 = 0;

            if ((anchor & 32) != 0)
            {
                num3 -= SDKTextUtils.getSubStringSize(_string, offset, len);
            }
            else if ((anchor & 16) != 0)
            {
                num3 -= SDKTextUtils.getSubStringSize(_string, offset, len) >> 1;
            }
            if ((anchor & 64) != 0)
            {
                num4 -= ascent;
            }
            else if ((anchor & 4) != 0)
            {
                num4 -= lineSize;
            }
            switch (textDir)
            {
            case 1:
                num1 += num3;
                num2 += num4;
                break;

            case 2:
                num1 -= num4;
                num2 += num3;
                break;

            case 4:
                num1 -= num3;
                num2 -= num4;
                break;

            case 8:
                num1 -= num4;
                num2 -= num3;
                break;
            }
            int[] p = new int[2] {
                num1, num2
            };
            int encoding = _string.getEncoding();

            switch (encoding)
            {
            case 0:
            case 1:
                bool  flag1 = (textDir & 5) != 0;
                sbyte num5  = (sbyte)((textDir & 4) >> 1);
                sbyte num6  = (sbyte)(((lineDir & 1) << 1) + ((~lineDir & 2) >> 1));
                sbyte num7  = flag1 ? num5 : num6;
                bool  flag2 = (textDir & 10) != 0;
                sbyte num8  = (sbyte)((textDir & 8) >> 2);
                sbyte num9  = (sbyte)((lineDir & 2) + (~lineDir & 1));
                sbyte num10 = flag2 ? num8 : num9;
                for (int index1 = offset; index1 != offset + len; ++index1)
                {
                    ushort code = _string.charCodeAt(index1);
                    if (code != (ushort)173 || index1 == offset + len - 1)
                    {
                        ushort charOffset  = SDKTextUtils.getCharOffset(code, encoding);
                        int    charAdvance = SDKTextUtils.s_currentFont.getCharAdvance(charOffset);
                        if (charOffset == ushort.MaxValue)
                        {
                            if (code == (ushort)32)
                            {
                                ;
                            }
                        }
                        else
                        {
                            ushort  num11      = (ushort)((uint)charOffset + 1U);
                            sbyte[] mCharData1 = SDKTextUtils.s_currentFont.m_charData;
                            int     index2     = (int)num11;
                            ushort  num12      = (ushort)(index2 + 1);
                            int     num13      = (int)mCharData1[index2] & (int)byte.MaxValue;
                            for (int index3 = 0; index3 != num13; ++index3)
                            {
                                sbyte[] mCharData2 = SDKTextUtils.s_currentFont.m_charData;
                                int     index4     = (int)num12;
                                ushort  num14      = (ushort)(index4 + 1);
                                int     num15      = (int)mCharData2[index4] & (int)byte.MaxValue;
                                sbyte[] mCharData3 = SDKTextUtils.s_currentFont.m_charData;
                                int     index5     = (int)num14;
                                ushort  num16      = (ushort)(index5 + 1);
                                int     num17      = (int)mCharData3[index5] & (int)byte.MaxValue;
                                sbyte[] mCharData4 = SDKTextUtils.s_currentFont.m_charData;
                                int     index6     = (int)num16;
                                ushort  num18      = (ushort)(index6 + 1);
                                int     num19      = (int)mCharData4[index6];
                                sbyte[] mCharData5 = SDKTextUtils.s_currentFont.m_charData;
                                int     index7     = (int)num18;
                                ushort  num20      = (ushort)(index7 + 1);
                                int     num21      = (int)mCharData5[index7];
                                sbyte[] mCharData6 = SDKTextUtils.s_currentFont.m_charData;
                                int     index8     = (int)num20;
                                ushort  num22      = (ushort)(index8 + 1);
                                int     num23      = (int)mCharData6[index8] & (int)byte.MaxValue;
                                sbyte[] mCharData7 = SDKTextUtils.s_currentFont.m_charData;
                                int     index9     = (int)num22;
                                num12 = (ushort)(index9 + 1);
                                int   num24    = (int)mCharData7[index9] & (int)byte.MaxValue;
                                int[] numArray = new int[4]
                                {
                                    num19,
                                    num21 - ascent,
                                    -num19 - num23,
                                    ascent - num21 - num24
                                };
                                int num25 = p[0] + numArray[(int)num7];
                                int num26 = p[1] + numArray[(int)num10];
                                DrawRegionRoutine(fontImage, (short)num25, (short)num26, (short)num23, (short)num24, (short)num15, (short)num17);
                            }
                        }
                        SDKTextUtils.s_currentFont.advance(p, charAdvance);
                    }
                }
                break;

            default:
                if (encoding != SDKTextUtils.s_currentLanguage.encoding)
                {
                    JSystem.println("ERROR: SDKTextUtils::drawString: SDKString has encoding " + encoding.ToString() + ", but the currently set language has encoding " + SDKTextUtils.s_currentLanguage.encoding.ToString());
                    goto case 0;
                }
                else
                {
                    goto case 0;
                }
            }
        }