summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkkimlabs <kkimlabs@chromium.org>2016-01-23 15:23:24 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-23 23:24:09 +0000
commit22367f6468e5a6b8e8d024f476826144b2099bac (patch)
tree62d62e0b40e84ac517ce37abe5b4a1e911aab546
parent639a26231590c62efabb2f571cb487330658cc59 (diff)
downloadchromium_src-22367f6468e5a6b8e8d024f476826144b2099bac.zip
chromium_src-22367f6468e5a6b8e8d024f476826144b2099bac.tar.gz
chromium_src-22367f6468e5a6b8e8d024f476826144b2099bac.tar.bz2
[Android] tab switcher exit animation gray line bug fix.
On existing tab switcher, a gray line was shown between toolbar and content unintentionally. This is clearly noticiable when the tab is NTP. Problems: - The border layer includes inner shadow that's not covered by fading- in toolbar. - The border layer is shifted by (0.5, 0.5) to avoid jaggies. - Linear interpolation of border layer on rasterization makes the top edge bleeding below. Fixes: - Seperates border layer and its inner shadow. - Also shifts the toolbar fading-in layer by (0.5, 0.5) - Use nearest neighbor rasterization when the toolbar is visible. CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel BUG=None Review URL: https://codereview.chromium.org/1584573005 Cr-Commit-Position: refs/heads/master@{#371149}
-rw-r--r--cc/layers/nine_patch_layer.cc16
-rw-r--r--cc/layers/nine_patch_layer.h2
-rw-r--r--cc/layers/nine_patch_layer_impl.cc161
-rw-r--r--cc/layers/nine_patch_layer_impl.h5
-rw-r--r--cc/layers/nine_patch_layer_impl_unittest.cc6
-rw-r--r--chrome/android/java/res/drawable-hdpi/tabswitcher_border_frame.9.pngbin322 -> 758 bytes
-rw-r--r--chrome/android/java/res/drawable-hdpi/tabswitcher_border_frame_inner_shadow.9.pngbin0 -> 235 bytes
-rw-r--r--chrome/android/java/res/drawable-mdpi/tabswitcher_border_frame.9.pngbin234 -> 557 bytes
-rw-r--r--chrome/android/java/res/drawable-mdpi/tabswitcher_border_frame_inner_shadow.9.pngbin0 -> 217 bytes
-rw-r--r--chrome/android/java/res/drawable-xhdpi/tabswitcher_border_frame.9.pngbin454 -> 1108 bytes
-rw-r--r--chrome/android/java/res/drawable-xhdpi/tabswitcher_border_frame_inner_shadow.9.pngbin0 -> 319 bytes
-rw-r--r--chrome/android/java/res/drawable-xxhdpi/tabswitcher_border_frame.9.pngbin650 -> 1632 bytes
-rw-r--r--chrome/android/java/res/drawable-xxhdpi/tabswitcher_border_frame_inner_shadow.9.pngbin0 -> 431 bytes
-rw-r--r--chrome/android/java/res/drawable-xxxhdpi/tabswitcher_border_frame.9.pngbin927 -> 2300 bytes
-rw-r--r--chrome/android/java/res/drawable-xxxhdpi/tabswitcher_border_frame_inner_shadow.9.pngbin0 -> 634 bytes
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/components/LayoutTab.java7
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java34
-rw-r--r--chrome/browser/android/compositor/layer/tab_layer.cc51
-rw-r--r--chrome/browser/android/compositor/layer/tab_layer.h3
-rw-r--r--chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.cc9
-rw-r--r--chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.h2
21 files changed, 155 insertions, 141 deletions
diff --git a/cc/layers/nine_patch_layer.cc b/cc/layers/nine_patch_layer.cc
index 26bb584..218f1da 100644
--- a/cc/layers/nine_patch_layer.cc
+++ b/cc/layers/nine_patch_layer.cc
@@ -18,8 +18,9 @@ scoped_refptr<NinePatchLayer> NinePatchLayer::Create(
}
NinePatchLayer::NinePatchLayer(const LayerSettings& settings)
- : UIResourceLayer(settings), fill_center_(false) {
-}
+ : UIResourceLayer(settings),
+ fill_center_(false),
+ nearest_neighbor_(false) {}
NinePatchLayer::~NinePatchLayer() {}
@@ -51,6 +52,14 @@ void NinePatchLayer::SetFillCenter(bool fill_center) {
SetNeedsCommit();
}
+void NinePatchLayer::SetNearestNeighbor(bool nearest_neighbor) {
+ if (nearest_neighbor_ == nearest_neighbor)
+ return;
+
+ nearest_neighbor_ = nearest_neighbor;
+ SetNeedsCommit();
+}
+
void NinePatchLayer::PushPropertiesTo(LayerImpl* layer) {
UIResourceLayer::PushPropertiesTo(layer);
TRACE_EVENT0("cc", "NinePatchLayer::PushPropertiesTo");
@@ -61,7 +70,8 @@ void NinePatchLayer::PushPropertiesTo(LayerImpl* layer) {
} else {
DCHECK(layer_tree_host());
- layer_impl->SetLayout(image_aperture_, border_, fill_center_);
+ layer_impl->SetLayout(image_aperture_, border_, fill_center_,
+ nearest_neighbor_);
}
}
diff --git a/cc/layers/nine_patch_layer.h b/cc/layers/nine_patch_layer.h
index ff76663..a2c37e1 100644
--- a/cc/layers/nine_patch_layer.h
+++ b/cc/layers/nine_patch_layer.h
@@ -39,6 +39,7 @@ class CC_EXPORT NinePatchLayer : public UIResourceLayer {
// y-stretched to fit.
void SetAperture(const gfx::Rect& aperture);
void SetFillCenter(bool fill_center);
+ void SetNearestNeighbor(bool nearest_neighbor);
private:
explicit NinePatchLayer(const LayerSettings& settings);
@@ -47,6 +48,7 @@ class CC_EXPORT NinePatchLayer : public UIResourceLayer {
gfx::Rect border_;
bool fill_center_;
+ bool nearest_neighbor_;
// The transparent center region that shows the parent layer's contents in
// image space.
diff --git a/cc/layers/nine_patch_layer_impl.cc b/cc/layers/nine_patch_layer_impl.cc
index b31382f..933bf60 100644
--- a/cc/layers/nine_patch_layer_impl.cc
+++ b/cc/layers/nine_patch_layer_impl.cc
@@ -16,7 +16,8 @@ namespace cc {
NinePatchLayerImpl::NinePatchLayerImpl(LayerTreeImpl* tree_impl, int id)
: UIResourceLayerImpl(tree_impl, id),
- fill_center_(false) {}
+ fill_center_(false),
+ nearest_neighbor_(false) {}
NinePatchLayerImpl::~NinePatchLayerImpl() {}
@@ -29,7 +30,8 @@ void NinePatchLayerImpl::PushPropertiesTo(LayerImpl* layer) {
UIResourceLayerImpl::PushPropertiesTo(layer);
NinePatchLayerImpl* layer_impl = static_cast<NinePatchLayerImpl*>(layer);
- layer_impl->SetLayout(image_aperture_, border_, fill_center_);
+ layer_impl->SetLayout(image_aperture_, border_, fill_center_,
+ nearest_neighbor_);
}
static gfx::RectF NormalizedRect(float x,
@@ -46,18 +48,20 @@ static gfx::RectF NormalizedRect(float x,
void NinePatchLayerImpl::SetLayout(const gfx::Rect& aperture,
const gfx::Rect& border,
- bool fill_center) {
+ bool fill_center,
+ bool nearest_neighbor) {
// This check imposes an ordering on the call sequence. An UIResource must
// exist before SetLayout can be called.
DCHECK(ui_resource_id_);
- if (image_aperture_ == aperture &&
- border_ == border && fill_center_ == fill_center)
+ if (image_aperture_ == aperture && border_ == border &&
+ fill_center_ == fill_center && nearest_neighbor_ == nearest_neighbor)
return;
image_aperture_ = aperture;
border_ = border;
fill_center_ = fill_center;
+ nearest_neighbor_ = nearest_neighbor;
NoteLayerPropertyChanged();
}
@@ -101,7 +105,6 @@ void NinePatchLayerImpl::AppendQuads(
return;
static const bool flipped = false;
- static const bool nearest_neighbor = false;
static const bool premultiplied_alpha = true;
DCHECK(!bounds().IsEmpty());
@@ -219,18 +222,10 @@ void NinePatchLayerImpl::AppendQuads(
if (!visible_rect.IsEmpty()) {
TextureDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
- quad->SetNew(shared_quad_state,
- layer_top_left,
- opaque_rect,
- visible_rect,
- resource,
- premultiplied_alpha,
- uv_top_left.origin(),
- uv_top_left.bottom_right(),
- SK_ColorTRANSPARENT,
- vertex_opacity,
- flipped,
- nearest_neighbor);
+ quad->SetNew(shared_quad_state, layer_top_left, opaque_rect, visible_rect,
+ resource, premultiplied_alpha, uv_top_left.origin(),
+ uv_top_left.bottom_right(), SK_ColorTRANSPARENT,
+ vertex_opacity, flipped, nearest_neighbor_);
ValidateQuadResources(quad);
}
@@ -241,18 +236,10 @@ void NinePatchLayerImpl::AppendQuads(
if (!visible_rect.IsEmpty()) {
TextureDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
- quad->SetNew(shared_quad_state,
- layer_top_right,
- opaque_rect,
- visible_rect,
- resource,
- premultiplied_alpha,
- uv_top_right.origin(),
- uv_top_right.bottom_right(),
- SK_ColorTRANSPARENT,
- vertex_opacity,
- flipped,
- nearest_neighbor);
+ quad->SetNew(shared_quad_state, layer_top_right, opaque_rect, visible_rect,
+ resource, premultiplied_alpha, uv_top_right.origin(),
+ uv_top_right.bottom_right(), SK_ColorTRANSPARENT,
+ vertex_opacity, flipped, nearest_neighbor_);
ValidateQuadResources(quad);
}
@@ -263,18 +250,11 @@ void NinePatchLayerImpl::AppendQuads(
if (!visible_rect.IsEmpty()) {
TextureDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
- quad->SetNew(shared_quad_state,
- layer_bottom_left,
- opaque_rect,
- visible_rect,
- resource,
- premultiplied_alpha,
- uv_bottom_left.origin(),
- uv_bottom_left.bottom_right(),
- SK_ColorTRANSPARENT,
- vertex_opacity,
- flipped,
- nearest_neighbor);
+ quad->SetNew(shared_quad_state, layer_bottom_left, opaque_rect,
+ visible_rect, resource, premultiplied_alpha,
+ uv_bottom_left.origin(), uv_bottom_left.bottom_right(),
+ SK_ColorTRANSPARENT, vertex_opacity, flipped,
+ nearest_neighbor_);
ValidateQuadResources(quad);
}
@@ -285,18 +265,11 @@ void NinePatchLayerImpl::AppendQuads(
if (!visible_rect.IsEmpty()) {
TextureDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
- quad->SetNew(shared_quad_state,
- layer_bottom_right,
- opaque_rect,
- visible_rect,
- resource,
- premultiplied_alpha,
- uv_bottom_right.origin(),
- uv_bottom_right.bottom_right(),
- SK_ColorTRANSPARENT,
- vertex_opacity,
- flipped,
- nearest_neighbor);
+ quad->SetNew(shared_quad_state, layer_bottom_right, opaque_rect,
+ visible_rect, resource, premultiplied_alpha,
+ uv_bottom_right.origin(), uv_bottom_right.bottom_right(),
+ SK_ColorTRANSPARENT, vertex_opacity, flipped,
+ nearest_neighbor_);
ValidateQuadResources(quad);
}
@@ -307,18 +280,10 @@ void NinePatchLayerImpl::AppendQuads(
if (!visible_rect.IsEmpty()) {
TextureDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
- quad->SetNew(shared_quad_state,
- layer_top,
- opaque_rect,
- visible_rect,
- resource,
- premultiplied_alpha,
- uv_top.origin(),
- uv_top.bottom_right(),
- SK_ColorTRANSPARENT,
- vertex_opacity,
- flipped,
- nearest_neighbor);
+ quad->SetNew(shared_quad_state, layer_top, opaque_rect, visible_rect,
+ resource, premultiplied_alpha, uv_top.origin(),
+ uv_top.bottom_right(), SK_ColorTRANSPARENT, vertex_opacity,
+ flipped, nearest_neighbor_);
ValidateQuadResources(quad);
}
@@ -329,18 +294,10 @@ void NinePatchLayerImpl::AppendQuads(
if (!visible_rect.IsEmpty()) {
TextureDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
- quad->SetNew(shared_quad_state,
- layer_left,
- opaque_rect,
- visible_rect,
- resource,
- premultiplied_alpha,
- uv_left.origin(),
- uv_left.bottom_right(),
- SK_ColorTRANSPARENT,
- vertex_opacity,
- flipped,
- nearest_neighbor);
+ quad->SetNew(shared_quad_state, layer_left, opaque_rect, visible_rect,
+ resource, premultiplied_alpha, uv_left.origin(),
+ uv_left.bottom_right(), SK_ColorTRANSPARENT, vertex_opacity,
+ flipped, nearest_neighbor_);
ValidateQuadResources(quad);
}
@@ -351,18 +308,10 @@ void NinePatchLayerImpl::AppendQuads(
if (!visible_rect.IsEmpty()) {
TextureDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
- quad->SetNew(shared_quad_state,
- layer_right,
- opaque_rect,
- layer_right,
- resource,
- premultiplied_alpha,
- uv_right.origin(),
- uv_right.bottom_right(),
- SK_ColorTRANSPARENT,
- vertex_opacity,
- flipped,
- nearest_neighbor);
+ quad->SetNew(shared_quad_state, layer_right, opaque_rect, layer_right,
+ resource, premultiplied_alpha, uv_right.origin(),
+ uv_right.bottom_right(), SK_ColorTRANSPARENT, vertex_opacity,
+ flipped, nearest_neighbor_);
ValidateQuadResources(quad);
}
@@ -373,18 +322,10 @@ void NinePatchLayerImpl::AppendQuads(
if (!visible_rect.IsEmpty()) {
TextureDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
- quad->SetNew(shared_quad_state,
- layer_bottom,
- opaque_rect,
- visible_rect,
- resource,
- premultiplied_alpha,
- uv_bottom.origin(),
- uv_bottom.bottom_right(),
- SK_ColorTRANSPARENT,
- vertex_opacity,
- flipped,
- nearest_neighbor);
+ quad->SetNew(shared_quad_state, layer_bottom, opaque_rect, visible_rect,
+ resource, premultiplied_alpha, uv_bottom.origin(),
+ uv_bottom.bottom_right(), SK_ColorTRANSPARENT, vertex_opacity,
+ flipped, nearest_neighbor_);
ValidateQuadResources(quad);
}
@@ -396,18 +337,10 @@ void NinePatchLayerImpl::AppendQuads(
if (!visible_rect.IsEmpty()) {
TextureDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
- quad->SetNew(shared_quad_state,
- layer_center,
- opaque_rect,
- visible_rect,
- resource,
- premultiplied_alpha,
- uv_center.origin(),
- uv_center.bottom_right(),
- SK_ColorTRANSPARENT,
- vertex_opacity,
- flipped,
- nearest_neighbor);
+ quad->SetNew(shared_quad_state, layer_center, opaque_rect, visible_rect,
+ resource, premultiplied_alpha, uv_center.origin(),
+ uv_center.bottom_right(), SK_ColorTRANSPARENT,
+ vertex_opacity, flipped, nearest_neighbor_);
ValidateQuadResources(quad);
}
}
diff --git a/cc/layers/nine_patch_layer_impl.h b/cc/layers/nine_patch_layer_impl.h
index 28721b3..539d8e7 100644
--- a/cc/layers/nine_patch_layer_impl.h
+++ b/cc/layers/nine_patch_layer_impl.h
@@ -56,7 +56,8 @@ class CC_EXPORT NinePatchLayerImpl : public UIResourceLayerImpl {
// |fill_center| indicates whether to draw the center quad or not.
void SetLayout(const gfx::Rect& image_aperture,
const gfx::Rect& border,
- bool fill_center);
+ bool fill_center,
+ bool nearest_neighbor);
scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) override;
void PushPropertiesTo(LayerImpl* layer) override;
@@ -83,6 +84,8 @@ class CC_EXPORT NinePatchLayerImpl : public UIResourceLayerImpl {
bool fill_center_;
+ bool nearest_neighbor_;
+
DISALLOW_COPY_AND_ASSIGN(NinePatchLayerImpl);
};
diff --git a/cc/layers/nine_patch_layer_impl_unittest.cc b/cc/layers/nine_patch_layer_impl_unittest.cc
index 96778724..13c409e 100644
--- a/cc/layers/nine_patch_layer_impl_unittest.cc
+++ b/cc/layers/nine_patch_layer_impl_unittest.cc
@@ -68,7 +68,7 @@ void NinePatchLayerLayoutTest(const gfx::Size& bitmap_size,
host_impl.CreateUIResource(uid, bitmap);
layer->SetUIResourceId(uid);
layer->SetImageBounds(bitmap_size);
- layer->SetLayout(aperture_rect, border, fill_center);
+ layer->SetLayout(aperture_rect, border, fill_center, false);
AppendQuadsData data;
layer->AppendQuads(render_pass.get(), &data);
@@ -240,7 +240,7 @@ TEST(NinePatchLayerImplTest, Occlusion) {
gfx::Rect aperture = gfx::Rect(3, 3, 4, 4);
gfx::Rect border = gfx::Rect(300, 300, 400, 400);
- nine_patch_layer_impl->SetLayout(aperture, border, true);
+ nine_patch_layer_impl->SetLayout(aperture, border, true, false);
impl.CalcDrawProps(viewport_size);
@@ -318,7 +318,7 @@ TEST(NinePatchLayerImplTest, OpaqueRect) {
gfx::Rect aperture = gfx::Rect(3, 3, 4, 4);
gfx::Rect border = gfx::Rect(300, 300, 400, 400);
- nine_patch_layer_impl->SetLayout(aperture, border, true);
+ nine_patch_layer_impl->SetLayout(aperture, border, true, false);
impl.AppendQuadsWithOcclusion(nine_patch_layer_impl, gfx::Rect());
diff --git a/chrome/android/java/res/drawable-hdpi/tabswitcher_border_frame.9.png b/chrome/android/java/res/drawable-hdpi/tabswitcher_border_frame.9.png
index 4d7ef82..5310de7 100644
--- a/chrome/android/java/res/drawable-hdpi/tabswitcher_border_frame.9.png
+++ b/chrome/android/java/res/drawable-hdpi/tabswitcher_border_frame.9.png
Binary files differ
diff --git a/chrome/android/java/res/drawable-hdpi/tabswitcher_border_frame_inner_shadow.9.png b/chrome/android/java/res/drawable-hdpi/tabswitcher_border_frame_inner_shadow.9.png
new file mode 100644
index 0000000..2330db7
--- /dev/null
+++ b/chrome/android/java/res/drawable-hdpi/tabswitcher_border_frame_inner_shadow.9.png
Binary files differ
diff --git a/chrome/android/java/res/drawable-mdpi/tabswitcher_border_frame.9.png b/chrome/android/java/res/drawable-mdpi/tabswitcher_border_frame.9.png
index 3ddb84e..bfbb421 100644
--- a/chrome/android/java/res/drawable-mdpi/tabswitcher_border_frame.9.png
+++ b/chrome/android/java/res/drawable-mdpi/tabswitcher_border_frame.9.png
Binary files differ
diff --git a/chrome/android/java/res/drawable-mdpi/tabswitcher_border_frame_inner_shadow.9.png b/chrome/android/java/res/drawable-mdpi/tabswitcher_border_frame_inner_shadow.9.png
new file mode 100644
index 0000000..7abc73e
--- /dev/null
+++ b/chrome/android/java/res/drawable-mdpi/tabswitcher_border_frame_inner_shadow.9.png
Binary files differ
diff --git a/chrome/android/java/res/drawable-xhdpi/tabswitcher_border_frame.9.png b/chrome/android/java/res/drawable-xhdpi/tabswitcher_border_frame.9.png
index 8956cdc..4fcbac2 100644
--- a/chrome/android/java/res/drawable-xhdpi/tabswitcher_border_frame.9.png
+++ b/chrome/android/java/res/drawable-xhdpi/tabswitcher_border_frame.9.png
Binary files differ
diff --git a/chrome/android/java/res/drawable-xhdpi/tabswitcher_border_frame_inner_shadow.9.png b/chrome/android/java/res/drawable-xhdpi/tabswitcher_border_frame_inner_shadow.9.png
new file mode 100644
index 0000000..736bb3b
--- /dev/null
+++ b/chrome/android/java/res/drawable-xhdpi/tabswitcher_border_frame_inner_shadow.9.png
Binary files differ
diff --git a/chrome/android/java/res/drawable-xxhdpi/tabswitcher_border_frame.9.png b/chrome/android/java/res/drawable-xxhdpi/tabswitcher_border_frame.9.png
index bab46b4..98186c7 100644
--- a/chrome/android/java/res/drawable-xxhdpi/tabswitcher_border_frame.9.png
+++ b/chrome/android/java/res/drawable-xxhdpi/tabswitcher_border_frame.9.png
Binary files differ
diff --git a/chrome/android/java/res/drawable-xxhdpi/tabswitcher_border_frame_inner_shadow.9.png b/chrome/android/java/res/drawable-xxhdpi/tabswitcher_border_frame_inner_shadow.9.png
new file mode 100644
index 0000000..8029590
--- /dev/null
+++ b/chrome/android/java/res/drawable-xxhdpi/tabswitcher_border_frame_inner_shadow.9.png
Binary files differ
diff --git a/chrome/android/java/res/drawable-xxxhdpi/tabswitcher_border_frame.9.png b/chrome/android/java/res/drawable-xxxhdpi/tabswitcher_border_frame.9.png
index 4f107d4..3712cf0 100644
--- a/chrome/android/java/res/drawable-xxxhdpi/tabswitcher_border_frame.9.png
+++ b/chrome/android/java/res/drawable-xxxhdpi/tabswitcher_border_frame.9.png
Binary files differ
diff --git a/chrome/android/java/res/drawable-xxxhdpi/tabswitcher_border_frame_inner_shadow.9.png b/chrome/android/java/res/drawable-xxxhdpi/tabswitcher_border_frame_inner_shadow.9.png
new file mode 100644
index 0000000..d710bd4
--- /dev/null
+++ b/chrome/android/java/res/drawable-xxxhdpi/tabswitcher_border_frame_inner_shadow.9.png
Binary files differ
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/components/LayoutTab.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/components/LayoutTab.java
index 7969d63..9b759b8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/components/LayoutTab.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/components/LayoutTab.java
@@ -545,6 +545,13 @@ public class LayoutTab implements ChromeAnimation.Animatable<LayoutTab.Property>
}
/**
+ * @return The current alpha value at which the tab border inner shadow is drawn.
+ */
+ public float getBorderInnerShadowAlpha() {
+ return mBorderAlpha * (1.0f - mToolbarAlpha);
+ }
+
+ /**
* @param alpha The maximum alpha value of the close button on the border.
*/
public void setBorderCloseButtonAlpha(float alpha) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java
index d3fedd7..0ab8a6f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java
@@ -73,7 +73,8 @@ public class TabListSceneLayer extends SceneLayer {
nativePutLayer(mNativePtr, t.getId(), R.id.control_container, closeBtnResource,
R.drawable.tabswitcher_border_frame_shadow,
R.drawable.tabswitcher_border_frame_decoration, R.drawable.logo_card_back,
- borderResource, t.canUseLiveTexture(), t.getBackgroundColor(),
+ borderResource, R.drawable.tabswitcher_border_frame_inner_shadow,
+ t.canUseLiveTexture(), t.getBackgroundColor(),
getTabListBackgroundColor(context),
ApiCompatibilityUtils.getColor(res, borderColorResource), t.isIncognito(),
layout.getOrientation() == Orientation.PORTRAIT, t.getRenderX() * dpToPx,
@@ -86,8 +87,8 @@ public class TabListSceneLayer extends SceneLayer {
Math.min(t.getClippedHeight(), t.getScaledContentHeight()) * dpToPx,
t.getTiltXPivotOffset() * dpToPx, t.getTiltYPivotOffset() * dpToPx,
t.getTiltX(), t.getTiltY(), t.getAlpha(), t.getBorderAlpha() * decoration,
- decoration, t.getShadowOpacity() * decoration,
- t.getBorderCloseButtonAlpha() * decoration,
+ t.getBorderInnerShadowAlpha() * decoration, decoration,
+ t.getShadowOpacity() * decoration, t.getBorderCloseButtonAlpha() * decoration,
LayoutTab.CLOSE_BUTTON_WIDTH_DP * dpToPx, t.getStaticToViewBlend(),
t.getBorderScale(), t.getSaturation(), t.getBrightness(), t.showToolbar(),
t.getToolbarBackgroundColor(), t.anonymizeToolbar(), R.drawable.textbox,
@@ -129,18 +130,19 @@ public class TabListSceneLayer extends SceneLayer {
private native void nativeFinishBuildingFrame(long nativeTabListSceneLayer);
private native void nativePutLayer(long nativeTabListSceneLayer, int id, int toolbarResourceId,
int closeButtonResourceId, int shadowResourceId, int contourResourceId,
- int backLogoResourceId, int borderResourceId, boolean canUseLiveLayer,
- int tabBackgroundColor, int backgroundColor, int backLogoColor, boolean incognito,
- boolean isPortrait, float x, float y, float width, float height, float contentWidth,
- float contentHeight, float visibleContentHeight, float viewportX, float viewportY,
- float viewportWidth, float viewportHeight, float shadowX, float shadowY,
- float shadowWidth, float shadowHeight, float pivotX, float pivotY, float rotationX,
- float rotationY, float alpha, float borderAlpha, float contourAlpha, float shadowAlpha,
- float closeAlpha, float closeBtnWidth, float staticToViewBlend, float borderScale,
- float saturation, float brightness, boolean showToolbar, int toolbarBackgroundColor,
+ int backLogoResourceId, int borderResourceId, int borderInnerShadowResourceId,
+ boolean canUseLiveLayer, int tabBackgroundColor, int backgroundColor, int backLogoColor,
+ boolean incognito, boolean isPortrait, float x, float y, float width, float height,
+ float contentWidth, float contentHeight, float visibleContentHeight, float viewportX,
+ float viewportY, float viewportWidth, float viewportHeight, float shadowX,
+ float shadowY, float shadowWidth, float shadowHeight, float pivotX, float pivotY,
+ float rotationX, float rotationY, float alpha, float borderAlpha,
+ float borderInnerShadowAlpha, float contourAlpha, float shadowAlpha, float closeAlpha,
+ float closeBtnWidth, float staticToViewBlend, float borderScale, float saturation,
+ float brightness, boolean showToolbar, int toolbarBackgroundColor,
boolean anonymizeToolbar, int toolbarTextBoxResource, int toolbarTextBoxBackgroundColor,
- float toolbarTextBoxAlpha, float toolbarAlpha,
- float toolbarYOffset, float sideBorderScale, boolean attachContent,
- boolean insetVerticalBorder, LayerTitleCache layerTitleCache,
- TabContentManager tabContentManager, ResourceManager resourceManager);
+ float toolbarTextBoxAlpha, float toolbarAlpha, float toolbarYOffset,
+ float sideBorderScale, boolean attachContent, boolean insetVerticalBorder,
+ LayerTitleCache layerTitleCache, TabContentManager tabContentManager,
+ ResourceManager resourceManager);
}
diff --git a/chrome/browser/android/compositor/layer/tab_layer.cc b/chrome/browser/android/compositor/layer/tab_layer.cc
index ffa3b7e2..f3f263e 100644
--- a/chrome/browser/android/compositor/layer/tab_layer.cc
+++ b/chrome/browser/android/compositor/layer/tab_layer.cc
@@ -64,6 +64,7 @@ void TabLayer::SetProperties(int id,
int contour_resource_id,
int back_logo_resource_id,
int border_resource_id,
+ int border_inner_shadow_resource_id,
int default_background_color,
int back_logo_color,
bool is_portrait,
@@ -81,6 +82,7 @@ void TabLayer::SetProperties(int id,
float rotation_y,
float alpha,
float border_alpha,
+ float border_inner_shadow_alpha,
float contour_alpha,
float shadow_alpha,
float close_alpha,
@@ -115,6 +117,9 @@ void TabLayer::SetProperties(int id,
ui::ResourceManager::Resource* border_resource =
resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC,
border_resource_id);
+ ui::ResourceManager::Resource* border_inner_shadow_resource =
+ resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC,
+ border_inner_shadow_resource_id);
ui::ResourceManager::Resource* shadow_resource =
resource_manager_->GetResource(ui::ANDROID_RESOURCE_TYPE_STATIC,
shadow_resource_id);
@@ -142,6 +147,8 @@ void TabLayer::SetProperties(int id,
// Precalculate Helper Values
//----------------------------------------------------------------------------
const gfx::RectF border_padding(border_resource->padding);
+ const gfx::RectF border_inner_shadow_padding(
+ border_inner_shadow_resource->padding);
const gfx::RectF shadow_padding(shadow_resource->padding);
const gfx::RectF contour_padding(contour_resource->padding);
@@ -168,6 +175,11 @@ void TabLayer::SetProperties(int id,
const gfx::Size border_padding_size(
border_resource->size.width() - border_padding.width(),
border_resource->size.height() - border_padding.height());
+ const gfx::Size border_inner_shadow_padding_size(
+ border_inner_shadow_resource->size.width()
+ - border_inner_shadow_padding.width(),
+ border_inner_shadow_resource->size.height()
+ - border_inner_shadow_padding.height());
const gfx::Size contour_padding_size(
contour_resource->size.width() - contour_padding.width(),
contour_resource->size.height() - contour_padding.height());
@@ -203,10 +215,13 @@ void TabLayer::SetProperties(int id,
close_alpha *= alpha;
toolbar_alpha *= alpha;
- if (back_visible)
+ if (back_visible) {
border_alpha = 0.f;
+ border_inner_shadow_alpha = 0.f;
+ }
bool border_visible = border_alpha > 0.f;
+ bool border_inner_shadow_visible = border_inner_shadow_alpha > 0.f;
bool contour_visible = border_alpha < contour_alpha && contour_alpha > 0.f;
bool shadow_visible = shadow_alpha > 0.f && border_alpha > 0.f;
@@ -217,6 +232,9 @@ void TabLayer::SetProperties(int id,
height + shadow_padding_size.height());
gfx::Size border_size(width + border_padding_size.width() * side_border_scale,
height + border_padding_size.height());
+ gfx::Size border_inner_shadow_size(
+ width + border_inner_shadow_padding_size.width(),
+ height + border_inner_shadow_padding_size.height());
gfx::Size contour_size(
width + contour_padding_size.width() * side_border_scale,
height + contour_padding_size.height());
@@ -250,6 +268,8 @@ void TabLayer::SetProperties(int id,
-shadow_padding.y());
gfx::PointF border_position(-border_padding.x() * side_border_scale,
-border_padding.y());
+ gfx::PointF border_inner_shadow_position(-border_inner_shadow_padding.x(),
+ -border_inner_shadow_padding.y());
gfx::PointF contour_position(-contour_padding.x() * side_border_scale,
-contour_padding.y());
gfx::PointF toolbar_position(
@@ -292,9 +312,13 @@ void TabLayer::SetProperties(int id,
inset_diff * content_scale);
shadow_size.set_height(shadow_size.height() - inset_diff);
border_size.set_height(border_size.height() - inset_diff);
+ border_inner_shadow_size.set_height(
+ border_inner_shadow_size.height() - inset_diff);
contour_size.set_height(contour_size.height() - inset_diff);
shadow_position.set_y(shadow_position.y() + inset_diff);
border_position.set_y(border_position.y() + inset_diff);
+ border_inner_shadow_position.set_y(
+ border_inner_shadow_position.y() + inset_diff);
contour_position.set_y(contour_position.y() + inset_diff);
close_button_position.set_y(close_button_position.y() + inset_diff);
title_position.set_y(title_position.y() + inset_diff);
@@ -333,12 +357,15 @@ void TabLayer::SetProperties(int id,
// Fix jaggies
//----------------------------------------------------------------------------
border_position.Offset(0.5f, 0.5f);
+ border_inner_shadow_position.Offset(0.5f, 0.5f);
shadow_position.Offset(0.5f, 0.5f);
contour_position.Offset(0.5f, 0.5f);
title_position.Offset(0.5f, 0.5f);
close_button_position.Offset(0.5f, 0.5f);
+ toolbar_position.Offset(0.5f, 0.5f);
border_size.Enlarge(-1.f, -1.f);
+ border_inner_shadow_size.Enlarge(-1.f, -1.f);
shadow_size.Enlarge(-1.f, -1.f);
//----------------------------------------------------------------------------
@@ -358,6 +385,13 @@ void TabLayer::SetProperties(int id,
border_size,
gfx::InsetsF(1.f, side_border_scale, 1.f, side_border_scale)));
+ front_border_inner_shadow_->SetUIResourceId(
+ border_inner_shadow_resource->ui_resource->id());
+ front_border_inner_shadow_->SetAperture(
+ border_inner_shadow_resource->aperture);
+ front_border_inner_shadow_->SetBorder(border_inner_shadow_resource->Border(
+ border_inner_shadow_size));
+
padding_->SetBackgroundColor(back_visible ? back_logo_color
: default_background_color);
@@ -404,6 +438,15 @@ void TabLayer::SetProperties(int id,
front_border_->SetPosition(border_position);
front_border_->SetBounds(border_size);
front_border_->SetOpacity(border_alpha);
+ front_border_->SetNearestNeighbor(toolbar_visible);
+ }
+
+ front_border_inner_shadow_->SetHideLayerAndSubtree(
+ !border_inner_shadow_visible);
+ if (border_inner_shadow_visible) {
+ front_border_inner_shadow_->SetPosition(border_inner_shadow_position);
+ front_border_inner_shadow_->SetBounds(border_inner_shadow_size);
+ front_border_inner_shadow_->SetOpacity(border_inner_shadow_alpha);
}
toolbar_layer_->layer()->SetHideLayerAndSubtree(!toolbar_visible);
@@ -552,6 +595,8 @@ TabLayer::TabLayer(bool incognito,
cc::UIResourceLayer::Create(content::Compositor::LayerSettings())),
front_border_(
cc::NinePatchLayer::Create(content::Compositor::LayerSettings())),
+ front_border_inner_shadow_(
+ cc::NinePatchLayer::Create(content::Compositor::LayerSettings())),
contour_shadow_(
cc::NinePatchLayer::Create(content::Compositor::LayerSettings())),
shadow_(cc::NinePatchLayer::Create(content::Compositor::LayerSettings())),
@@ -563,6 +608,7 @@ TabLayer::TabLayer(bool incognito,
layer_->AddChild(padding_);
layer_->AddChild(content_->layer());
layer_->AddChild(back_logo_);
+ layer_->AddChild(front_border_inner_shadow_);
layer_->AddChild(front_border_);
layer_->AddChild(title_.get());
layer_->AddChild(close_button_);
@@ -571,9 +617,12 @@ TabLayer::TabLayer(bool incognito,
contour_shadow_->SetIsDrawable(true);
padding_->SetIsDrawable(true);
front_border_->SetIsDrawable(true);
+ front_border_inner_shadow_->SetIsDrawable(true);
shadow_->SetIsDrawable(true);
close_button_->SetIsDrawable(true);
back_logo_->SetIsDrawable(true);
+
+ front_border_->SetFillCenter(false);
}
TabLayer::~TabLayer() {
diff --git a/chrome/browser/android/compositor/layer/tab_layer.h b/chrome/browser/android/compositor/layer/tab_layer.h
index da342c9..48ea9bf 100644
--- a/chrome/browser/android/compositor/layer/tab_layer.h
+++ b/chrome/browser/android/compositor/layer/tab_layer.h
@@ -53,6 +53,7 @@ class TabLayer : public Layer {
int contour_resource_id,
int back_logo_resource_id,
int border_resource_id,
+ int border_inner_shadow_resource_id,
int default_background_color,
int back_logo_color,
bool is_portrait,
@@ -70,6 +71,7 @@ class TabLayer : public Layer {
float rotation_y,
float alpha,
float border_alpha,
+ float border_inner_shadow_alpha,
float contour_alpha,
float shadow_alpha,
float close_alpha,
@@ -130,6 +132,7 @@ class TabLayer : public Layer {
scoped_refptr<cc::SolidColorLayer> padding_;
scoped_refptr<cc::UIResourceLayer> close_button_;
scoped_refptr<cc::NinePatchLayer> front_border_;
+ scoped_refptr<cc::NinePatchLayer> front_border_inner_shadow_;
scoped_refptr<cc::NinePatchLayer> contour_shadow_;
scoped_refptr<cc::NinePatchLayer> shadow_;
scoped_refptr<cc::UIResourceLayer> back_logo_;
diff --git a/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.cc b/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.cc
index b749d38..22af415 100644
--- a/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.cc
+++ b/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.cc
@@ -69,6 +69,7 @@ void TabListSceneLayer::PutLayer(
jint contour_resource_id,
jint back_logo_resource_id,
jint border_resource_id,
+ jint border_inner_shadow_resource_id,
jboolean can_use_live_layer,
jint tab_background_color,
jint background_color,
@@ -96,6 +97,7 @@ void TabListSceneLayer::PutLayer(
jfloat rotation_y,
jfloat alpha,
jfloat border_alpha,
+ jfloat border_inner_shadow_alpha,
jfloat contour_alpha,
jfloat shadow_alpha,
jfloat close_alpha,
@@ -141,9 +143,10 @@ void TabListSceneLayer::PutLayer(
layer->SetProperties(
id, can_use_live_layer, toolbar_resource_id, close_button_resource_id,
shadow_resource_id, contour_resource_id, back_logo_resource_id,
- border_resource_id, tab_background_color, back_logo_color, is_portrait,
- x, y, width, height, shadow_x, shadow_y, shadow_width, shadow_height,
- pivot_x, pivot_y, rotation_x, rotation_y, alpha, border_alpha,
+ border_resource_id, border_inner_shadow_resource_id,
+ tab_background_color, back_logo_color, is_portrait, x, y, width, height,
+ shadow_x, shadow_y, shadow_width, shadow_height, pivot_x, pivot_y,
+ rotation_x, rotation_y, alpha, border_alpha, border_inner_shadow_alpha,
contour_alpha, shadow_alpha, close_alpha, border_scale, saturation,
brightness, close_btn_width, static_to_view_blend, content_width,
content_height, content_width, visible_content_height, show_toolbar,
diff --git a/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.h b/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.h
index a49cde8..aba69e4 100644
--- a/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.h
+++ b/chrome/browser/android/compositor/scene_layer/tab_list_scene_layer.h
@@ -55,6 +55,7 @@ class TabListSceneLayer : public SceneLayer {
jint contour_resource_id,
jint back_logo_resource_id,
jint border_resource_id,
+ jint border_inner_shadow_resource_id,
jboolean can_use_live_layer,
jint tab_background_color,
jint background_color,
@@ -82,6 +83,7 @@ class TabListSceneLayer : public SceneLayer {
jfloat rotation_y,
jfloat alpha,
jfloat border_alpha,
+ jfloat border_inner_shadow_alpha,
jfloat contour_alpha,
jfloat shadow_alpha,
jfloat close_alpha,