diff options
Diffstat (limited to 'chrome/views/button.h')
-rw-r--r-- | chrome/views/button.h | 160 |
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_ |