(Views only)Resize the menu buttons on the Website Settings UI to fit the button text.


BUG=113688
TEST=none

Review URL: https://chromiumcodereview.appspot.com/10829038

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149173 0039d316-1c4b-4281-b951-d872f2087c98
parent 3f1baeb5
...@@ -94,8 +94,14 @@ class PermissionMenuButton : public views::MenuButton, ...@@ -94,8 +94,14 @@ class PermissionMenuButton : public views::MenuButton,
PermissionMenuModel* model); PermissionMenuModel* model);
virtual ~PermissionMenuButton(); virtual ~PermissionMenuButton();
// Overridden from views::MenuButton.
virtual gfx::Size GetPreferredSize() OVERRIDE;
// Overridden from views::TextButton.
virtual void SetText(const string16& text) OVERRIDE;
private: private:
// Overridden from views::MenuButtonListener: // Overridden from views::MenuButtonListener.
virtual void OnMenuButtonClicked(View* source, virtual void OnMenuButtonClicked(View* source,
const gfx::Point& point) OVERRIDE; const gfx::Point& point) OVERRIDE;
...@@ -158,7 +164,7 @@ void PermissionMenuModel::ExecuteCommand(int command_id) { ...@@ -158,7 +164,7 @@ void PermissionMenuModel::ExecuteCommand(int command_id) {
} }
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// PermissionMenuModel // PermissionMenuButton
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
PermissionMenuButton::PermissionMenuButton(const string16& text, PermissionMenuButton::PermissionMenuButton(const string16& text,
...@@ -170,6 +176,27 @@ PermissionMenuButton::PermissionMenuButton(const string16& text, ...@@ -170,6 +176,27 @@ PermissionMenuButton::PermissionMenuButton(const string16& text,
PermissionMenuButton::~PermissionMenuButton() { PermissionMenuButton::~PermissionMenuButton() {
} }
gfx::Size PermissionMenuButton::GetPreferredSize() {
gfx::Insets insets = GetInsets();
// Scale the button to the current text size.
gfx::Size prefsize(text_size_.width() + insets.width(),
text_size_.height() + insets.height());
if (max_width_ > 0)
prefsize.set_width(std::min(max_width_, prefsize.width()));
if (show_menu_marker()) {
prefsize.Enlarge(menu_marker()->width() +
views::MenuButton::kMenuMarkerPaddingLeft +
views::MenuButton::kMenuMarkerPaddingRight,
0);
}
return prefsize;
}
void PermissionMenuButton::SetText(const string16& text) {
MenuButton::SetText(text);
SizeToPreferredSize();
}
void PermissionMenuButton::OnMenuButtonClicked(View* source, void PermissionMenuButton::OnMenuButtonClicked(View* source,
const gfx::Point& point) { const gfx::Point& point) {
views::MenuModelAdapter menu_model_adapter(menu_model_); views::MenuModelAdapter menu_model_adapter(menu_model_);
...@@ -286,5 +313,14 @@ ContentSettingsType PermissionSelectorView::GetPermissionType() const { ...@@ -286,5 +313,14 @@ ContentSettingsType PermissionSelectorView::GetPermissionType() const {
return menu_button_model_->site_permission(); return menu_button_model_->site_permission();
} }
void PermissionSelectorView::ChildPreferredSizeChanged(View* child) {
SizeToPreferredSize();
// FIXME: The parent is only a plain |View| that is used as a
// container/box/panel. The SizeToPreferredSize method of the parent is
// called here directly in order not to implement a custom |View| class with
// its own implementation of the ChildPreferredSizeChanged method.
parent()->SizeToPreferredSize();
}
PermissionSelectorView::~PermissionSelectorView() { PermissionSelectorView::~PermissionSelectorView() {
} }
...@@ -46,6 +46,10 @@ class PermissionSelectorView : public views::View { ...@@ -46,6 +46,10 @@ class PermissionSelectorView : public views::View {
// Returns the permission type. // Returns the permission type.
ContentSettingsType GetPermissionType() const; ContentSettingsType GetPermissionType() const;
protected:
// Overridden from views::View.
virtual void ChildPreferredSizeChanged(View* child) OVERRIDE;
private: private:
virtual ~PermissionSelectorView(); virtual ~PermissionSelectorView();
......
...@@ -30,15 +30,13 @@ namespace views { ...@@ -30,15 +30,13 @@ namespace views {
// pressed event to show the menu. // pressed event to show the menu.
static const int64 kMinimumTimeBetweenButtonClicks = 100; static const int64 kMinimumTimeBetweenButtonClicks = 100;
// How much padding to put on the left and right of the menu marker.
static const int kMenuMarkerPaddingLeft = 3;
static const int kMenuMarkerPaddingRight = -1;
// Default menu offset. // Default menu offset.
static const int kDefaultMenuOffsetX = -2; static const int kDefaultMenuOffsetX = -2;
static const int kDefaultMenuOffsetY = -4; static const int kDefaultMenuOffsetY = -4;
// static // static
const int MenuButton::kMenuMarkerPaddingLeft = 3;
const int MenuButton::kMenuMarkerPaddingRight = -1;
const char MenuButton::kViewClassName[] = "views/MenuButton"; const char MenuButton::kViewClassName[] = "views/MenuButton";
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
......
...@@ -30,6 +30,10 @@ class VIEWS_EXPORT MenuButton : public TextButton { ...@@ -30,6 +30,10 @@ class VIEWS_EXPORT MenuButton : public TextButton {
public: public:
static const char kViewClassName[]; static const char kViewClassName[];
// How much padding to put on the left and right of the menu marker.
static const int kMenuMarkerPaddingLeft;
static const int kMenuMarkerPaddingRight;
// Create a Button. // Create a Button.
MenuButton(ButtonListener* listener, MenuButton(ButtonListener* listener,
const string16& text, const string16& text,
...@@ -37,9 +41,11 @@ class VIEWS_EXPORT MenuButton : public TextButton { ...@@ -37,9 +41,11 @@ class VIEWS_EXPORT MenuButton : public TextButton {
bool show_menu_marker); bool show_menu_marker);
virtual ~MenuButton(); virtual ~MenuButton();
bool show_menu_marker() const { return show_menu_marker_; }
void set_menu_marker(const gfx::ImageSkia* menu_marker) { void set_menu_marker(const gfx::ImageSkia* menu_marker) {
menu_marker_ = menu_marker; menu_marker_ = menu_marker;
} }
const gfx::ImageSkia* menu_marker() const { return menu_marker_; }
const gfx::Point& menu_offset() const { return menu_offset_; } const gfx::Point& menu_offset() const { return menu_offset_; }
void set_menu_offset(int x, int y) { menu_offset_.SetPoint(x, y); } void set_menu_offset(int x, int y) { menu_offset_.SetPoint(x, y); }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment