Chromium Code Reviews| Index: ui/message_center/views/notification_view.cc |
| diff --git a/ui/message_center/views/notification_view.cc b/ui/message_center/views/notification_view.cc |
| index 69bd134a0c9832b80874b5fdfe04eadec33774b0..8c819868470b5186cdd252d40b8d829749a7ea43 100644 |
| --- a/ui/message_center/views/notification_view.cc |
| +++ b/ui/message_center/views/notification_view.cc |
| @@ -64,7 +64,9 @@ views::Border* MakeBorder(int top, |
| views::Border::CreateSolidSidedBorder(top, left, bottom, right, color); |
| } |
| -// ContainerViews is a vertical BoxLayout view that propagates its childrens' |
| +// ContainerView /////////////////////////////////////////////////////////////// |
|
dharcourt
2013/03/13 22:47:51
It's becoming hard to find nested classes in this
|
| + |
| +// ContainerViews are vertical BoxLayout views that propagates their childrens' |
| // ChildPreferredSizeChanged() and ChildVisibilityChanged() calls. |
| class ContainerView : public views::View { |
| public: |
| @@ -94,6 +96,8 @@ void ContainerView::ChildVisibilityChanged(View* child) { |
| PreferredSizeChanged(); |
| } |
| +// ItemView //////////////////////////////////////////////////////////////////// |
| + |
| // ItemViews are responsible for drawing each list notification item's title and |
| // message next to each other within a single column. |
| class ItemView : public views::View { |
| @@ -140,13 +144,12 @@ void ItemView::SetVisible(bool visible) { |
| child_at(i)->SetVisible(visible); |
| } |
| +// ProportionalImageView /////////////////////////////////////////////////////// |
| + |
| // ProportionalImageViews center their images to preserve their proportion. |
| -// Note that for this subclass of views::ImageView GetImageBounds() will return |
| -// potentially incorrect values (this can't be fixed because GetImageBounds() |
| -// is not virtual) and horizontal and vertical alignments will be ignored. |
| -class ProportionalImageView : public views::ImageView { |
| +class ProportionalImageView : public views::View { |
|
dharcourt
2013/03/13 22:47:51
Rather than having 3 lines of comment explaining w
|
| public: |
| - ProportionalImageView(); |
| + ProportionalImageView(const gfx::ImageSkia& image); |
| virtual ~ProportionalImageView(); |
| // Overridden from views::View: |
| @@ -157,17 +160,20 @@ class ProportionalImageView : public views::ImageView { |
| private: |
| gfx::Size GetImageSizeForWidth(int width); |
| + gfx::ImageSkia image_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(ProportionalImageView); |
| }; |
| -ProportionalImageView::ProportionalImageView() { |
| +ProportionalImageView::ProportionalImageView(const gfx::ImageSkia& image) |
| + : image_(image) { |
| } |
| ProportionalImageView::~ProportionalImageView() { |
| } |
| gfx::Size ProportionalImageView::GetPreferredSize() { |
| - gfx::Size size = GetImageSizeForWidth(GetImage().width()); |
| + gfx::Size size = GetImageSizeForWidth(image_.width()); |
| return gfx::Size(size.width() + GetInsets().width(), |
| size.height() + GetInsets().height()); |
| } |
| @@ -177,29 +183,32 @@ int ProportionalImageView::GetHeightForWidth(int width) { |
| } |
| void ProportionalImageView::OnPaint(gfx::Canvas* canvas) { |
| - View::OnPaint(canvas); |
| + views::View::OnPaint(canvas); |
| gfx::Size draw_size(GetImageSizeForWidth(width())); |
| if (!draw_size.IsEmpty()) { |
| - int x = (width() - draw_size.width()) / 2; |
| - int y = (height() - draw_size.height()) / 2; |
| + gfx::Rect draw_bounds = GetLocalBounds(); |
| + draw_bounds.Inset(GetInsets()); |
| + draw_bounds.ClampToCenteredSize(draw_size); |
|
dharcourt
2013/03/13 22:47:51
Fixed these calculations to work when there are in
|
| - gfx::Size image_size(GetImage().size()); |
| + gfx::Size image_size(image_.size()); |
| if (image_size == draw_size) { |
| - canvas->DrawImageInt(GetImage(), x, y); |
| + canvas->DrawImageInt(image_, draw_bounds.x(), draw_bounds.y()); |
| } else { |
| // Resize case |
| SkPaint paint; |
| paint.setFilterBitmap(true); |
| - canvas->DrawImageInt(GetImage(), 0, 0, |
| - image_size.width(), image_size.height(), x, y, |
| - draw_size.width(), draw_size.height(), true, paint); |
| + canvas->DrawImageInt(image_, 0, 0, |
| + image_size.width(), image_size.height(), |
| + draw_bounds.x(), draw_bounds.y(), |
| + draw_size.width(), draw_size.height(), |
| + true, paint); |
| } |
| } |
| } |
| gfx::Size ProportionalImageView::GetImageSizeForWidth(int width) { |
| - gfx::Size size = visible() ? GetImage().size() : gfx::Size(); |
| + gfx::Size size = visible() ? image_.size() : gfx::Size(); |
| if (width > 0 && !size.IsEmpty()) { |
| double proportion = size.height() / (double) size.width(); |
| size.SetSize(width, std::max(0.5 + width * proportion, 1.0)); |
| @@ -211,7 +220,9 @@ gfx::Size ProportionalImageView::GetImageSizeForWidth(int width) { |
| return size; |
| } |
| -// NotificationsButtons render the action buttons of notifications. |
| +// NotificationButton ////////////////////////////////////////////////////////// |
| + |
| +// NotificationButtons render the action buttons of notifications. |
| class NotificationButton : public views::CustomButton { |
| public: |
| NotificationButton(views::ButtonListener* listener); |
| @@ -287,6 +298,8 @@ int NotificationButton::GetHeightForWidth(int width) { |
| namespace message_center { |
| +// NotificationView //////////////////////////////////////////////////////////// |
| + |
| // static |
| MessageView* NotificationView::Create(const Notification& notification, |
| NotificationChangeObserver* observer, |
| @@ -380,8 +393,7 @@ NotificationView::NotificationView(const Notification& notification, |
| } |
| // Create the notification icon view. |
| - icon_view_ = new ProportionalImageView(); |
| - icon_view_->SetImage(notification.icon().AsImageSkia()); |
| + icon_view_ = new ProportionalImageView(notification.icon().AsImageSkia()); |
| // Create the bottom_view_, which collects into a vertical box all content |
| // below the notification icon except for the expand button. |
| @@ -392,9 +404,8 @@ NotificationView::NotificationView(const Notification& notification, |
| // Create the image view if appropriate. |
| image_view_ = NULL; |
| if (!notification.image().IsEmpty()) { |
| - image_view_ = new ProportionalImageView(); |
| + image_view_ = new ProportionalImageView(notification.image().AsImageSkia()); |
| image_view_->SetVisible(is_expanded()); |
| - image_view_->SetImage(notification.image().ToImageSkia()); |
| bottom_view_->AddChildView(image_view_); |
| } |
| @@ -417,7 +428,7 @@ NotificationView::NotificationView(const Notification& notification, |
| expand_button()->SetVisible(expandable && !is_expanded()); |
| // Put together the different content and control views. Layering those allows |
| - // for proper layout logit and it also allows the close and expand buttons to |
| + // for proper layout logic and it also allows the close and expand buttons to |
| // overlap the content as needed to provide large enough click and touch areas |
| // (<http://crbug.com/168822> and <http://crbug.com/168856>). |
| AddChildView(background_view_); |