summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/aura_shell/examples/aura_shell_main.cc5
-rw-r--r--ui/aura_shell/launcher/launcher.cc5
-rw-r--r--ui/aura_shell/launcher/launcher_view.cc99
-rw-r--r--ui/aura_shell/launcher/tabbed_launcher_button.cc72
-rw-r--r--ui/aura_shell/launcher/tabbed_launcher_button.h23
-rw-r--r--ui/aura_shell/shelf_layout_manager.cc2
-rw-r--r--ui/aura_shell/shell_delegate.h5
-rw-r--r--ui/aura_shell/test/test_shell_delegate.cc6
-rw-r--r--ui/aura_shell/test/test_shell_delegate.h1
-rw-r--r--ui/aura_shell/toplevel_layout_manager.cc9
-rw-r--r--ui/resources/aura/launcher_background.pngbin0 -> 2575 bytes
-rw-r--r--ui/resources/ui_resources.grd1
12 files changed, 136 insertions, 92 deletions
diff --git a/ui/aura_shell/examples/aura_shell_main.cc b/ui/aura_shell/examples/aura_shell_main.cc
index 0700047..93363a8 100644
--- a/ui/aura_shell/examples/aura_shell_main.cc
+++ b/ui/aura_shell/examples/aura_shell_main.cc
@@ -7,6 +7,7 @@
#include "base/i18n/icu_util.h"
#include "base/memory/scoped_ptr.h"
#include "base/message_loop.h"
+#include "grit/ui_resources.h"
#include "ui/aura/root_window.h"
#include "ui/aura_shell/examples/toplevel_window.h"
#include "ui/aura_shell/launcher/launcher_types.h"
@@ -92,6 +93,10 @@ class ShellDelegateImpl : public aura_shell::ShellDelegate {
image_count = (image_count + 1) % 3;
return true; // Makes the entry show up in the launcher.
}
+
+ virtual int GetResourceIDForNewBrowserWindow() OVERRIDE {
+ return IDR_AURA_LAUNCHER_ICON_CHROME;
+ }
};
} // namespace
diff --git a/ui/aura_shell/launcher/launcher.cc b/ui/aura_shell/launcher/launcher.cc
index 8b0ae38..7dddc94 100644
--- a/ui/aura_shell/launcher/launcher.cc
+++ b/ui/aura_shell/launcher/launcher.cc
@@ -24,9 +24,8 @@ Launcher::Launcher(aura::Window* window_container)
widget_ = new views::Widget;
views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL);
- // All the content is drawn by the launcher buttons. Turn off the widget's
- // layer's texture to avoid unnecessary memory use.
- params.create_texture_for_layer = false;
+ params.create_texture_for_layer = true;
+ params.transparent = true;
params.parent = Shell::GetInstance()->GetContainer(
aura_shell::internal::kShellWindowId_LauncherContainer);
internal::LauncherView* launcher_view =
diff --git a/ui/aura_shell/launcher/launcher_view.cc b/ui/aura_shell/launcher/launcher_view.cc
index 0cba08b..4d7c0f2 100644
--- a/ui/aura_shell/launcher/launcher_view.cc
+++ b/ui/aura_shell/launcher/launcher_view.cc
@@ -12,18 +12,21 @@
#include "ui/aura_shell/launcher/tabbed_launcher_button.h"
#include "ui/aura_shell/launcher/view_model.h"
#include "ui/aura_shell/launcher/view_model_utils.h"
+#include "ui/aura_shell/shelf_layout_manager.h"
#include "ui/aura_shell/shell.h"
#include "ui/aura_shell/shell_delegate.h"
#include "ui/base/animation/animation.h"
#include "ui/base/animation/throb_animation.h"
#include "ui/base/models/simple_menu_model.h"
#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/canvas.h"
#include "ui/gfx/compositor/layer.h"
#include "ui/gfx/image/image.h"
#include "ui/views/animation/bounds_animator.h"
#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/menu/menu_model_adapter.h"
#include "ui/views/controls/menu/menu_runner.h"
+#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
using ui::Animation;
@@ -82,48 +85,6 @@ class MenuDelegateImpl : public ui::SimpleMenuModel::Delegate {
DISALLOW_COPY_AND_ASSIGN(MenuDelegateImpl);
};
-// ImageButton subclass that animates transition changes using the opacity of
-// the layer.
-class FadeButton : public views::ImageButton {
- public:
- explicit FadeButton(views::ButtonListener* listener)
- : ImageButton(listener) {
- SetPaintToLayer(true);
- layer()->SetFillsBoundsOpaquely(false);
- layer()->SetOpacity(kDimmedButtonOpacity);
- }
-
- protected:
- // ImageButton overrides:
- virtual SkBitmap GetImageToPaint() OVERRIDE {
- // ImageButton::GetImageToPaint returns an alpha blended image based on
- // hover_animation_. FadeButton uses hover_animation to change the opacity
- // of the layer, so this can be overriden to return the normal image always.
- return images_[BS_NORMAL];
- }
- virtual void AnimationProgressed(const ui::Animation* animation) OVERRIDE {
- layer()->SetOpacity(kDimmedButtonOpacity + (1.0f - kDimmedButtonOpacity) *
- animation->GetCurrentValue());
- layer()->ScheduleDraw();
- }
- virtual void StateChanged() OVERRIDE {
- if (!hover_animation_->is_animating()) {
- float opacity = state_ == BS_NORMAL ? kDimmedButtonOpacity : 1.0f;
- if (layer()->opacity() != opacity) {
- layer()->SetOpacity(opacity);
- layer()->ScheduleDraw();
- }
- }
- }
- virtual void SchedulePaint() OVERRIDE {
- // All changes we care about trigger a draw on the layer, so this can be
- // overriden to do nothing.
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FadeButton);
-};
-
// AnimationDelegate that deletes a view when done. This is used when a launcher
// item is removed, which triggers a remove animation. When the animation is
// done we delete the view.
@@ -167,6 +128,25 @@ class FadeInAnimationDelegate :
DISALLOW_COPY_AND_ASSIGN(FadeInAnimationDelegate);
};
+// Used to draw the background of the shelf.
+class ShelfPainter : public views::Painter {
+ public:
+ ShelfPainter() {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ image_ = *rb.GetImageNamed(IDR_AURA_LAUNCHER_BACKGROUND).ToSkBitmap();
+ }
+
+ virtual void Paint(int w, int h, gfx::Canvas* canvas) OVERRIDE {
+ canvas->TileImageInt(image_, 0, 0, w, h);
+ }
+
+ private:
+ SkBitmap image_;
+
+ DISALLOW_COPY_AND_ASSIGN(ShelfPainter);
+};
+
+
} // namespace
// AnimationDelegate used when inserting a new item. This steadily decreased the
@@ -244,12 +224,20 @@ LauncherView::~LauncherView() {
}
void LauncherView::Init() {
- model_->AddObserver(this);
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- new_browser_button_ = new FadeButton(this);
+ model_->AddObserver(this);
+
+ set_background(
+ views::Background::CreateBackgroundPainter(true, new ShelfPainter()));
+
+ new_browser_button_ = new views::ImageButton(this);
+ ShellDelegate* delegate = Shell::GetInstance()->delegate();
+ int new_browser_button_image_id = delegate ?
+ delegate->GetResourceIDForNewBrowserWindow() :
+ IDR_AURA_LAUNCHER_ICON_CHROME;
new_browser_button_->SetImage(
views::CustomButton::BS_NORMAL,
- rb.GetImageNamed(IDR_AURA_LAUNCHER_ICON_CHROME).ToSkBitmap());
+ rb.GetImageNamed(new_browser_button_image_id).ToSkBitmap());
ConfigureChildView(new_browser_button_);
AddChildView(new_browser_button_);
@@ -261,18 +249,29 @@ void LauncherView::Init() {
AddChildView(child);
}
- show_apps_button_ = new FadeButton(this);
+ show_apps_button_ = new views::ImageButton(this);
show_apps_button_->SetImage(
views::CustomButton::BS_NORMAL,
rb.GetImageNamed(IDR_AURA_LAUNCHER_ICON_APPLIST).ToSkBitmap());
+ show_apps_button_->SetImage(
+ views::CustomButton::BS_HOT,
+ rb.GetImageNamed(IDR_AURA_LAUNCHER_ICON_APPLIST_HOT).ToSkBitmap());
+ show_apps_button_->SetImage(
+ views::CustomButton::BS_PUSHED,
+ rb.GetImageNamed(IDR_AURA_LAUNCHER_ICON_APPLIST_PUSHED).ToSkBitmap());
ConfigureChildView(show_apps_button_);
AddChildView(show_apps_button_);
- overflow_button_ = new FadeButton(this);
- // TODO: need image for this.
+ overflow_button_ = new views::ImageButton(this);
overflow_button_->SetImage(
views::CustomButton::BS_NORMAL,
rb.GetImageNamed(IDR_AURA_LAUNCHER_OVERFLOW).ToSkBitmap());
+ overflow_button_->SetImage(
+ views::CustomButton::BS_HOT,
+ rb.GetImageNamed(IDR_AURA_LAUNCHER_OVERFLOW_HOT).ToSkBitmap());
+ overflow_button_->SetImage(
+ views::CustomButton::BS_PUSHED,
+ rb.GetImageNamed(IDR_AURA_LAUNCHER_OVERFLOW_PUSHED).ToSkBitmap());
ConfigureChildView(overflow_button_);
AddChildView(overflow_button_);
@@ -336,8 +335,8 @@ void LauncherView::CalculateIdealBounds(IdealBounds* bounds) {
(kPreferredHeight - bounds->overflow_bounds.height()) / 2);
x = bounds->overflow_bounds.right() + kHorizontalPadding;
}
- // TODO(sky): -8 is a hack, remove when we get better images.
- bounds->show_apps_bounds.set_x(x - 8);
+ // TODO(sky): -6 is a hack, remove when we get better images.
+ bounds->show_apps_bounds.set_x(x - 6);
bounds->show_apps_bounds.set_y(
(kPreferredHeight - bounds->show_apps_bounds.height()) / 2);
}
diff --git a/ui/aura_shell/launcher/tabbed_launcher_button.cc b/ui/aura_shell/launcher/tabbed_launcher_button.cc
index f1a1e27..aac9205 100644
--- a/ui/aura_shell/launcher/tabbed_launcher_button.cc
+++ b/ui/aura_shell/launcher/tabbed_launcher_button.cc
@@ -32,23 +32,27 @@ const int kBgBottomInset = 12;
const int kBgRightInset = 8;
// static
-SkBitmap* TabbedLauncherButton::bg_image_1_ = NULL;
-SkBitmap* TabbedLauncherButton::bg_image_2_ = NULL;
-SkBitmap* TabbedLauncherButton::bg_image_3_ = NULL;
+TabbedLauncherButton::ImageSet* TabbedLauncherButton::bg_image_1_ = NULL;
+TabbedLauncherButton::ImageSet* TabbedLauncherButton::bg_image_2_ = NULL;
+TabbedLauncherButton::ImageSet* TabbedLauncherButton::bg_image_3_ = NULL;
TabbedLauncherButton::TabbedLauncherButton(views::ButtonListener* listener,
LauncherButtonHost* host)
- : views::CustomButton(listener),
+ : views::ImageButton(listener),
host_(host) {
if (!bg_image_1_) {
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- bg_image_1_ = new SkBitmap(
- *rb.GetImageNamed(IDR_AURA_LAUNCHER_TABBED_BROWSER_1).ToSkBitmap());
- bg_image_2_ = new SkBitmap(
- *rb.GetImageNamed(IDR_AURA_LAUNCHER_TABBED_BROWSER_2).ToSkBitmap());
- bg_image_3_ = new SkBitmap(
- *rb.GetImageNamed(IDR_AURA_LAUNCHER_TABBED_BROWSER_3).ToSkBitmap());
+ bg_image_1_ = CreateImageSet(IDR_AURA_LAUNCHER_TABBED_BROWSER_1,
+ IDR_AURA_LAUNCHER_TABBED_BROWSER_1_PUSHED,
+ IDR_AURA_LAUNCHER_TABBED_BROWSER_1_HOT);
+ bg_image_2_ = CreateImageSet(IDR_AURA_LAUNCHER_TABBED_BROWSER_2,
+ IDR_AURA_LAUNCHER_TABBED_BROWSER_2_PUSHED,
+ IDR_AURA_LAUNCHER_TABBED_BROWSER_2_HOT);
+ bg_image_3_ = CreateImageSet(IDR_AURA_LAUNCHER_TABBED_BROWSER_3,
+ IDR_AURA_LAUNCHER_TABBED_BROWSER_3_PUSHED,
+ IDR_AURA_LAUNCHER_TABBED_BROWSER_3_HOT);
}
+ SetImageAlignment(views::ImageButton::ALIGN_CENTER,
+ views::ImageButton::ALIGN_MIDDLE);
}
TabbedLauncherButton::~TabbedLauncherButton() {
@@ -56,21 +60,20 @@ TabbedLauncherButton::~TabbedLauncherButton() {
void TabbedLauncherButton::SetImages(const LauncherTabbedImages& images) {
images_ = images;
-}
-
-gfx::Size TabbedLauncherButton::GetPreferredSize() {
- return gfx::Size(bg_image_1_->width(), bg_image_1_->height());
-}
-
-void TabbedLauncherButton::OnPaint(gfx::Canvas* canvas) {
- SkBitmap* bg_image = NULL;
+ ImageSet* set;
if (images_.size() <= 1)
- bg_image = bg_image_1_;
+ set = bg_image_1_;
else if (images_.size() == 2)
- bg_image = bg_image_2_;
+ set = bg_image_2_;
else
- bg_image = bg_image_3_;
- canvas->DrawBitmapInt(*bg_image, 0, 0);
+ set = bg_image_3_;
+ SetImage(BS_NORMAL, set->normal_image);
+ SetImage(BS_HOT, set->hot_image);
+ SetImage(BS_PUSHED, set->pushed_image);
+}
+
+void TabbedLauncherButton::OnPaint(gfx::Canvas* canvas) {
+ ImageButton::OnPaint(canvas);
if (images_.empty())
return;
@@ -79,31 +82,44 @@ void TabbedLauncherButton::OnPaint(gfx::Canvas* canvas) {
// TODO(sky): if we settle on just 1 icon, then we should simplify surrounding
// code (don't use a vector of images).
int x = (width() - images_[0].image.width()) / 2;
- int y = (height() - images_[0].image.height()) / 2;
+ int y = (height() - images_[0].image.height()) / 2 + 1;
canvas->DrawBitmapInt(images_[0].image, x, y);
}
bool TabbedLauncherButton::OnMousePressed(const views::MouseEvent& event) {
- CustomButton::OnMousePressed(event);
+ ImageButton::OnMousePressed(event);
host_->MousePressedOnButton(this, event);
return true;
}
void TabbedLauncherButton::OnMouseReleased(const views::MouseEvent& event) {
host_->MouseReleasedOnButton(this, false);
- CustomButton::OnMouseReleased(event);
+ ImageButton::OnMouseReleased(event);
}
void TabbedLauncherButton::OnMouseCaptureLost() {
host_->MouseReleasedOnButton(this, true);
- CustomButton::OnMouseCaptureLost();
+ ImageButton::OnMouseCaptureLost();
}
bool TabbedLauncherButton::OnMouseDragged(const views::MouseEvent& event) {
- CustomButton::OnMouseDragged(event);
+ ImageButton::OnMouseDragged(event);
host_->MouseDraggedOnButton(this, event);
return true;
}
+// static
+TabbedLauncherButton::ImageSet* TabbedLauncherButton::CreateImageSet(
+ int normal_id,
+ int pushed_id,
+ int hot_id) {
+ ImageSet* set = new ImageSet;
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ set->normal_image = new SkBitmap(*rb.GetImageNamed(normal_id).ToSkBitmap());
+ set->pushed_image = new SkBitmap(*rb.GetImageNamed(pushed_id).ToSkBitmap());
+ set->hot_image = new SkBitmap(*rb.GetImageNamed(hot_id).ToSkBitmap());
+ return set;
+}
+
} // namespace internal
} // namespace aura_shell
diff --git a/ui/aura_shell/launcher/tabbed_launcher_button.h b/ui/aura_shell/launcher/tabbed_launcher_button.h
index 5534e1f..a945074 100644
--- a/ui/aura_shell/launcher/tabbed_launcher_button.h
+++ b/ui/aura_shell/launcher/tabbed_launcher_button.h
@@ -7,7 +7,7 @@
#pragma once
#include "ui/aura_shell/launcher/launcher_types.h"
-#include "ui/views/controls/button/custom_button.h"
+#include "ui/views/controls/button/image_button.h"
namespace aura_shell {
namespace internal {
@@ -15,7 +15,7 @@ namespace internal {
class LauncherButtonHost;
// Button used for items on the launcher corresponding to tabbed windows.
-class TabbedLauncherButton : public views::CustomButton {
+class TabbedLauncherButton : public views::ImageButton {
public:
TabbedLauncherButton(views::ButtonListener* listener,
LauncherButtonHost* host);
@@ -24,9 +24,6 @@ class TabbedLauncherButton : public views::CustomButton {
// Sets the images to display for this entry.
void SetImages(const LauncherTabbedImages& images);
- // View overrides:
- virtual gfx::Size GetPreferredSize() OVERRIDE;
-
protected:
// View overrides:
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
@@ -36,15 +33,25 @@ class TabbedLauncherButton : public views::CustomButton {
virtual bool OnMouseDragged(const views::MouseEvent& event) OVERRIDE;
private:
+ struct ImageSet {
+ SkBitmap* normal_image;
+ SkBitmap* pushed_image;
+ SkBitmap* hot_image;
+ };
+
+ // Creates an ImageSet using the specified image ids. Caller owns the returned
+ // value.
+ static ImageSet* CreateImageSet(int normal_id, int pushed_id, int hot_id);
+
LauncherTabbedImages images_;
LauncherButtonHost* host_;
// Background images. Which one is chosen depends upon how many images are
// provided.
- static SkBitmap* bg_image_1_;
- static SkBitmap* bg_image_2_;
- static SkBitmap* bg_image_3_;
+ static ImageSet* bg_image_1_;
+ static ImageSet* bg_image_2_;
+ static ImageSet* bg_image_3_;
DISALLOW_COPY_AND_ASSIGN(TabbedLauncherButton);
};
diff --git a/ui/aura_shell/shelf_layout_manager.cc b/ui/aura_shell/shelf_layout_manager.cc
index c422aa7..d9f58e2 100644
--- a/ui/aura_shell/shelf_layout_manager.cc
+++ b/ui/aura_shell/shelf_layout_manager.cc
@@ -122,7 +122,7 @@ void ShelfLayoutManager::CalculateTargetBounds(bool visible,
gfx::Rect launcher_bounds(launcher_->GetWindowScreenBounds());
target_bounds->launcher_bounds = gfx::Rect(
available_bounds.x(), y + (max_height_ - launcher_bounds.height()) / 2,
- available_bounds.width() - status_bounds.width(),
+ available_bounds.width(),
launcher_bounds.height());
if (visible)
target_bounds->work_area_insets = gfx::Insets(0, 0, max_height_, 0);
diff --git a/ui/aura_shell/shell_delegate.h b/ui/aura_shell/shell_delegate.h
index 3771b1a..1239bc8 100644
--- a/ui/aura_shell/shell_delegate.h
+++ b/ui/aura_shell/shell_delegate.h
@@ -50,8 +50,11 @@ class AURA_SHELL_EXPORT ShellDelegate {
// an entry for |item->window| it should configure |item| appropriately and
// return true.
virtual bool ConfigureLauncherItem(LauncherItem* item) = 0;
-};
+ // Returns the resource id of the image to show on the button that creates a
+ // new browser window.
+ virtual int GetResourceIDForNewBrowserWindow() = 0;
+};
} // namespace aura_shell
#endif // UI_AURA_SHELL_SHELL_DELEGATE_H_
diff --git a/ui/aura_shell/test/test_shell_delegate.cc b/ui/aura_shell/test/test_shell_delegate.cc
index 42414b7..98057f9 100644
--- a/ui/aura_shell/test/test_shell_delegate.cc
+++ b/ui/aura_shell/test/test_shell_delegate.cc
@@ -4,6 +4,8 @@
#include "ui/aura_shell/test/test_shell_delegate.h"
+#include "grit/ui_resources.h"
+
namespace aura_shell {
namespace test {
@@ -32,5 +34,9 @@ bool TestShellDelegate::ConfigureLauncherItem(LauncherItem* item) {
return true;
}
+int TestShellDelegate::GetResourceIDForNewBrowserWindow() {
+ return IDR_AURA_LAUNCHER_ICON_CHROME;
+}
+
} // namespace test
} // namespace aura_shell
diff --git a/ui/aura_shell/test/test_shell_delegate.h b/ui/aura_shell/test/test_shell_delegate.h
index 6811d45..91a55b4 100644
--- a/ui/aura_shell/test/test_shell_delegate.h
+++ b/ui/aura_shell/test/test_shell_delegate.h
@@ -25,6 +25,7 @@ class TestShellDelegate : public ShellDelegate {
const SetWidgetCallback& callback) OVERRIDE;
virtual void LauncherItemClicked(const LauncherItem& item) OVERRIDE;
virtual bool ConfigureLauncherItem(LauncherItem* item) OVERRIDE;
+ virtual int GetResourceIDForNewBrowserWindow() OVERRIDE;
};
} // namespace test
diff --git a/ui/aura_shell/toplevel_layout_manager.cc b/ui/aura_shell/toplevel_layout_manager.cc
index 05d5f47..00b44aa 100644
--- a/ui/aura_shell/toplevel_layout_manager.cc
+++ b/ui/aura_shell/toplevel_layout_manager.cc
@@ -48,7 +48,14 @@ void ToplevelLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child,
void ToplevelLayoutManager::SetChildBounds(aura::Window* child,
const gfx::Rect& requested_bounds) {
- SetChildBoundsDirect(child, requested_bounds);
+ const static int kTitleHeight = 12;
+ gfx::Rect child_bounds(requested_bounds);
+ gfx::Rect work_area = gfx::Screen::GetMonitorWorkAreaNearestWindow(child);
+ if (child_bounds.y() < 0)
+ child_bounds.set_y(0);
+ else if (child_bounds.y() + kTitleHeight > work_area.bottom())
+ child_bounds.set_y(work_area.bottom() - kTitleHeight);
+ SetChildBoundsDirect(child, child_bounds);
}
void ToplevelLayoutManager::OnWindowPropertyChanged(aura::Window* window,
diff --git a/ui/resources/aura/launcher_background.png b/ui/resources/aura/launcher_background.png
new file mode 100644
index 0000000..05626ab
--- /dev/null
+++ b/ui/resources/aura/launcher_background.png
Binary files differ
diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd
index 1997752..a67f53e 100644
--- a/ui/resources/ui_resources.grd
+++ b/ui/resources/ui_resources.grd
@@ -149,6 +149,7 @@
<include name="IDR_AURA_LAUNCHER_ICON_APPLIST" file="aura/applist.png" type="BINDATA" />
<include name="IDR_AURA_LAUNCHER_ICON_APPLIST_HOT" file="aura/applist_h.png" type="BINDATA" />
<include name="IDR_AURA_LAUNCHER_ICON_APPLIST_PUSHED" file="aura/applist_p.png" type="BINDATA" />
+ <include name="IDR_AURA_LAUNCHER_BACKGROUND" file="aura/launcher_background.png" type="BINDATA" />
<include name="IDR_AURA_SHADOW_RECT_TOP_LEFT" file="aura/shadow_rect_top_left.png" type="BINDATA" />
<include name="IDR_AURA_SHADOW_RECT_TOP" file="aura/shadow_rect_top.png" type="BINDATA" />
<include name="IDR_AURA_SHADOW_RECT_TOP_RIGHT" file="aura/shadow_rect_top_right.png" type="BINDATA" />