| Index: chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarViewResourceAdapter.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarViewResourceAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarViewResourceAdapter.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ec77f1d2259a987138fa54d0ef01232dfa6fd0fb
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarViewResourceAdapter.java
|
| @@ -0,0 +1,84 @@
|
| +// 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.toolbar;
|
| +
|
| +import android.graphics.Canvas;
|
| +import android.graphics.PorterDuff;
|
| +import android.graphics.Rect;
|
| +import android.view.View;
|
| +
|
| +import org.chromium.chrome.R;
|
| +import org.chromium.ui.resources.dynamics.ViewResourceAdapter;
|
| +
|
| +/**
|
| + * A {@link ViewResourceAdapter} specified for {@link ToolbarLayout}.
|
| + */
|
| +public class ToolbarViewResourceAdapter extends ViewResourceAdapter {
|
| + private final int mToolbarActualHeightPx;
|
| + private final int[] mTempPosition = new int[2];
|
| +
|
| + private final View mToolbarContainer;
|
| + private final Toolbar mToolbar;
|
| +
|
| + /** Builds the resource adapter for the toolbar. */
|
| + public ToolbarViewResourceAdapter(View toolbarContainer, Toolbar toolbar) {
|
| + super(toolbarContainer);
|
| +
|
| + mToolbarContainer = toolbarContainer;
|
| + mToolbar = toolbar;
|
| + mToolbarActualHeightPx = toolbarContainer.getResources().getDimensionPixelSize(
|
| + R.dimen.control_container_height);
|
| + }
|
| +
|
| + /**
|
| + * Force this resource to be recaptured in full, ignoring the checks
|
| + * {@link #invalidate(Rect)} does.
|
| + */
|
| + public void forceInvalidate() {
|
| + super.invalidate(null);
|
| + }
|
| +
|
| + @Override
|
| + public boolean isDirty() {
|
| + return mToolbar != null && mToolbar.isReadyForTextureCapture() && super.isDirty();
|
| + }
|
| +
|
| + @Override
|
| + protected void onCaptureStart(Canvas canvas, Rect dirtyRect) {
|
| + // Erase the shadow component of the bitmap if the clip rect included shadow. Because
|
| + // this region is not opaque painting twice would be bad.
|
| + if (dirtyRect.intersects(
|
| + 0, mToolbarActualHeightPx,
|
| + mToolbarContainer.getWidth(), mToolbarContainer.getHeight())) {
|
| + canvas.save();
|
| + canvas.clipRect(
|
| + 0, mToolbarActualHeightPx,
|
| + mToolbarContainer.getWidth(), mToolbarContainer.getHeight());
|
| + canvas.drawColor(0, PorterDuff.Mode.CLEAR);
|
| + canvas.restore();
|
| + }
|
| +
|
| + mToolbar.setTextureCaptureMode(true);
|
| +
|
| + super.onCaptureStart(canvas, dirtyRect);
|
| + }
|
| +
|
| + @Override
|
| + protected void onCaptureEnd() {
|
| + mToolbar.setTextureCaptureMode(false);
|
| + }
|
| +
|
| + @Override
|
| + protected void computeContentPadding(Rect outContentPadding) {
|
| + outContentPadding.set(0, 0, mToolbarContainer.getWidth(), mToolbarActualHeightPx);
|
| + }
|
| +
|
| + @Override
|
| + protected void computeContentAperture(Rect outContentAperture) {
|
| + mToolbar.getLocationBarContentRect(outContentAperture);
|
| + mToolbar.getPositionRelativeToContainer(mToolbarContainer, mTempPosition);
|
| + outContentAperture.offset(mTempPosition[0], mTempPosition[1]);
|
| + }
|
| +}
|
|
|