public SizeF GetStringSize(string aString, string aFontName, float aFontSize, HorizontalAlignment aHorizontalAlignment, VerticalAlignment aVerticalAlignment)
        {
            if (aString == null)
            {
                return(new SizeF());
            }

            var vTextPaint = new TextPaint {
                TextSize = aFontSize
            };

            vTextPaint.SetTypeface(NativeFontService.Instance.GetTypeface(aFontName));

            Layout.Alignment vAlignment;
            switch (aHorizontalAlignment)
            {
            case HorizontalAlignment.Center:
                vAlignment = Layout.Alignment.AlignCenter;
                break;

            case HorizontalAlignment.Right:
                vAlignment = Layout.Alignment.AlignOpposite;
                break;

            default:
                vAlignment = Layout.Alignment.AlignNormal;
                break;
            }

            StaticLayout vLayout = TextLayoutUtils.CreateLayout(aString, vTextPaint, null, vAlignment);
            SizeF        vSize   = vLayout.GetTextSizeAsSizeF(false);

            vLayout.Dispose();
            return(vSize);
        }
Beispiel #2
0
 private void SetFont()
 {
     using (var typeface = Typeface.Create(_FontFamily, IsItalic ? TypefaceStyle.Italic : TypefaceStyle.Normal))
     {
         _native.SetTypeface(typeface);
     }
 }
Beispiel #3
0
        private static TextPaint InnerBuildPaint(FontWeight fontWeight, FontStyle fontStyle, FontFamily fontFamily, double fontSize, double characterSpacing, Windows.UI.Color foreground, BaseLineAlignment baselineAlignment, UnderlineStyle underlineStyle)
        {
            var paint = new TextPaint(PaintFlags.AntiAlias);

            var paintSpecs = BuildPaintValueSpecs(fontSize, characterSpacing);

            paint.Density       = paintSpecs.density;
            paint.TextSize      = paintSpecs.textSize;
            paint.UnderlineText = underlineStyle == UnderlineStyle.Single;

            if (baselineAlignment == BaseLineAlignment.Superscript)
            {
                paint.BaselineShift += (int)(paint.Ascent() / 2);
            }

            if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop)
            {
                paint.LetterSpacing = paintSpecs.letterSpacing;
            }
            else
            {
                LogCharacterSpacingNotSupported();
            }

            var typefaceStyle = TypefaceStyleHelper.GetTypefaceStyle(fontStyle, fontWeight);
            var typeface      = FontHelper.FontFamilyToTypeFace(fontFamily, fontWeight, typefaceStyle);

            paint.SetTypeface(typeface);
            paint.Color = foreground;

            return(paint);
        }
        private void DrawText(Canvas canvas, string text, float x, float y, float textSize, Typeface typeface,
                              Color color, float pictureWidth = 0)
        {
            var paintText = new TextPaint(PaintFlags.LinearText | PaintFlags.AntiAlias)
            {
                TextSize = textSize
            };

            var textRect = new Rect();

            paintText.GetTextBounds(text, 0, text.Length, textRect);
            paintText.SetARGB(color.A, color.R, color.G, color.B);
            paintText.SetTypeface(typeface);

            var p = new TextPaint();

            p.SetTypeface(typeface);

            p.TextSize = textSize;
            var ellipsizedText = TextUtils.Ellipsize(text, p, Width - 75.ToPixels(), TextUtils.TruncateAt.End);

            if (ellipsizedText.IsNullOrEmpty())
            {
                ellipsizedText = text;
            }

            if (this.Services().Localize.IsRightToLeft)
            {
                x = canvas.Width - pictureWidth - 15.ToPixels() - textRect.Width() - (ShowRightArrow ? 35.ToPixels() : 0);
            }

            canvas.DrawText(ellipsizedText, x, y, paintText);
        }
Beispiel #5
0
        /// <summary>
        /// Create an <see cref="IconDrawable" />.
        /// </summary>
        /// <param name="context">Your activity or application context.</param>
        /// <param name="icon">The icon you want this drawable to display.</param>
        public IconDrawable(Context context, IIcon icon)
        {
            var module = Iconize.FindModuleOf(icon);

            Console.WriteLine("IconDrawable.Icon " + icon);
            if (icon is null)
            {
                throw new Java.Lang.IllegalStateException("El icono no puede estar nulo.");
            }
            if (module is null)
            {
                throw new Java.Lang.IllegalStateException($"Unable to find the module associated with icon {icon.Key}, have you registered the module you are trying to use with Iconize.With(...) in your Application?");
            }

            _context = context;
            _icon    = icon;

            _paint = new TextPaint
            {
                AntiAlias     = true,
                TextAlign     = Paint.Align.Center,
                UnderlineText = false
            };
            _paint.SetStyle(Paint.Style.Fill);
            _paint.SetTypeface(module.ToTypeface(context));
        }
Beispiel #6
0
        public static Bitmap GetBitmap(Context context, string text, string backgroundColor, string textColor, int height = 3000, int width = 3000)
        {
            Bitmap bitmap = Bitmap.CreateBitmap(width, height, Bitmap.Config.Argb8888);
            Canvas canvas = new Canvas(bitmap);

            canvas.DrawColor(GetColorFromHex(backgroundColor));

            // new antialiased Paint
            TextPaint paint = new TextPaint(PaintFlags.AntiAlias)
            {
                // Set text Color
                Color = GetColorFromHex(textColor)
            };

            Typeface typeFace = Typeface.CreateFromAsset(context.Assets, "Neuton-Bold.ttf");

            paint.SetTypeface(typeFace);


            // text size in pixels
            paint.TextSize  = GetFontSize(text);
            paint.TextAlign = Paint.Align.Left;

            // set text width to canvas width minus screen padding(10 percent of width) in dp
            int textWidth = ((int)(canvas.Width - (0.1 * width)));

            var textPreview = new SpannableString(text);

            // Reduce the text of the brand name
            textPreview.SetSpan(new RelativeSizeSpan(0.5f), text.Length - Helpers.Constants.BRAND_NAME.Length, text.Length, SpanTypes.ExclusiveExclusive);

            // init StaticLayout for text
            StaticLayout textLayout;

            if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
            {
                textLayout = StaticLayout.Builder.Obtain(textPreview, 0, text.Length, paint, textWidth).Build();
            }
            else
            {
                textLayout = new StaticLayout(textPreview, paint, textWidth, Layout.Alignment.AlignNormal, 1.0f, 0.0f, false);
            }

            // get height of multiline text
            int?textHeight = textLayout?.Height;

            // get position of text's top left corner
            float x = (bitmap.Width - textWidth) / 2;
            float y = (bitmap.Height - textHeight ?? 0) / 2;

            // draw text to the Canvas center
            canvas.Save();
            canvas.Translate(x, y);
            textLayout.Draw(canvas);
            canvas.Restore();

            return(bitmap);
        }
            void Apply(TextPaint paint)
            {
                paint.SetTypeface(_font.ToTypeface(_fontManager));

                paint.TextSize = TypedValue.ApplyDimension(
                    _font.AutoScalingEnabled ? ComplexUnitType.Sp : ComplexUnitType.Dip,
                    (float)_font.Size,
                    (_context ?? AAplication.Context)?.Resources?.DisplayMetrics);
            }
Beispiel #8
0
        //http://egoco.de/post/19077604048/calculating-the-height-of-text-in-android
        //http://stackoverflow.com/questions/16082359/how-to-auto-adjust-text-size-on-a-multi-line-textview-according-to-the-view-max
        public SizeF MeasureString(string text, int maxWidth = 2147483647)
        {
            TextPaint paint = AndroidBrush.CreateTextPaint();

            paint.TextSize = SizeInPoints;
            paint.SetTypeface(InnerFont);
            AndroidTextLayout layout = new AndroidTextLayout(paint);

            return(layout.MeasureString(text, maxWidth));
        }
Beispiel #9
0
 private void Init(Context context, Icon icon)
 {
     _context = context;
     _icon    = icon;
     _paint   = new TextPaint();
     _paint.SetTypeface(Iconify.FindTypefaceOf(icon).GetTypeface(context));
     _paint.SetStyle(Paint.Style.Fill);
     _paint.TextAlign     = Paint.Align.Center;
     _paint.UnderlineText = false;
     _paint.Color         = Color.Black;
     _paint.AntiAlias     = true;
 }
Beispiel #10
0
        //http://egoco.de/post/19077604048/calculating-the-height-of-text-in-android
        //http://stackoverflow.com/questions/16082359/how-to-auto-adjust-text-size-on-a-multi-line-textview-according-to-the-view-max
        public SizeF MeasureString(string text, int maxWidth = 2147483647)
        {
            var key = new TextMeasureKey(text, InnerFont, SizeInPoints, maxWidth);

            return(_measurements.GetOrAdd(key, k =>
            {
                TextPaint paint = AndroidBrush.CreateTextPaint();
                paint.TextSize = k.SizeInPoints;
                paint.SetTypeface(k.Font);
                AndroidTextLayout layout = new AndroidTextLayout(paint);
                return layout.MeasureString(k.Text, k.MaxWidth);
            }));
        }
Beispiel #11
0
        public Bitmap drawTextToBitmap(Photo photo)
        {
            Android.Content.Res.Resources resources = context.Resources;
            BitmapFactory.Options         options   = new BitmapFactory.Options();
            options.InScaled = false;
            Bitmap bitmap = BitmapFactory.DecodeResource(resources, photo.mPhotoID, options);

            try
            {
                float         scale        = resources.DisplayMetrics.Density;
                Bitmap.Config bitmapConfig = bitmap.GetConfig();
                // set default bitmap config if none
                if (bitmapConfig == null)
                {
                    bitmapConfig = Bitmap.Config.Argb8888;
                }
                // resource bitmaps are imutable,
                // so we need to convert it to mutable one
                bitmap = bitmap.Copy(bitmapConfig, true);
                Console.WriteLine("Height:" + bitmap.Height + " Width:" + bitmap.Width);
                Canvas canvas = new Canvas(bitmap);
                Console.WriteLine("Canvas Height:" + canvas.Height + " Width:" + canvas.Width);
                TextPaint mTextPaint = new TextPaint(PaintFlags.AntiAlias);
                mTextPaint.Color = Color.ParseColor(photo.Hex);
                mTextPaint.SetTypeface(Typeface.Create(Typeface.DefaultBold, TypefaceStyle.Bold));
                int size = 30;
                mTextPaint.TextSize = ((int)(size * scale));
                StaticLayout mTextLayout = new StaticLayout(TrophyName, mTextPaint, (int)photo.W, Layout.Alignment.AlignCenter, 1.0f, 0.0f, false);
                while (true)
                {
                    if (mTextLayout.Height > photo.H)
                    {
                        mTextPaint.TextSize = (((size--) * scale));
                        mTextLayout         = new StaticLayout(TrophyName, mTextPaint, (int)photo.W, Layout.Alignment.AlignCenter, 1.0f, 0.0f, false);
                    }
                    else
                    {
                        break;
                    }
                }
                canvas.Save();
                canvas.Translate(photo.X, photo.Y + (photo.H - mTextLayout.Height) / 2);
                mTextLayout.Draw(canvas);
                canvas.Restore();
            }
            catch (Exception e)
            {
                Console.WriteLine("Bitmap Text Merge Exception:" + e.ToString());
            }
            return(bitmap);
        }
Beispiel #12
0
        private void ApplyFont (TextPaint p)
        {
            var oldTypeface = p.Typeface;
            var oldStyle = oldTypeface != null ? oldTypeface.Style : TypefaceStyle.Normal;
            var fakeStyle = oldStyle & ~font.Typeface.Style;

            if ((fakeStyle & TypefaceStyle.Bold) != 0)
                p.FakeBoldText = true;

            if ((fakeStyle & TypefaceStyle.Italic) != 0)
                p.TextSkewX = -0.25f;

            p.SetTypeface (font.Typeface);
        }
Beispiel #13
0
		public static TextPaint GlobalGetFontPaint (Font font, TextAlignment alignment)
		{
			var paint = new TextPaint (PaintFlags.AntiAlias);
			paint.TextAlign = Paint.Align.Left;
			if (alignment == TextAlignment.Center)
				paint.TextAlign = Paint.Align.Center;
			else if (alignment == TextAlignment.Right)
				paint.TextAlign = Paint.Align.Right;

			paint.TextSize = (float)font.Size;
			var typeface = Typeface.Create (font.Family, TypefaceStyle.Normal);
			paint.SetTypeface (typeface);

			return paint;
		}
Beispiel #14
0
        public FontDrawable(Context context, string text, Color iconColor, int iconSizeDP, string font)
        {
            this.text = text;
            if (font == null || font.Length <= 0)
            {
                font = "fontawesome.ttf";
            }

            paint.SetTypeface(Typeface.CreateFromAsset(context.Assets, font));
            paint.SetStyle(Paint.Style.Fill);
            paint.TextAlign = Paint.Align.Center;
            paint.Color     = iconColor;
            paint.AntiAlias = true;
            size            = GetPX(context, iconSizeDP);
            SetBounds(0, 0, size, size);
        }
        private TextPaint getPaint(IBrush brush)
        {
            TextPaint paint = ((AndroidBrush)brush).InnerBrush;

            paint.SetTypeface(((AndroidFont)_config.Font).InnerFont);
            paint.TextSize = _config.Font.SizeInPoints;
            if (_config.Font.Style.HasFlag(FontStyle.Underline))
            {
                paint.Flags |= PaintFlags.UnderlineText;
            }
            if (_config.Font.Style.HasFlag(FontStyle.Strikeout))
            {
                paint.Flags |= PaintFlags.StrikeThruText;
            }
            return(paint);
        }
 private void InitPaint()
 {
     mTextPaint           = new TextPaint();
     mTextPaint.AntiAlias = true;
     mTextPaint.TextSize  = TextSize;
     mTextPaint.Color     = mColor;
     mTextPaint.SetStyle(APaint.Style.Fill);
     mTextPaint.SetTypeface(Typeface);
     mTextPaintOutline           = new TextPaint();
     mTextPaintOutline.AntiAlias = true;
     mTextPaintOutline.TextSize  = TextSize;
     mTextPaintOutline.Color     = mBorderColor;
     mTextPaintOutline.SetStyle(APaint.Style.Stroke);
     mTextPaintOutline.SetTypeface(Typeface);
     mTextPaintOutline.StrokeWidth = mBorderSize;
 }
        private void InitPaint()
        {
            mTextPaint           = new TextPaint();
            mTextPaint.AntiAlias = true;     // (true);
            mTextPaint.TextSize  = TextSize; // (getTextSize());
            mTextPaint.Color     = mColor;   //  SetColor(mColor);
            mTextPaint.SetStyle(Android.Graphics.Paint.Style.Fill);
            mTextPaint.SetTypeface(Typeface);

            mTextPaintOutline           = new TextPaint();
            mTextPaintOutline.AntiAlias = true;// (true);
            mTextPaintOutline.TextSize  = TextSize;
            mTextPaintOutline.Color     = mBorderColor;
            mTextPaintOutline.SetStyle(Android.Graphics.Paint.Style.Stroke);
            mTextPaintOutline.SetTypeface(Typeface);
            mTextPaintOutline.StrokeWidth = mBorderSize;// SetStrokeWidth(mBorderSize);
        }
Beispiel #18
0
        private void ApplyFont(TextPaint p)
        {
            var oldTypeface = p.Typeface;
            var oldStyle    = oldTypeface != null ? oldTypeface.Style : TypefaceStyle.Normal;
            var fakeStyle   = oldStyle & ~font.Typeface.Style;

            if ((fakeStyle & TypefaceStyle.Bold) != 0)
            {
                p.FakeBoldText = true;
            }

            if ((fakeStyle & TypefaceStyle.Italic) != 0)
            {
                p.TextSkewX = -0.25f;
            }

            p.SetTypeface(font.Typeface);
        }
        private static void ApplyCustomTypeFace(TextPaint paint, Typeface typeFace)
        {
            TypefaceStyle oldStyle;
            Typeface      old = paint.Typeface;

            if (old == null)
            {
                oldStyle = TypefaceStyle.Normal;
            }
            else
            {
                oldStyle = old.Style;
            }

            // TODO: Ver si tenemos que setear el fake bold, italic

            paint.SetTypeface(typeFace);
        }
Beispiel #20
0
        private void Init(Context context, string fontFacePath)
        {
            _context = context;

            _paint = new TextPaint
            {
                AntiAlias     = true,
                Color         = Android.Graphics.Color.Black,
                TextAlign     = Paint.Align.Center,
                UnderlineText = false
            };
            _paint.SetStyle(Paint.Style.Fill);

            if (fontFacePath != null)
            {
                _paint.SetTypeface(Typeface.CreateFromAsset(context.Assets, $"{fontFacePath}.ttf"));
            }
        }
 /// <summary>
 /// Initializes the specified context.
 /// </summary>
 /// <param name="context">The context.</param>
 /// <param name="icon">The icon.</param>
 /// <exception cref="Java.Lang.IllegalStateException">Unable to find the module associated  +
 ///                         with icon  + icon.Key + , have you registered the module  +
 ///                         you are trying to use with Iconize.With(...) in your Application?</exception>
 private void Init(Context context, IIcon icon)
 {
     _context = context;
     _icon = icon;
     _paint = new TextPaint();
     var module = Iconize.FindModuleOf(icon);
     if (module == null)
     {
         throw new Java.Lang.IllegalStateException("Unable to find the module associated " +
                 "with icon " + icon.Key + ", have you registered the module " +
                 "you are trying to use with Iconize.With(...) in your Application?");
     }
     _paint.SetTypeface(module.ToTypeface(context));
     _paint.SetStyle(Paint.Style.Fill);
     _paint.TextAlign = Paint.Align.Center;
     _paint.UnderlineText = false;
     _paint.Color = Android.Graphics.Color.Black;
     _paint.AntiAlias = true;
 }
        public SizeF GetStringSize(string value, string fontName, float fontSize)
        {
            if (value == null)
            {
                return(new SizeF());
            }

            var textPaint = new TextPaint {
                TextSize = fontSize
            };

            textPaint.SetTypeface(NativeFontService.Instance.GetTypeface(fontName));

            var staticLayout = TextLayoutUtils.CreateLayout(value, textPaint, null, Layout.Alignment.AlignNormal);
            var size         = staticLayout.GetTextSizeAsSizeF(false);

            staticLayout.Dispose();
            return(size);
        }
Beispiel #23
0
        public MainRecyclerViewTouchCallback(Context context, MainRecyclerView recyclerView)
            : base(0, ItemTouchHelper.Left | ItemTouchHelper.Right)
        {
            this.recyclerView = recyclerView;

            backgrounds = new[] { Resource.Color.playButtonRed, Resource.Color.playButtonGreen }
                .Select(res => new Color(ContextCompat.GetColor(context, res)))
                .Select(color => new ColorDrawable(color))
                .ToArray();

            textMargin = 16.DpToPixels(context);

            textPaint.Color = Color.White;
            textPaint.TextAlign = Paint.Align.Left;
            textPaint.TextSize = 15.SpToPixels(context);
            textPaint.SetTypeface(Typeface.Create("sans-serif-medium", TypefaceStyle.Normal));

            deleteTextWidth = (int)textPaint.MeasureText(Delete);
        }
        /// <summary>
        /// Create an <see cref="IconDrawable" />.
        /// </summary>
        /// <param name="context">Your activity or application context.</param>
        /// <param name="iconKey">The icon key you want this drawable to display.</param>
        /// <exception cref="ArgumentException">If the key doesn't match any icon.</exception>
        public IconDrawable(Context context, String iconKey)
        {
            if (FontAwesomeRegular.Items.TryGetValue(iconKey, out char iconChar))
            {
                return;
            }

            _iconChar = iconChar;
            _context  = context;

            _paint = new TextPaint
            {
                AntiAlias     = true,
                TextAlign     = Paint.Align.Center,
                UnderlineText = false
            };
            _paint.SetStyle(Paint.Style.Fill);
            _paint.SetTypeface(GetTypeface(context));
        }
 private void Init(Context context, IIcon icon)
 {
     _context = context;
     _icon = icon;
     _paint = new TextPaint();
     var module = Iconize.FindModuleOf(icon);
     if (module == null)
     {
         throw new Java.Lang.IllegalStateException("Unable to find the module associated " +
                 "with icon " + icon.Key + ", have you registered the module " +
                 "you are trying to use with Iconize.With(...) in your Application?");
     }
     _paint.SetTypeface(module.GetTypeface(context));
     _paint.SetStyle(Paint.Style.Fill);
     _paint.TextAlign = Paint.Align.Center;
     _paint.UnderlineText = false;
     _paint.Color = global::Android.Graphics.Color.Black;
     _paint.AntiAlias = true;
 }
Beispiel #26
0
 private void Init(Context context, IIcon icon)
 {
     this.context = context;
     this.icon = icon;
     paint = new TextPaint();
     IconFontDescriptorWrapper descriptor = Iconify.FindTypefaceOf(icon);
     if (descriptor == null)
     {
         throw new IllegalStateException("Unable to find the module associated " +
                 "with icon " + icon.Key + ", have you registered the module " +
                 "you are trying to use with Iconify.with(...) in your Application?");
     }
     paint.SetTypeface(descriptor.GetTypeface(context));
     paint.SetStyle(Paint.Style.Fill);
     paint.TextAlign = Paint.Align.Center;
     paint.UnderlineText = false;
     paint.Color = new Android.Graphics.Color(0, 0, 0);
     //paint.Color = Color.Black;
     paint.AntiAlias = true;
 }
Beispiel #27
0
        private static NativeCanvasState CreateNewState(object context)
        {
            if (_defaultFillPaint == null)
            {
                _defaultFillPaint = new global::Android.Graphics.Paint();
                _defaultFillPaint.SetARGB(255, 255, 255, 255);
                _defaultFillPaint.SetStyle(global::Android.Graphics.Paint.Style.Fill);
                _defaultFillPaint.AntiAlias = true;

                _defaultStrokePaint = new global::Android.Graphics.Paint();
                _defaultStrokePaint.SetARGB(255, 0, 0, 0);
                _defaultStrokePaint.StrokeWidth = 1;
                _defaultStrokePaint.StrokeMiter = CanvasDefaults.DefaultMiterLimit;
                _defaultStrokePaint.SetStyle(global::Android.Graphics.Paint.Style.Stroke);
                _defaultStrokePaint.AntiAlias = true;

                _defaultFontPaint = new TextPaint();
                _defaultFontPaint.SetARGB(255, 0, 0, 0);
                _defaultFontPaint.AntiAlias = true;

                var arial = NativeFontService.Instance.GetTypeface("Arial");
                if (arial != null)
                {
                    _defaultFontPaint.SetTypeface(arial);
                }
                else
                {
                    Logger.Warn("Unable to set the default font paint to Arial");
                }
            }

            var state = new NativeCanvasState
            {
                FillPaint   = new global::Android.Graphics.Paint(_defaultFillPaint),
                StrokePaint = new global::Android.Graphics.Paint(_defaultStrokePaint),
                FontPaint   = new TextPaint(_defaultFontPaint),
                FontName    = NativeFontService.SystemFont
            };

            return(state);
        }
        TextPaint GetFontPaint(Font font, TextAlignment alignment)
        {
            var paint = new TextPaint(PaintFlags.AntiAlias);

            paint.TextAlign = Paint.Align.Left;
            if (alignment == TextAlignment.Center)
            {
                paint.TextAlign = Paint.Align.Center;
            }
            else if (alignment == TextAlignment.Right)
            {
                paint.TextAlign = Paint.Align.Right;
            }

            paint.TextSize = (float)font.Size;
            var typeface = Typeface.Create(font.Family, TypefaceStyle.Normal);

            paint.SetTypeface(typeface);

            return(paint);
        }
Beispiel #29
0
        private void Init(Context context, IIcon icon)
        {
            this.context = context;
            this.icon    = icon;
            paint        = new TextPaint();
            IconFontDescriptorWrapper descriptor = Iconify.FindTypefaceOf(icon);

            if (descriptor == null)
            {
                throw new IllegalStateException("Unable to find the module associated " +
                                                "with icon " + icon.Key + ", have you registered the module " +
                                                "you are trying to use with Iconify.with(...) in your Application?");
            }
            paint.SetTypeface(descriptor.GetTypeface(context));
            paint.SetStyle(Paint.Style.Fill);
            paint.TextAlign     = Paint.Align.Center;
            paint.UnderlineText = false;
            paint.Color         = new Android.Graphics.Color(0, 0, 0);
            //paint.Color = Color.Black;
            paint.AntiAlias = true;
        }
Beispiel #30
0
        public static TextPaint GlobalGetFontPaint(Font font, TextAlignment alignment)
        {
            var paint = new TextPaint(PaintFlags.AntiAlias);

            paint.TextAlign = Paint.Align.Left;
            if (alignment == TextAlignment.Center)
            {
                paint.TextAlign = Paint.Align.Center;
            }
            else if (alignment == TextAlignment.Right)
            {
                paint.TextAlign = Paint.Align.Right;
            }

            var density = global::Android.App.Application.Context.Resources.DisplayMetrics.Density;

            paint.TextSize = (float)font.Size * density;
            var typeface = Typeface.Create(font.Family, TypefaceStyle.Normal);

            paint.SetTypeface(typeface);

            return(paint);
        }
Beispiel #31
0
		void Initialize ()
		{
			Clickable = true;
			Click += HandleClick;

			textSize = TypedValue.ApplyDimension (ComplexUnitType.Sp, 14, Resources.DisplayMetrics);
			spacing = TypedValue.ApplyDimension (ComplexUnitType.Dip, 24, Resources.DisplayMetrics);
			knobWidth = TypedValue.ApplyDimension (ComplexUnitType.Dip, 6, Resources.DisplayMetrics);
			knobPadding = TypedValue.ApplyDimension (ComplexUnitType.Dip, 2, Resources.DisplayMetrics);
			cornerRadius = TypedValue.ApplyDimension (ComplexUnitType.Dip, 2, Resources.DisplayMetrics);

			normalColor = Resources.GetColor (Resource.Color.dimmed_text_color);
			selectedColor = Resources.GetColor (Resource.Color.highlight_text_color);

			bgColor = Resources.GetColor (Resource.Color.primary_background);
			textPaint = new TextPaint { AntiAlias = true };
			textPaint.SetTypeface (Typeface.Create ("sans-serif-condensed", TypefaceStyle.Normal));
			textPaint.TextSize = textSize;
			textPaint.TextAlign = Paint.Align.Center;
			textPaint.Color = normalColor;

			CreateTextLayouts ();
		}
        public override void Draw(Canvas canvas)
        {
            base.Draw(canvas);

            TextPaint paint = new TextPaint();

            paint.AntiAlias = true;
            paint.SetTypeface(Control.Typeface);
            paint.TextSize = myFontSize * scaledDensity;
            paint.Color    = Android.Graphics.Color.Red;

            Paint.FontMetrics metrics = paint.GetFontMetrics();

            Rect bounds = new Rect();

            paint.GetTextBounds(Element.Text, 0, Element.Text.Length, bounds);

            canvas.DrawText(
                Element.Text,
                0.5f * MeasuredWidth - bounds.Left - 0.5f * bounds.Width(),
                0.5f * MeasuredHeight - metrics.Ascent - 0.5f * (metrics.Bottom - metrics.Top),
                paint
                );
        }
Beispiel #33
0
        public override Carto.Graphics.Bitmap OnDrawPopup(PopupDrawInfo popupDrawInfo)
        {
            PopupStyle style = popupDrawInfo.Popup.Style;

            // Calculate scaled dimensions
            float DPToPX = popupDrawInfo.DPToPX;
            float PXTODP = 1 / DPToPX;

            if (style.ScaleWithDPI)
            {
                DPToPX = 1;
            }
            else
            {
                PXTODP = 1;
            }

            float screenWidth  = popupDrawInfo.ScreenBounds.GetWidth() * PXTODP;
            float screenHeight = popupDrawInfo.ScreenBounds.GetHeight() * PXTODP;

            // Update sizes based on scale (uses extension method, cf. Shared/Extensions
            int fontSize = FontSize.Update(DPToPX);

            int triangleWidth  = TriangleSize.Update(DPToPX);
            int triangleHeight = TriangleSize.Update(DPToPX);

            int strokeWidth   = StrokeWidth.Update(DPToPX);
            int screenPadding = ScreenPadding.Update(DPToPX);

            // Set font
            var font = Android.Graphics.Typeface.Create("HelveticaNeue-Light", Android.Graphics.TypefaceStyle.Normal);

            // Calculate the maximum popup size, adjust with dpi
            int maxPopupWidth = (int)(Math.Min(screenWidth, screenHeight));

            float halfStrokeWidth = strokeWidth * 0.5f;
            int   maxTextWidth    = maxPopupWidth - (2 * screenPadding + strokeWidth);

            // Measure text
            TextPaint textPaint = new TextPaint {
                Color = TextColor, TextSize = fontSize
            };

            textPaint.SetTypeface(font);

            var textLayout = new StaticLayout(text, textPaint, maxTextWidth, Layout.Alignment.AlignNormal, 1, 0, false);

            int textX = (int)Math.Min(textPaint.MeasureText(text), textLayout.Width);
            int textY = textLayout.Height;

            int popupWidth  = textX + (2 * PopupPadding + strokeWidth + triangleWidth);
            int popupHeight = textY + (2 * PopupPadding + strokeWidth);

            var bitmap = Android.Graphics.Bitmap.CreateBitmap(popupWidth, popupHeight, Android.Graphics.Bitmap.Config.Argb8888);
            var canvas = new Android.Graphics.Canvas(bitmap);

            var trianglePath = new Android.Graphics.Path();

            trianglePath.MoveTo(triangleWidth, 0);
            trianglePath.LineTo(halfStrokeWidth, triangleHeight * 0.5f);
            trianglePath.LineTo(triangleWidth, triangleHeight);
            trianglePath.Close();

            int triangleOffsetX = 0;
            int triangleOffsetY = (popupHeight - triangleHeight) / 2;

            // Create paint object
            var paint = new Android.Graphics.Paint();

            paint.AntiAlias = true;
            paint.SetStyle(Android.Graphics.Paint.Style.Stroke);
            paint.StrokeWidth = strokeWidth;
            paint.Color       = StrokeColor;

            // Stroke background
            var background = new Android.Graphics.RectF();

            background.Left   = triangleWidth;
            background.Top    = halfStrokeWidth;
            background.Right  = popupWidth - strokeWidth;
            background.Bottom = popupHeight - strokeWidth;
            canvas.DrawRect(background, paint);

            // Stroke triangle
            canvas.Save();
            canvas.Translate(triangleOffsetX, triangleOffsetY);
            canvas.DrawPath(trianglePath, paint);
            canvas.Restore();

            // Fill background
            paint.SetStyle(Android.Graphics.Paint.Style.Fill);
            paint.Color = BackgroundColor;
            canvas.DrawRect(background, paint);

            // Fill triangle
            canvas.Save();
            canvas.Translate(triangleOffsetX, triangleOffsetY);
            canvas.DrawPath(trianglePath, paint);
            canvas.Restore();

            if (textLayout != null)
            {
                // Draw text
                canvas.Save();
                canvas.Translate(halfStrokeWidth + triangleWidth + PopupPadding, halfStrokeWidth + PopupPadding);
                textLayout.Draw(canvas);
                canvas.Restore();
            }

            return(BitmapUtils.CreateBitmapFromAndroidBitmap(bitmap));
        }
 public override void UpdateMeasureState(TextPaint tp)
 {
     tp.SetTypeface(mTypeface);
     tp.Flags = tp.Flags | PaintFlags.SubpixelText;
 }
Beispiel #35
0
        public CompassView(Context context, Android.Util.IAttributeSet attrs, int defStyle)
            : base(context, attrs, defStyle)
        {
            _paint = new Paint();
            _paint.SetStyle(Paint.Style.Fill);
            _paint.AntiAlias = true;
            _paint.TextSize = (float)DIRECTION_TEXT_HEIGHT;
            _paint.SetTypeface(Typeface.Create("sans-serif-thin", TypefaceStyle.Normal));

            _tickPaint = new Paint();
            _tickPaint.SetStyle(Paint.Style.Stroke);
            _tickPaint.StrokeWidth = (float)TICK_WIDTH;
            _tickPaint.AntiAlias = true;
            _tickPaint.Color = Color.White;

            _placePaint = new TextPaint();
            _placePaint.SetStyle(Paint.Style.Fill);
            _placePaint.AntiAlias = true;
            _placePaint.Color = Color.White;
            _placePaint.TextSize = (float)PLACE_TEXT_HEIGHT;
            _placePaint.SetTypeface(Typeface.Create("sans-serif-light", TypefaceStyle.Normal));

            _path = new Path();
            _textBounds = new Rect();
            _allBounds = new List<Rect>();

            _distanceFormat = NumberFormat.GetNumberInstance(Locale.Default);
            _distanceFormat.MinimumFractionDigits = 0;
            _distanceFormat.MaximumFractionDigits = 1;

            _placeBitmap = BitmapFactory.DecodeResource(context.Resources, Resource.Drawable.place_mark);
            _animatedHeading = Double.NaN;

            _directions = context.Resources.GetStringArray(Resource.Array.direction_abbreviations);

            _animator = new ValueAnimator();
            setupAnimator();
        }
        public override Carto.Graphics.Bitmap OnDrawPopup(PopupDrawInfo popupDrawInfo)
        {
            PopupStyle style = popupDrawInfo.Popup.Style;

            // Calculate scaled dimensions
            float DPToPX = popupDrawInfo.DPToPX;
            float PXTODP = 1 / DPToPX;

            if (style.ScaleWithDPI)
            {
                DPToPX = 1;
            }
            else
            {
                PXTODP = 1;
            }

            float screenWidth = popupDrawInfo.ScreenBounds.GetWidth() * PXTODP;
            float screenHeight = popupDrawInfo.ScreenBounds.GetHeight() * PXTODP;

            // Update sizes based on scale (uses extension method, cf. Shared/Extensions
            int fontSize = FontSize.Update(DPToPX);

            int triangleWidth = TriangleSize.Update(DPToPX);
            int triangleHeight = TriangleSize.Update(DPToPX);

            int strokeWidth = StrokeWidth.Update(DPToPX);
            int screenPadding = ScreenPadding.Update(DPToPX);

            // Set font
            var font = Android.Graphics.Typeface.Create("HelveticaNeue-Light", Android.Graphics.TypefaceStyle.Normal);

            // Calculate the maximum popup size, adjust with dpi
            int maxPopupWidth = (int)(Math.Min(screenWidth, screenHeight));

            float halfStrokeWidth = strokeWidth * 0.5f;
            int maxTextWidth = maxPopupWidth - (2 * screenPadding + strokeWidth);

            // Measure text
            TextPaint textPaint = new TextPaint { Color = TextColor, TextSize = fontSize };
            textPaint.SetTypeface(font);

            var textLayout = new StaticLayout(text, textPaint, maxTextWidth, Layout.Alignment.AlignNormal, 1, 0, false);

            int textX = (int)Math.Min(textPaint.MeasureText(text), textLayout.Width);
            int textY = textLayout.Height;

            int popupWidth = textX + (2 * PopupPadding + strokeWidth + triangleWidth);
            int popupHeight = textY + (2 * PopupPadding + strokeWidth);

            var bitmap = Android.Graphics.Bitmap.CreateBitmap(popupWidth, popupHeight, Android.Graphics.Bitmap.Config.Argb8888);
            var canvas = new Android.Graphics.Canvas(bitmap);

            var trianglePath = new Android.Graphics.Path();
            trianglePath.MoveTo(triangleWidth, 0);
            trianglePath.LineTo(halfStrokeWidth, triangleHeight * 0.5f);
            trianglePath.LineTo(triangleWidth, triangleHeight);
            trianglePath.Close();

            int triangleOffsetX = 0;
            int triangleOffsetY = (popupHeight - triangleHeight) / 2;

            // Create paint object
            var paint = new Android.Graphics.Paint();
            paint.AntiAlias = true;
            paint.SetStyle(Android.Graphics.Paint.Style.Stroke);
            paint.StrokeWidth = strokeWidth;
            paint.Color = StrokeColor;

            // Stroke background
            var background = new Android.Graphics.RectF();
            background.Left = triangleWidth;
            background.Top = halfStrokeWidth;
            background.Right = popupWidth - strokeWidth;
            background.Bottom = popupHeight - strokeWidth;
            canvas.DrawRect(background, paint);

            // Stroke triangle
            canvas.Save();
            canvas.Translate(triangleOffsetX, triangleOffsetY);
            canvas.DrawPath(trianglePath, paint);
            canvas.Restore();

            // Fill background
            paint.SetStyle(Android.Graphics.Paint.Style.Fill);
            paint.Color = BackgroundColor;
            canvas.DrawRect(background, paint);

            // Fill triangle
            canvas.Save();
            canvas.Translate(triangleOffsetX, triangleOffsetY);
            canvas.DrawPath(trianglePath, paint);
            canvas.Restore();

            if (textLayout != null)
            {
                // Draw text
                canvas.Save();
                canvas.Translate(halfStrokeWidth + triangleWidth + PopupPadding, halfStrokeWidth + PopupPadding);
                textLayout.Draw(canvas);
                canvas.Restore();
            }

            return BitmapUtils.CreateBitmapFromAndroidBitmap(bitmap);
        }
 public override void UpdateDrawState(TextPaint tp)
 {
     tp.SetTypeface(mTypeface);
 }
        void Initialize()
        {
            Clickable = true;
            Click += HandleClick;

            textSize = TypedValue.ApplyDimension (ComplexUnitType.Sp, 14, Resources.DisplayMetrics);
            spacing = TypedValue.ApplyDimension (ComplexUnitType.Dip, 24, Resources.DisplayMetrics);
            knobWidth = TypedValue.ApplyDimension (ComplexUnitType.Dip, 6, Resources.DisplayMetrics);
            knobPadding = TypedValue.ApplyDimension (ComplexUnitType.Dip, 2, Resources.DisplayMetrics);
            cornerRadius = TypedValue.ApplyDimension (ComplexUnitType.Dip, 2, Resources.DisplayMetrics);

            normalColor = Resources.GetColor (Resource.Color.dimmed_text_color);
            selectedColor = Resources.GetColor (Resource.Color.highlight_text_color);

            bgColor = Resources.GetColor (Resource.Color.primary_background);
            textPaint = new TextPaint { AntiAlias = true };
            textPaint.SetTypeface (Typeface.Create ("sans-serif-condensed", TypefaceStyle.Normal));
            textPaint.TextSize = textSize;
            textPaint.TextAlign = Paint.Align.Center;
            textPaint.Color = normalColor;

            CreateTextLayouts ();
        }
        internal CCTexture2D CreateTextSprite(string text, CCFontDefinition textDefinition)
        {
            if (string.IsNullOrEmpty(text))
                return new CCTexture2D();

            int imageWidth;
            int imageHeight;
            var textDef = textDefinition;
            var contentScaleFactorWidth = CCLabel.DefaultTexelToContentSizeRatios.Width;
            var contentScaleFactorHeight = CCLabel.DefaultTexelToContentSizeRatios.Height;

            textDef.FontSize *= contentScaleFactorWidth;
            textDef.Dimensions.Width *= contentScaleFactorWidth;
            textDef.Dimensions.Height *= contentScaleFactorHeight;

            bool hasPremultipliedAlpha;

            var display = Game.Activity.WindowManager.DefaultDisplay;
            var metrics = new DisplayMetrics();
            display.GetMetrics(metrics);

            // Do not take into account ScaleDensity for now.
//            var fontScaleFactor = metrics.ScaledDensity;
//            textDef.FontSize = (int)(textDef.FontSize * fontScaleFactor);


            // out paint object to hold our drawn text
//            var paintFlags = new PaintFlags();
//            if (textDefinition.isShouldAntialias)
//                paintFlags = PaintFlags.AntiAlias | PaintFlags.SubpixelText;
            
            var textPaint = new TextPaint();
            textPaint.Color = Android.Graphics.Color.White;
            textPaint.TextAlign = Paint.Align.Left;
            textPaint.AntiAlias = textDefinition.isShouldAntialias;

            textPaint.TextSize = textDef.FontSize;

            var fontName = textDef.FontName;
            var ext = System.IO.Path.GetExtension(fontName);
            if (!String.IsNullOrEmpty(ext) && ext.ToLower() == ".ttf")
            {
                
                CCContentManager.SharedContentManager.GetAssetStreamAsBytes(fontName, out fontName);

                var activity = Game.Activity;

                try
                {
                    var typeface = Typeface.CreateFromAsset(activity.Assets, fontName);
                    textPaint.SetTypeface(typeface);
                }
                catch (Exception)
                {
                    textPaint.SetTypeface(Typeface.Create(fontName, TypefaceStyle.Normal));
                }
            }
            else
            {
                textPaint.SetTypeface(Typeface.Create(fontName, TypefaceStyle.Normal));
            }

            // color
            var foregroundColor = Android.Graphics.Color.White;

            textPaint.Color = foregroundColor;

            // alignment
            var horizontalAlignment = textDef.Alignment;
            var verticleAlignement = textDef.LineAlignment;

            var textAlign = (CCTextAlignment.Right == horizontalAlignment) ? Layout.Alignment.AlignOpposite
                : (CCTextAlignment.Center == horizontalAlignment) ? Layout.Alignment.AlignCenter
                : Layout.Alignment.AlignNormal;

            // LineBreak
            // TODO: Find a way to specify the type of line breaking if possible.

            var dimensions = new CCSize(textDef.Dimensions.Width, textDef.Dimensions.Height);

            var layoutAvailable = true;
            if (dimensions.Width <= 0)
            {
                dimensions.Width = 8388608;
                layoutAvailable = false;
            }

            if (dimensions.Height <= 0)
            {
                dimensions.Height = 8388608;
                layoutAvailable = false;
            }


            // Get bounding rectangle - we need its attribute and method values
            var layout = new StaticLayout(text, textPaint, 
                (int)dimensions.Width, textAlign, 1.0f, 0.0f, false);

            var boundingRect = new Rect();
            var lineBounds = new Rect();

            // Loop through all the lines so we can find our drawing offsets
            var lineCount = layout.LineCount;

            // early out if something went wrong somewhere and nothing is to be drawn
            if (lineCount == 0)
                return new CCTexture2D();

            for (int lc = 0; lc < lineCount; lc++)
            {
                layout.GetLineBounds(lc, lineBounds);
                var max = (int)Math.Ceiling(layout.GetLineMax(lc));

                if (boundingRect.Right < max)
                    boundingRect.Right = max;

                boundingRect.Bottom = lineBounds.Bottom;
            }

            if (!layoutAvailable)
            {
                if (dimensions.Width == 8388608)
                {
                    dimensions.Width = boundingRect.Right;
                }
                if (dimensions.Height == 8388608)
                {
                    dimensions.Height = boundingRect.Bottom;
                }
            }

            imageWidth = (int)dimensions.Width;
            imageHeight = (int)dimensions.Height;

            // Recreate our layout based on calculated dimensions so that we can draw the text correctly
            // in our image when Alignment is not Left.
            if (textAlign != Layout.Alignment.AlignNormal)
            {
                layout = new StaticLayout(text, textPaint, 
                    (int)dimensions.Width, textAlign, 1.0f, 0.0f, false);
              
            }


            // Line alignment
            var yOffset = (CCVerticalTextAlignment.Bottom == verticleAlignement 
                || boundingRect.Bottom >= dimensions.Height) ? dimensions.Height - boundingRect.Bottom  // align to bottom
                : (CCVerticalTextAlignment.Top == verticleAlignement) ? 0                    // align to top
                : (imageHeight - boundingRect.Bottom) * 0.5f;                                   // align to center

            try {

                // Create our platform dependant image to be drawn to.
                using (Bitmap textureBitmap = Bitmap.CreateBitmap(imageWidth, imageHeight, Bitmap.Config.Argb8888))
                {
                    using (Canvas drawingCanvas = new Canvas(textureBitmap))
                    {
                        drawingCanvas.DrawARGB(0, 255, 255, 255);

                        // Set our vertical alignment
                        drawingCanvas.Translate(0, yOffset);

                        // Now draw the text using our layout
                        layout.Draw(drawingCanvas);

                        // Create a pixel array
                        int[] pixels = new int[imageWidth * imageHeight];

                        // Now lets get our pixels.
                        // We use CopyPixelsToBuffer so that it is in Premultiplied Alpha already.
                        // Using Bitmap.GetPixels return non Premultiplied Alpha which causes blending problems
                        Java.Nio.IntBuffer byteBuffer = Java.Nio.IntBuffer.Allocate(imageWidth * imageHeight);
                        textureBitmap.CopyPixelsToBuffer(byteBuffer);
                        if (byteBuffer.HasArray)
                        {
                            byteBuffer.Rewind();
                            byteBuffer.Get(pixels, 0, pixels.Length);
                        }

                        // Make sure we recycle - Let's keep it green
                        textureBitmap.Recycle();

                        // Here we create our Texture and then set our pixel data.
                        var texture = new CCTexture2D(imageWidth, imageHeight);
                        texture.XNATexture.SetData<int>(pixels);

                        return texture;
                    }
                }   
            }
            catch (Exception exc)
            {
                CCLog.Log ("CCLabel Android: Error creating native label:{0}\n{1}", exc.Message, exc.StackTrace);
                return new CCTexture2D();
            }
        }
        TextPaint GetFontPaint(Font font, TextAlignment alignment)
        {
            var paint = new TextPaint (PaintFlags.AntiAlias);
            paint.TextAlign = Paint.Align.Left;
            if (alignment == TextAlignment.Center)
                paint.TextAlign = Paint.Align.Left;
            else if (alignment == TextAlignment.Right)
                paint.TextAlign = Paint.Align.Right;

            //	paint.TextSize = (float)font.Size;
            //	var typeface = Typeface.Create (font.Family, TypefaceStyle.Normal);
            //	paint.SetTypeface (typeface);
            var typeface = Typeface.Default;
            paint.SetTypeface (typeface);
            float androidFontSize = AndroidPlatform.SizeToAndroid ((float)font.Size);
            paint.TextSize = androidFontSize;
            return paint;
        }
Beispiel #41
0
 public override void UpdateDrawState (TextPaint ds)
 {
     base.UpdateDrawState (ds);
     ds.UnderlineText = false;
     ds.SetTypeface (Android.Graphics.Typeface.DefaultBold);
 }
		public override void UpdateDrawState(TextPaint tp)
		{
			tp.SetTypeface(typeFace);
			tp.Flags = tp.Flags | PaintFlags.SubpixelText;
		}
		public override void UpdateMeasureState(TextPaint p)
		{
			p.SetTypeface(typeFace);
			p.Flags = p.Flags | PaintFlags.SubpixelText;
		}
Beispiel #44
0
 private void Init(Context context, Icon icon)
 {
     _context = context;
     _icon = icon;
     _paint = new TextPaint();
     _paint.SetTypeface(Iconify.FindTypefaceOf(icon).GetTypeface(context));
     _paint.SetStyle(Paint.Style.Fill);
     _paint.TextAlign = Paint.Align.Center;
     _paint.UnderlineText = false;
     _paint.Color = Color.Black;
     _paint.AntiAlias = true;
 }