diff options
author | kkimlabs <kkimlabs@chromium.org> | 2016-01-23 15:23:24 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-23 23:24:09 +0000 |
commit | 22367f6468e5a6b8e8d024f476826144b2099bac (patch) | |
tree | 62d62e0b40e84ac517ce37abe5b4a1e911aab546 | |
parent | 639a26231590c62efabb2f571cb487330658cc59 (diff) | |
download | chromium_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}
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 Binary files differindex 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 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 Binary files differnew file mode 100644 index 0000000..2330db7 --- /dev/null +++ b/chrome/android/java/res/drawable-hdpi/tabswitcher_border_frame_inner_shadow.9.png 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 Binary files differindex 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 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 Binary files differnew file mode 100644 index 0000000..7abc73e --- /dev/null +++ b/chrome/android/java/res/drawable-mdpi/tabswitcher_border_frame_inner_shadow.9.png 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 Binary files differindex 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 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 Binary files differnew file mode 100644 index 0000000..736bb3b --- /dev/null +++ b/chrome/android/java/res/drawable-xhdpi/tabswitcher_border_frame_inner_shadow.9.png 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 Binary files differindex 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 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 Binary files differnew file mode 100644 index 0000000..8029590 --- /dev/null +++ b/chrome/android/java/res/drawable-xxhdpi/tabswitcher_border_frame_inner_shadow.9.png 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 Binary files differindex 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 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 Binary files differnew file mode 100644 index 0000000..d710bd4 --- /dev/null +++ b/chrome/android/java/res/drawable-xxxhdpi/tabswitcher_border_frame_inner_shadow.9.png 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, |