OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.compositor.layouts.content; | 5 package org.chromium.chrome.browser.compositor.layouts.content; |
6 | 6 |
7 import android.content.Context; | 7 import android.content.Context; |
8 import android.content.res.Resources; | 8 import android.content.res.Resources; |
9 import android.graphics.Bitmap; | 9 import android.graphics.Bitmap; |
10 import android.graphics.Canvas; | 10 import android.graphics.Canvas; |
11 import android.graphics.Paint; | 11 import android.graphics.Paint; |
12 import android.graphics.Paint.FontMetrics; | 12 import android.graphics.Paint.FontMetrics; |
13 import android.graphics.drawable.BitmapDrawable; | 13 import android.graphics.drawable.BitmapDrawable; |
14 import android.graphics.drawable.Drawable; | 14 import android.graphics.drawable.Drawable; |
15 import android.text.Layout; | 15 import android.text.Layout; |
16 import android.text.TextPaint; | 16 import android.text.TextPaint; |
17 import android.text.TextUtils; | 17 import android.text.TextUtils; |
18 import android.util.FloatMath; | |
19 import android.util.Log; | 18 import android.util.Log; |
20 import android.view.InflateException; | 19 import android.view.InflateException; |
21 | 20 |
22 import org.chromium.chrome.R; | 21 import org.chromium.chrome.R; |
23 | 22 |
24 /** | 23 /** |
25 * A factory that creates text and favicon bitmaps. This is only relevant for th
e phone tab | 24 * A factory that creates text and favicon bitmaps. This is only relevant for th
e phone tab |
26 * switcher. | 25 * switcher. |
27 */ | 26 */ |
28 public class TitleBitmapFactory { | 27 public class TitleBitmapFactory { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); | 65 mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); |
67 mTextPaint.setColor(textColor); | 66 mTextPaint.setColor(textColor); |
68 if (shadowXOffset != 0 && shadowYOffset != 0) { | 67 if (shadowXOffset != 0 && shadowYOffset != 0) { |
69 mTextPaint.setShadowLayer(0.001f, shadowXOffset, shadowYOffset, shad
owColor); | 68 mTextPaint.setShadowLayer(0.001f, shadowXOffset, shadowYOffset, shad
owColor); |
70 } | 69 } |
71 mTextPaint.setTextSize(adjustedTextSize); | 70 mTextPaint.setTextSize(adjustedTextSize); |
72 mTextPaint.setFakeBoldText(fakeBoldText); | 71 mTextPaint.setFakeBoldText(fakeBoldText); |
73 mTextPaint.density = res.getDisplayMetrics().density; | 72 mTextPaint.density = res.getDisplayMetrics().density; |
74 | 73 |
75 FontMetrics textFontMetrics = mTextPaint.getFontMetrics(); | 74 FontMetrics textFontMetrics = mTextPaint.getFontMetrics(); |
76 mTextHeight = FloatMath.ceil(textFontMetrics.bottom - textFontMetrics.to
p); | 75 mTextHeight = (float) Math.ceil(textFontMetrics.bottom - textFontMetrics
.top); |
77 mTextYOffset = -textFontMetrics.top; | 76 mTextYOffset = -textFontMetrics.top; |
78 | 77 |
79 mFaviconDimension = res.getDimensionPixelSize(R.dimen.compositor_tab_tit
le_favicon_size); | 78 mFaviconDimension = res.getDimensionPixelSize(R.dimen.compositor_tab_tit
le_favicon_size); |
80 mViewHeight = (int) Math.max(mFaviconDimension, mTextHeight); | 79 mViewHeight = (int) Math.max(mFaviconDimension, mTextHeight); |
81 | 80 |
82 int width = res.getDisplayMetrics().widthPixels; | 81 int width = res.getDisplayMetrics().widthPixels; |
83 int height = res.getDisplayMetrics().heightPixels; | 82 int height = res.getDisplayMetrics().heightPixels; |
84 mMaxWidth = (int) (TITLE_WIDTH_PERCENTAGE * Math.max(width, height)); | 83 mMaxWidth = (int) (TITLE_WIDTH_PERCENTAGE * Math.max(width, height)); |
85 | 84 |
86 // Set the favicon dimension here. | 85 // Set the favicon dimension here. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 * Generates the title bitmap. | 122 * Generates the title bitmap. |
124 * | 123 * |
125 * @param context Android's UI context. | 124 * @param context Android's UI context. |
126 * @param title The title of the tab. | 125 * @param title The title of the tab. |
127 * @return The Bitmap with the title. | 126 * @return The Bitmap with the title. |
128 */ | 127 */ |
129 public Bitmap getTitleBitmap(Context context, String title) { | 128 public Bitmap getTitleBitmap(Context context, String title) { |
130 try { | 129 try { |
131 boolean drawText = !TextUtils.isEmpty(title); | 130 boolean drawText = !TextUtils.isEmpty(title); |
132 int textWidth = | 131 int textWidth = |
133 drawText ? (int) FloatMath.ceil(Layout.getDesiredWidth(title
, mTextPaint)) : 0; | 132 drawText ? (int) Math.ceil(Layout.getDesiredWidth(title, mTe
xtPaint)) : 0; |
134 // Minimum 1 width bitmap to avoid createBitmap function's IllegalAr
gumentException, | 133 // Minimum 1 width bitmap to avoid createBitmap function's IllegalAr
gumentException, |
135 // when textWidth == 0. | 134 // when textWidth == 0. |
136 Bitmap b = Bitmap.createBitmap(Math.max(Math.min(mMaxWidth, textWidt
h), 1), mViewHeight, | 135 Bitmap b = Bitmap.createBitmap(Math.max(Math.min(mMaxWidth, textWidt
h), 1), mViewHeight, |
137 Bitmap.Config.ARGB_8888); | 136 Bitmap.Config.ARGB_8888); |
138 Canvas c = new Canvas(b); | 137 Canvas c = new Canvas(b); |
139 if (drawText) { | 138 if (drawText) { |
140 c.drawText(title, 0, title.length(), 0, | 139 c.drawText(title, 0, title.length(), 0, |
141 Math.round((mViewHeight - mTextHeight) / 2.0f + mTextYOf
fset), mTextPaint); | 140 Math.round((mViewHeight - mTextHeight) / 2.0f + mTextYOf
fset), mTextPaint); |
142 } | 141 } |
143 return b; | 142 return b; |
144 } catch (OutOfMemoryError ex) { | 143 } catch (OutOfMemoryError ex) { |
145 Log.w(TAG, "OutOfMemoryError while building title texture."); | 144 Log.w(TAG, "OutOfMemoryError while building title texture."); |
146 } catch (InflateException ex) { | 145 } catch (InflateException ex) { |
147 Log.w(TAG, "InflateException while building title texture."); | 146 Log.w(TAG, "InflateException while building title texture."); |
148 } | 147 } |
149 | 148 |
150 return null; | 149 return null; |
151 } | 150 } |
152 } | 151 } |
OLD | NEW |