コード例 #1
0
ファイル: DynamicLayout.cs プロジェクト: hakeemsm/XobotOS
		/// <summary>
		/// Make a layout for the transformed text (password transformation
		/// being the primary example of a transformation)
		/// that will be updated as the base text is changed.
		/// </summary>
		/// <remarks>
		/// Make a layout for the transformed text (password transformation
		/// being the primary example of a transformation)
		/// that will be updated as the base text is changed.
		/// If ellipsize is non-null, the Layout will ellipsize the text
		/// down to ellipsizedWidth.
		/// *
		/// *@hide
		/// </remarks>
		public DynamicLayout(java.lang.CharSequence @base, java.lang.CharSequence display
			, android.text.TextPaint paint, int width, android.text.Layout.Alignment? align, 
			android.text.TextDirectionHeuristic textDir, float spacingmult, float spacingadd
			, bool includepad, android.text.TextUtils.TruncateAt? ellipsize_1, int ellipsizedWidth
			) : base((ellipsize_1 == null) ? display : (display is android.text.Spanned) ? new 
			android.text.Layout.SpannedEllipsizer(display) : new android.text.Layout.Ellipsizer
			(display), paint, width, align, textDir, spacingmult, spacingadd)
		{
			mBase = @base;
			mDisplay = display;
			if (ellipsize_1 != null)
			{
				mInts = new android.text.PackedIntVector(COLUMNS_ELLIPSIZE);
				mEllipsizedWidth = ellipsizedWidth;
				mEllipsizeAt = ellipsize_1;
			}
			else
			{
				mInts = new android.text.PackedIntVector(COLUMNS_NORMAL);
				mEllipsizedWidth = width;
				mEllipsizeAt = null;
			}
			mObjects = new android.text.PackedObjectVector<android.text.Layout.Directions>(1);
			mIncludePad = includepad;
			if (ellipsize_1 != null)
			{
				android.text.Layout.Ellipsizer e = (android.text.Layout.Ellipsizer)getText();
				e.mLayout = this;
				e.mWidth = ellipsizedWidth;
				e.mMethod = ellipsize_1;
				mEllipsize = true;
			}
			// Initial state is a single line with 0 characters (0 to 0),
			// with top at 0 and bottom at whatever is natural, and
			// undefined ellipsis.
			int[] start;
			if (ellipsize_1 != null)
			{
				start = new int[COLUMNS_ELLIPSIZE];
				start[ELLIPSIS_START] = ELLIPSIS_UNDEFINED;
			}
			else
			{
				start = new int[COLUMNS_NORMAL];
			}
			android.text.Layout.Directions[] dirs = new android.text.Layout.Directions[] { DIRS_ALL_LEFT_TO_RIGHT
				 };
			android.graphics.Paint.FontMetricsInt fm = paint.getFontMetricsInt();
			int asc = fm.ascent;
			int desc = fm.descent;
			start[DIR] = DIR_LEFT_TO_RIGHT << DIR_SHIFT;
			start[TOP] = 0;
			start[DESCENT] = desc;
			mInts.insertAt(0, start);
			start[TOP] = desc - asc;
			mInts.insertAt(1, start);
			mObjects.insertAt(0, dirs);
			// Update from 0 characters to whatever the real text is
			reflow(@base, 0, 0, @base.Length);
			if (@base is android.text.Spannable)
			{
				if (mWatcher == null)
				{
					mWatcher = new android.text.DynamicLayout.ChangeWatcher(this);
				}
				// Strip out any watchers for other DynamicLayouts.
				android.text.Spannable sp = (android.text.Spannable)@base;
				android.text.DynamicLayout.ChangeWatcher[] spans = sp.getSpans<android.text.DynamicLayout
					.ChangeWatcher>(0, sp.Length);
				{
					for (int i = 0; i < spans.Length; i++)
					{
						sp.removeSpan(spans[i]);
					}
				}
				sp.setSpan(mWatcher, 0, @base.Length, android.text.SpannedClass.SPAN_INCLUSIVE_INCLUSIVE
					 | (PRIORITY << android.text.SpannedClass.SPAN_PRIORITY_SHIFT));
			}
		}
コード例 #2
0
ファイル: MeasuredText.cs プロジェクト: hakeemsm/XobotOS
		internal virtual float addStyleRun(android.text.TextPaint paint, int len, android.graphics.Paint
			.FontMetricsInt fm)
		{
			if (fm != null)
			{
				paint.getFontMetricsInt(fm);
			}
			int p = mPos;
			mPos = p + len;
			if (mEasy)
			{
				int flags = mDir == android.text.Layout.DIR_LEFT_TO_RIGHT ? android.graphics.Canvas
					.DIRECTION_LTR : android.graphics.Canvas.DIRECTION_RTL;
				return paint.getTextRunAdvances(mChars, p, len, p, len, flags, mWidths, p);
			}
			float totalAdvance = 0;
			int level = mLevels[p];
			{
				int q = p;
				int i = p + 1;
				int e = p + len;
				for (; ; ++i)
				{
					if (i == e || mLevels[i] != level)
					{
						int flags = (level & unchecked((int)(0x1))) == 0 ? android.graphics.Canvas.DIRECTION_LTR
							 : android.graphics.Canvas.DIRECTION_RTL;
						totalAdvance += paint.getTextRunAdvances(mChars, q, i - q, q, i - q, flags, mWidths
							, q);
						if (i == e)
						{
							break;
						}
						q = i;
						level = mLevels[i];
					}
				}
			}
			return totalAdvance;
		}