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

Unified Diff: ash/launcher/overflow_button.cc

Issue 22527003: ash:Shelf Overflow Button (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 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 | « ash/launcher/overflow_button.h ('k') | ash/shelf/shelf_widget.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/launcher/overflow_button.cc
diff --git a/ash/launcher/overflow_button.cc b/ash/launcher/overflow_button.cc
index 884746892f982c4b96b8c71ae32cdf87c40a68a4..c3d5a6891d055d154ff5433af6a1660c51d1df4d 100644
--- a/ash/launcher/overflow_button.cc
+++ b/ash/launcher/overflow_button.cc
@@ -4,7 +4,9 @@
#include "ash/launcher/overflow_button.h"
+#include "ash/ash_switches.h"
#include "ash/shelf/shelf_layout_manager.h"
+#include "ash/shelf/shelf_widget.h"
#include "grit/ash_resources.h"
#include "grit/ash_strings.h"
#include "third_party/skia/include/core/SkPaint.h"
@@ -13,6 +15,8 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/canvas.h"
+#include "ui/gfx/image/image_skia_operations.h"
+#include "ui/gfx/skbitmap_operations.h"
#include "ui/gfx/skia_util.h"
#include "ui/gfx/transform.h"
#include "ui/views/widget/widget.h"
@@ -30,29 +34,18 @@ const int kButtonHoverSize = 28;
const int kBackgroundOffset = (48 - kButtonHoverSize) / 2;
-void RotateCounterclockwise(gfx::Transform* transform) {
- SkMatrix44 rotation;
- rotation.set3x3(0, -1, 0,
- 1, 0, 0,
- 0, 0, 1);
- transform->matrix().preConcat(rotation);
-}
-
-void RotateClockwise(gfx::Transform* transform) {
- SkMatrix44 rotation;
- rotation.set3x3( 0, 1, 0,
- -1, 0, 0,
- 0, 0, 1);
- transform->matrix().preConcat(rotation);
-}
+// Padding from the inner edge of the shelf (towards center of display) to
+// the edge of the background image of the overflow button.
+const int kImagePaddingFromShelf = 5;
} // namesapce
OverflowButton::OverflowButton(views::ButtonListener* listener)
: CustomButton(listener),
- image_(NULL) {
+ bottom_image_(NULL) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- image_ = rb.GetImageNamed(IDR_AURA_LAUNCHER_OVERFLOW).ToImageSkia();
+ bottom_image_ = rb.GetImageNamed(IDR_AURA_LAUNCHER_OVERFLOW).ToImageSkia();
+
set_accessibility_focusable(true);
SetAccessibleName(l10n_util::GetStringUTF16(IDS_ASH_SHELF_OVERFLOW_NAME));
@@ -96,55 +89,89 @@ void OverflowButton::PaintBackground(gfx::Canvas* canvas, int alpha) {
}
void OverflowButton::OnPaint(gfx::Canvas* canvas) {
- ShelfAlignment alignment = ShelfLayoutManager::ForLauncher(
- GetWidget()->GetNativeView())->GetAlignment();
-
- if (hover_animation_->is_animating()) {
- PaintBackground(
- canvas,
- kButtonHoverAlpha * hover_animation_->GetCurrentValue());
- } else if (state() == STATE_HOVERED || state() == STATE_PRESSED) {
- PaintBackground(canvas, kButtonHoverAlpha);
+ ShelfLayoutManager* layout_manager = ShelfLayoutManager::ForLauncher(
+ GetWidget()->GetNativeView());
+ ShelfAlignment alignment = layout_manager->GetAlignment();
+
+ gfx::Rect bounds(GetContentsBounds());
+ if (ash::switches::UseAlternateShelfLayout()) {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ int background_image_id = 0;
+ if (layout_manager->shelf_widget()->launcher()->IsShowingOverflowBubble())
+ background_image_id = IDR_AURA_NOTIFICATION_BACKGROUND_PRESSED;
+ else if(layout_manager->shelf_widget()->GetDimsShelf())
+ background_image_id = IDR_AURA_NOTIFICATION_BACKGROUND_ON_BLACK;
+ else
+ background_image_id = IDR_AURA_NOTIFICATION_BACKGROUND_NORMAL;
+
+ const gfx::ImageSkia* background =
+ rb.GetImageNamed(background_image_id).ToImageSkia();
+ if (alignment == SHELF_ALIGNMENT_LEFT) {
+ bounds = gfx::Rect(
+ bounds.right() - background->width() - kImagePaddingFromShelf,
+ bounds.y() + (bounds.height() - background->height()) / 2,
+ background->width(), background->height());
+ } else if (alignment == SHELF_ALIGNMENT_RIGHT) {
+ bounds = gfx::Rect(
+ bounds.x() + kImagePaddingFromShelf,
+ bounds.y() + (bounds.height() - background->height()) / 2,
+ background->width(), background->height());
+ } else {
+ bounds = gfx::Rect(
+ bounds.x() + (bounds.width() - background->width()) / 2,
+ bounds.y() + kImagePaddingFromShelf,
+ background->width(), background->height());
+ }
+ canvas->DrawImageInt(*background, bounds.x(), bounds.y());
+ } else {
+ if (alignment == SHELF_ALIGNMENT_BOTTOM) {
+ bounds = gfx::Rect(
+ bounds.x() + ((bounds.width() - kButtonHoverSize) / 2) - 1,
+ bounds.y() + kBackgroundOffset - 1,
+ kButtonHoverSize, kButtonHoverSize);
+ } else {
+ bounds = gfx::Rect(
+ bounds.x() + kBackgroundOffset -1,
+ bounds.y() + ((bounds.height() - kButtonHoverSize) / 2) -1,
+ kButtonHoverSize, kButtonHoverSize);
+ }
+ if (hover_animation_->is_animating()) {
+ PaintBackground(
+ canvas,
+ kButtonHoverAlpha * hover_animation_->GetCurrentValue());
+ } else if (state() == STATE_HOVERED || state() == STATE_PRESSED) {
+ PaintBackground(canvas, kButtonHoverAlpha);
+ }
}
if (height() < kButtonHoverSize)
return;
- gfx::Transform transform;
+ const gfx::ImageSkia* image = NULL;
- switch (alignment) {
- case SHELF_ALIGNMENT_BOTTOM:
- // Shift 1 pixel left to align with overflow bubble tip.
- transform.Translate(-1, kBackgroundOffset);
- break;
+ switch(alignment) {
case SHELF_ALIGNMENT_LEFT:
- transform.Translate(kBackgroundOffset, -1);
- RotateClockwise(&transform);
+ if (left_image_.isNull()) {
+ left_image_ = gfx::ImageSkiaOperations::CreateRotatedImage(
+ *bottom_image_, SkBitmapOperations::ROTATION_90_CW);
+ }
+ image = &left_image_;
break;
case SHELF_ALIGNMENT_RIGHT:
- transform.Translate(kBackgroundOffset, height());
- RotateCounterclockwise(&transform);
+ if (right_image_.isNull()) {
+ right_image_ = gfx::ImageSkiaOperations::CreateRotatedImage(
+ *bottom_image_, SkBitmapOperations::ROTATION_270_CW);
+ }
+ image = &right_image_;
break;
- case SHELF_ALIGNMENT_TOP:
- transform.Translate(1, kBackgroundOffset);
+ default:
+ image = bottom_image_;
break;
}
- canvas->Save();
- canvas->Transform(transform);
-
- gfx::Rect rect(GetContentsBounds());
- if (alignment == SHELF_ALIGNMENT_BOTTOM ||
- alignment == SHELF_ALIGNMENT_TOP) {
- canvas->DrawImageInt(*image_,
- rect.x() + (rect.width() - image_->width()) / 2,
- kButtonHoverSize - image_->height());
- } else {
- canvas->DrawImageInt(*image_,
- kButtonHoverSize - image_->width(),
- rect.y() + (rect.height() - image_->height()) / 2);
- }
- canvas->Restore();
+ canvas->DrawImageInt(*image,
+ bounds.x() + ((bounds.width() - image->width()) / 2),
+ bounds.y() + ((bounds.height() - image->height()) / 2));
}
} // namespace internal
« no previous file with comments | « ash/launcher/overflow_button.h ('k') | ash/shelf/shelf_widget.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698