182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir/* 2ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * Copyright 2018 The Android Open Source Project 382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * 482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * Licensed under the Apache License, Version 2.0 (the "License"); 582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * you may not use this file except in compliance with the License. 682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * You may obtain a copy of the License at 782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * 882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * http://www.apache.org/licenses/LICENSE-2.0 982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * 1082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * Unless required by applicable law or agreed to in writing, software 1182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * distributed under the License is distributed on an "AS IS" BASIS, 1282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * See the License for the specific language governing permissions and 1482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * limitations under the License. 1582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir */ 16ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.emoji.text; 1782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir 18ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP; 1982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir 2082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinirimport android.graphics.Canvas; 2182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinirimport android.graphics.Paint; 2238746a682208c764867ffe4415d0b62fb22b5b9aAurimas Liutikasimport android.text.TextPaint; 2338746a682208c764867ffe4415d0b62fb22b5b9aAurimas Liutikas 24ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.IntRange; 25ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.NonNull; 26ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RequiresApi; 27ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.RestrictTo; 2882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir 2982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir/** 3082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * EmojiSpan subclass used to render emojis using Typeface. 3182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * 3282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * @hide 3382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir */ 3482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir@RestrictTo(LIBRARY_GROUP) 3577b5c5b734f9f665577d1e3d178615db43ae1d4fSiyamed Sinir@RequiresApi(19) 3682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinirpublic final class TypefaceEmojiSpan extends EmojiSpan { 3782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir 3882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir /** 393dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir * Paint object used to draw a background in debug mode. 403dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir */ 413dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir private static Paint sDebugPaint; 423dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir 433dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir /** 4482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * Default constructor. 4582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * 4682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * @param metadata metadata representing the emoji that this span will draw 4782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir */ 4882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir public TypefaceEmojiSpan(final EmojiMetadata metadata) { 4982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir super(metadata); 5082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir } 5182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir 5282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir @Override 533dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir public void draw(@NonNull final Canvas canvas, final CharSequence text, 543dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir @IntRange(from = 0) final int start, @IntRange(from = 0) final int end, final float x, 553dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir final int top, final int y, final int bottom, @NonNull final Paint paint) { 563dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir if (EmojiCompat.get().isEmojiSpanIndicatorEnabled()) { 573dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir canvas.drawRect(x, top , x + getWidth(), bottom, getDebugPaint()); 583dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir } 5982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir getMetadata().draw(canvas, x, y, paint); 6082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir } 613dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir 623dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir private static Paint getDebugPaint() { 633dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir if (sDebugPaint == null) { 643dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir sDebugPaint = new TextPaint(); 653dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir sDebugPaint.setColor(EmojiCompat.get().getEmojiSpanIndicatorColor()); 663dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir sDebugPaint.setStyle(Paint.Style.FILL); 673dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir } 683dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir return sDebugPaint; 693dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir } 703dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir 713dc8b512ac3a1a8fb0b7b2618246d50fd2f3367bSiyamed Sinir 7282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir} 73