| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "views/controls/button/image_button.h" | 5 #include "views/controls/button/image_button.h" |
| 6 | 6 |
| 7 #include "app/gfx/canvas.h" | 7 #include "app/gfx/canvas.h" |
| 8 #include "app/throb_animation.h" | 8 #include "app/throb_animation.h" |
| 9 #include "skia/ext/image_operations.h" | 9 #include "skia/ext/image_operations.h" |
| 10 | 10 |
| 11 namespace views { | 11 namespace views { |
| 12 | 12 |
| 13 static const int kDefaultWidth = 16; // Default button width if no theme. | 13 static const int kDefaultWidth = 16; // Default button width if no theme. |
| 14 static const int kDefaultHeight = 14; // Default button height if no theme. | 14 static const int kDefaultHeight = 14; // Default button height if no theme. |
| 15 | 15 |
| 16 //////////////////////////////////////////////////////////////////////////////// | 16 //////////////////////////////////////////////////////////////////////////////// |
| 17 // ImageButton, public: | 17 // ImageButton, public: |
| 18 | 18 |
| 19 ImageButton::ImageButton(ButtonListener* listener) | 19 ImageButton::ImageButton(ButtonListener* listener) |
| 20 : CustomButton(listener), | 20 : CustomButton(listener), |
| 21 background_image_(NULL), | |
| 22 h_alignment_(ALIGN_LEFT), | 21 h_alignment_(ALIGN_LEFT), |
| 23 v_alignment_(ALIGN_TOP) { | 22 v_alignment_(ALIGN_TOP) { |
| 24 // By default, we request that the gfx::Canvas passed to our View::Paint() | 23 // By default, we request that the gfx::Canvas passed to our View::Paint() |
| 25 // implementation is flipped horizontally so that the button's bitmaps are | 24 // implementation is flipped horizontally so that the button's bitmaps are |
| 26 // mirrored when the UI directionality is right-to-left. | 25 // mirrored when the UI directionality is right-to-left. |
| 27 EnableCanvasFlippingForRTLUI(true); | 26 EnableCanvasFlippingForRTLUI(true); |
| 28 } | 27 } |
| 29 | 28 |
| 30 ImageButton::~ImageButton() { | 29 ImageButton::~ImageButton() { |
| 31 } | 30 } |
| 32 | 31 |
| 33 void ImageButton::SetImage(ButtonState aState, SkBitmap* anImage) { | 32 void ImageButton::SetImage(ButtonState aState, SkBitmap* anImage) { |
| 34 images_[aState] = anImage ? *anImage : SkBitmap(); | 33 images_[aState] = anImage ? *anImage : SkBitmap(); |
| 35 } | 34 } |
| 36 | 35 |
| 37 void ImageButton::SetBackground(SkColor color, | 36 void ImageButton::SetBackground(SkColor color, |
| 38 SkBitmap* image, | 37 SkBitmap* image, |
| 39 SkBitmap* mask) { | 38 SkBitmap* mask) { |
| 40 if (!color && !image) | 39 if (!image || !mask) { |
| 41 background_image_.reset(NULL); | 40 background_image_.reset(); |
| 41 return; |
| 42 } |
| 42 | 43 |
| 43 background_image_.reset(new SkBitmap( | 44 background_image_ = skia::ImageOperations::CreateButtonBackground(color, |
| 44 skia::ImageOperations::CreateButtonBackground(color, *image, *mask))); | 45 *image, |
| 46 *mask); |
| 45 } | 47 } |
| 46 | 48 |
| 47 void ImageButton::SetImageAlignment(HorizontalAlignment h_align, | 49 void ImageButton::SetImageAlignment(HorizontalAlignment h_align, |
| 48 VerticalAlignment v_align) { | 50 VerticalAlignment v_align) { |
| 49 h_alignment_ = h_align; | 51 h_alignment_ = h_align; |
| 50 v_alignment_ = v_align; | 52 v_alignment_ = v_align; |
| 51 SchedulePaint(); | 53 SchedulePaint(); |
| 52 } | 54 } |
| 53 | 55 |
| 54 //////////////////////////////////////////////////////////////////////////////// | 56 //////////////////////////////////////////////////////////////////////////////// |
| (...skipping 17 matching lines...) Expand all Loading... |
| 72 if (h_alignment_ == ALIGN_CENTER) | 74 if (h_alignment_ == ALIGN_CENTER) |
| 73 x = (width() - img.width()) / 2; | 75 x = (width() - img.width()) / 2; |
| 74 else if (h_alignment_ == ALIGN_RIGHT) | 76 else if (h_alignment_ == ALIGN_RIGHT) |
| 75 x = width() - img.width(); | 77 x = width() - img.width(); |
| 76 | 78 |
| 77 if (v_alignment_ == ALIGN_MIDDLE) | 79 if (v_alignment_ == ALIGN_MIDDLE) |
| 78 y = (height() - img.height()) / 2; | 80 y = (height() - img.height()) / 2; |
| 79 else if (v_alignment_ == ALIGN_BOTTOM) | 81 else if (v_alignment_ == ALIGN_BOTTOM) |
| 80 y = height() - img.height(); | 82 y = height() - img.height(); |
| 81 | 83 |
| 82 if (background_image_.get()) | 84 if (!background_image_.empty()) |
| 83 canvas->DrawBitmapInt(*(background_image_.get()), x, y); | 85 canvas->DrawBitmapInt(background_image_, x, y); |
| 84 canvas->DrawBitmapInt(img, x, y); | 86 canvas->DrawBitmapInt(img, x, y); |
| 85 } | 87 } |
| 86 PaintFocusBorder(canvas); | 88 PaintFocusBorder(canvas); |
| 87 } | 89 } |
| 88 | 90 |
| 89 //////////////////////////////////////////////////////////////////////////////// | 91 //////////////////////////////////////////////////////////////////////////////// |
| 90 // ImageButton, protected: | 92 // ImageButton, protected: |
| 91 | 93 |
| 92 SkBitmap ImageButton::GetImageToPaint() { | 94 SkBitmap ImageButton::GetImageToPaint() { |
| 93 SkBitmap img; | 95 SkBitmap img; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 | 160 |
| 159 bool ToggleImageButton::GetTooltipText(int x, int y, std::wstring* tooltip) { | 161 bool ToggleImageButton::GetTooltipText(int x, int y, std::wstring* tooltip) { |
| 160 if (!toggled_ || toggled_tooltip_text_.empty()) | 162 if (!toggled_ || toggled_tooltip_text_.empty()) |
| 161 return Button::GetTooltipText(x, y, tooltip); | 163 return Button::GetTooltipText(x, y, tooltip); |
| 162 | 164 |
| 163 *tooltip = toggled_tooltip_text_; | 165 *tooltip = toggled_tooltip_text_; |
| 164 return true; | 166 return true; |
| 165 } | 167 } |
| 166 | 168 |
| 167 } // namespace views | 169 } // namespace views |
| OLD | NEW |