(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,
PermissionMenuModel* model);
virtual ~PermissionMenuButton();
// Overridden from views::MenuButton.
virtual gfx::Size GetPreferredSize() OVERRIDE;
// Overridden from views::TextButton.
virtual void SetText(const string16& text) OVERRIDE;
private:
// Overridden from views::MenuButtonListener:
// Overridden from views::MenuButtonListener.
virtual void OnMenuButtonClicked(View* source,
const gfx::Point& point) OVERRIDE;
......@@ -158,7 +164,7 @@ void PermissionMenuModel::ExecuteCommand(int command_id) {
}
///////////////////////////////////////////////////////////////////////////////
// PermissionMenuModel
// PermissionMenuButton
///////////////////////////////////////////////////////////////////////////////
PermissionMenuButton::PermissionMenuButton(const string16& text,
......@@ -170,6 +176,27 @@ PermissionMenuButton::PermissionMenuButton(const string16& text,
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,
const gfx::Point& point) {
views::MenuModelAdapter menu_model_adapter(menu_model_);
......@@ -286,5 +313,14 @@ ContentSettingsType PermissionSelectorView::GetPermissionType() const {
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() {
}
......@@ -46,6 +46,10 @@ class PermissionSelectorView : public views::View {
// Returns the permission type.
ContentSettingsType GetPermissionType() const;
protected:
// Overridden from views::View.
virtual void ChildPreferredSizeChanged(View* child) OVERRIDE;
private:
virtual ~PermissionSelectorView();
......
......@@ -30,15 +30,13 @@ namespace views {
// pressed event to show the menu.
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.
static const int kDefaultMenuOffsetX = -2;
static const int kDefaultMenuOffsetY = -4;
// static
const int MenuButton::kMenuMarkerPaddingLeft = 3;
const int MenuButton::kMenuMarkerPaddingRight = -1;
const char MenuButton::kViewClassName[] = "views/MenuButton";
////////////////////////////////////////////////////////////////////////////////
......
......@@ -30,6 +30,10 @@ class VIEWS_EXPORT MenuButton : public TextButton {
public:
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.
MenuButton(ButtonListener* listener,
const string16& text,
......@@ -37,9 +41,11 @@ class VIEWS_EXPORT MenuButton : public TextButton {
bool show_menu_marker);
virtual ~MenuButton();
bool show_menu_marker() const { return show_menu_marker_; }
void set_menu_marker(const gfx::ImageSkia* menu_marker) {
menu_marker_ = menu_marker;
}
const gfx::ImageSkia* menu_marker() const { return menu_marker_; }
const gfx::Point& menu_offset() const { return menu_offset_; }
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