summaryrefslogtreecommitdiffstats
path: root/chrome/views/button.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/views/button.h')
-rw-r--r--chrome/views/button.h160
1 files changed, 160 insertions, 0 deletions
diff --git a/chrome/views/button.h b/chrome/views/button.h
new file mode 100644
index 0000000..9840ea3
--- /dev/null
+++ b/chrome/views/button.h
@@ -0,0 +1,160 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef CHROME_VIEWS_BUTTON_H_
+#define CHROME_VIEWS_BUTTON_H_
+
+#include <windows.h>
+
+#include "chrome/views/base_button.h"
+#include "skia/include/SkBitmap.h"
+
+namespace ChromeViews {
+
+class MouseEvent;
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Button
+//
+// A simple button class
+//
+////////////////////////////////////////////////////////////////////////////////
+class Button : public BaseButton {
+ public:
+ //
+ // Create a Button
+ Button();
+ virtual ~Button();
+
+ //
+ // Set the image the button should use for the provided state.
+ virtual void SetImage(ButtonState aState, SkBitmap* anImage);
+
+ enum HorizontalAlignment { ALIGN_LEFT = 0,
+ ALIGN_CENTER,
+ ALIGN_RIGHT, };
+
+ enum VerticalAlignment {ALIGN_TOP = 0,
+ ALIGN_MIDDLE,
+ ALIGN_BOTTOM };
+
+ void SetImageAlignment(HorizontalAlignment h_align,
+ VerticalAlignment v_align);
+
+ //
+ // Computes the minimum size given the current theme and graphics
+ void GetPreferredSize(CSize *result);
+
+ // Returns the MSAA default action of the current view. The string returned
+ // describes the default action that will occur when executing
+ // IAccessible::DoDefaultAction.
+ bool GetAccessibleDefaultAction(std::wstring* action);
+
+ // Returns the MSAA role of the current view. The role is what assistive
+ // technologies (ATs) use to determine what behavior to expect from a given
+ // control.
+ bool GetAccessibleRole(VARIANT* role);
+
+ // Set the tooltip text for this button.
+ void SetTooltipText(const std::wstring& text);
+
+ // Return the tooltip text currently used by this button.
+ std::wstring GetTooltipText() const;
+
+ // Overridden from View.
+ virtual bool GetTooltipText(int x, int y, std::wstring* tooltip);
+ protected:
+
+ // Overridden to render the button.
+ virtual void Paint(ChromeCanvas* canvas);
+
+ // Returns the image to paint. This is invoked from paint and returns a value
+ // from images.
+ virtual SkBitmap GetImageToPaint();
+
+ // Images.
+ SkBitmap images_[kButtonStateCount];
+
+ // Alignment State.
+ HorizontalAlignment h_alignment_;
+ VerticalAlignment v_alignment_;
+
+ // The tooltip text or empty string for none.
+ std::wstring tooltip_text_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(Button);
+};
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// ToggleButton
+//
+// A togglable button. It swaps out its graphics when toggled.
+//
+////////////////////////////////////////////////////////////////////////////////
+class ToggleButton : public Button {
+ public:
+ ToggleButton();
+ virtual ~ToggleButton();
+
+ // Overridden from Button.
+ virtual void SetImage(ButtonState aState, SkBitmap* anImage);
+
+ // Like Button::SetImage(), but to set the graphics used for the
+ // "has been toggled" state. Must be called for each button state
+ // before the button is toggled.
+ void SetToggledImage(ButtonState state, SkBitmap* image);
+
+ virtual bool GetTooltipText(int x, int y, std::wstring* tooltip);
+
+ // Set the tooltip text displayed when the button is toggled.
+ void SetToggledTooltipText(const std::wstring& tooltip);
+
+ // Change the toggled state.
+ void SetToggled(bool toggled);
+
+ private:
+ // The parent class's images_ member is used for the current images,
+ // and this array is used to hold the alternative images.
+ // We swap between the two when toggling.
+ SkBitmap alternate_images_[kButtonStateCount];
+
+ bool toggled_;
+
+ // The parent class's tooltip_text_ is displayed when not toggled, and
+ // this one is shown when toggled.
+ std::wstring toggled_tooltip_text_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(ToggleButton);
+};
+
+} // namespace
+
+#endif // CHROME_VIEWS_BUTTON_H_