Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1077)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TitleBitmapFactory.java

Issue 842083003: Upstream CompositorButton, VirtualView and TitleBitmapFactory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix typos Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/components/VirtualView.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TitleBitmapFactory.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TitleBitmapFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TitleBitmapFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..dbf39e0adc8d9012b2d17235bc359b83babe5dcb
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TitleBitmapFactory.java
@@ -0,0 +1,152 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.compositor.layouts.content;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Paint.FontMetrics;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.text.Layout;
+import android.text.TextPaint;
+import android.text.TextUtils;
+import android.util.FloatMath;
+import android.util.Log;
+import android.view.InflateException;
+
+import org.chromium.chrome.R;
+
+/**
+ * A factory that creates text and favicon bitmaps. This is only relevant for the phone tab
Nico 2015/07/22 20:15:51 I don't think this comment is true: This seems to
Jaekyun Seok (inactive) 2015/07/22 21:35:55 I will update this soon.
+ * switcher.
+ */
+public class TitleBitmapFactory {
+ private static final String TAG = "TitleBitmapFactory";
+
+ private static final float TITLE_WIDTH_PERCENTAGE = 1.f;
+
+ private final int mMaxWidth;
+ private final int mNullFaviconResourceId;
+
+ private final TextPaint mTextPaint;
+ private int mFaviconDimension;
+ private final int mViewHeight;
+ private final float mTextHeight;
+ private final float mTextYOffset;
+
+ /**
+ * @param context The current Android's context.
+ * @param incognito Whether the title are for incognito mode.
+ * @param nullFaviconResourceId A drawable resource id of a default favicon.
+ */
+ public TitleBitmapFactory(Context context, boolean incognito, int nullFaviconResourceId) {
+ mNullFaviconResourceId = nullFaviconResourceId;
+
+ Resources res = context.getResources();
+ int textColor = res.getColor(incognito ? R.color.compositor_tab_title_bar_text_incognito
+ : R.color.compositor_tab_title_bar_text);
+ int shadowColor = res.getColor(incognito ? R.color.compositor_tab_title_bar_shadow_incognito
+ : R.color.compositor_tab_title_bar_shadow);
+ int shadowXOffset = res.getDimensionPixelOffset(incognito
+ ? R.dimen.compositor_tab_title_bar_shadow_x_offset_incognito
+ : R.dimen.compositor_tab_title_bar_shadow_x_offset);
+ int shadowYOffset = res.getDimensionPixelOffset(incognito
+ ? R.dimen.compositor_tab_title_bar_shadow_y_offset_incognito
+ : R.dimen.compositor_tab_title_bar_shadow_y_offset);
+ float textSize = res.getDimensionPixelSize(R.dimen.compositor_tab_title_text_size);
+ float adjustedTextSize = textSize * res.getConfiguration().fontScale;
+
+ boolean fakeBoldText = res.getBoolean(R.bool.compositor_tab_title_fake_bold_text);
+
+ mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
+ mTextPaint.setColor(textColor);
+ if (shadowXOffset != 0 && shadowYOffset != 0) {
+ mTextPaint.setShadowLayer(0.001f, shadowXOffset, shadowYOffset, shadowColor);
+ }
+ mTextPaint.setTextSize(adjustedTextSize);
+ mTextPaint.setFakeBoldText(fakeBoldText);
+ mTextPaint.density = res.getDisplayMetrics().density;
+
+ FontMetrics textFontMetrics = mTextPaint.getFontMetrics();
+ mTextHeight = FloatMath.ceil(textFontMetrics.bottom - textFontMetrics.top);
+ mTextYOffset = -textFontMetrics.top;
+
+ mFaviconDimension = res.getDimensionPixelSize(R.dimen.compositor_tab_title_favicon_size);
+ mViewHeight = (int) Math.max(mFaviconDimension, mTextHeight);
+
+ int width = res.getDisplayMetrics().widthPixels;
+ int height = res.getDisplayMetrics().heightPixels;
+ mMaxWidth = (int) (TITLE_WIDTH_PERCENTAGE * Math.max(width, height));
+
+ // Set the favicon dimension here.
+ mFaviconDimension = Math.min(mMaxWidth, mFaviconDimension);
+ }
+
+ /**
+ * Generates the favicon bitmap.
+ *
+ * @param context Android's UI context.
+ * @param favicon The favicon of the tab.
+ * @return The Bitmap with the favicon.
+ */
+ public Bitmap getFaviconBitmap(Context context, Bitmap favicon) {
+ try {
+ Bitmap b = Bitmap.createBitmap(
+ mFaviconDimension, mFaviconDimension, Bitmap.Config.ARGB_8888);
+ Canvas c = new Canvas(b);
+ if (favicon == null) {
+ Drawable drawable = context.getResources().getDrawable(mNullFaviconResourceId);
+ if (drawable != null && drawable instanceof BitmapDrawable) {
+ favicon = ((BitmapDrawable) drawable).getBitmap();
+ }
+ }
+ if (favicon != null) {
+ c.drawBitmap(favicon, Math.round((mFaviconDimension - favicon.getWidth()) / 2.0f),
+ Math.round((mFaviconDimension - favicon.getHeight()) / 2.0f), null);
+ }
+ return b;
+ } catch (OutOfMemoryError ex) {
+ Log.w(TAG, "OutOfMemoryError while building favicon texture.");
+ } catch (InflateException ex) {
+ Log.w(TAG, "InflateException while building favicon texture.");
+ }
+
+ return null;
+ }
+
+ /**
+ * Generates the title bitmap.
+ *
+ * @param context Android's UI context.
+ * @param title The title of the tab.
+ * @return The Bitmap with the title.
+ */
+ public Bitmap getTitleBitmap(Context context, String title) {
+ try {
+ boolean drawText = !TextUtils.isEmpty(title);
+ int textWidth =
+ drawText ? (int) FloatMath.ceil(Layout.getDesiredWidth(title, mTextPaint)) : 0;
+ // Minimum 1 width bitmap to avoid createBitmap function's IllegalArgumentException,
+ // when textWidth == 0.
+ Bitmap b = Bitmap.createBitmap(Math.max(Math.min(mMaxWidth, textWidth), 1), mViewHeight,
+ Bitmap.Config.ARGB_8888);
+ Canvas c = new Canvas(b);
+ if (drawText) {
+ c.drawText(title, 0, title.length(), 0,
+ Math.round((mViewHeight - mTextHeight) / 2.0f + mTextYOffset), mTextPaint);
+ }
+ return b;
+ } catch (OutOfMemoryError ex) {
+ Log.w(TAG, "OutOfMemoryError while building title texture.");
+ } catch (InflateException ex) {
+ Log.w(TAG, "InflateException while building title texture.");
+ }
+
+ return null;
+ }
+}
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/components/VirtualView.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698