// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef PDF_BUTTON_H_ #define PDF_BUTTON_H_ #include "pdf/control.h" #include "ppapi/cpp/image_data.h" #include "ppapi/cpp/rect.h" namespace chrome_pdf { class Button : public Control { public: enum ButtonEventIds { EVENT_ID_BUTTON_CLICKED, EVENT_ID_BUTTON_STATE_CHANGED, }; enum ButtonStyle { BUTTON_CLICKABLE, BUTTON_STATE }; enum ButtonState { BUTTON_NORMAL, BUTTON_HIGHLIGHTED, BUTTON_PRESSED, BUTTON_PRESSED_STICKY, }; Button(); virtual ~Button(); virtual bool CreateButton(uint32 id, const pp::Point& origin, bool visible, Control::Owner* delegate, ButtonStyle style, const pp::ImageData& face_normal, const pp::ImageData& face_highlighted, const pp::ImageData& face_pressed); virtual void Paint(pp::ImageData* image_data, const pp::Rect& rc); virtual bool HandleEvent(const pp::InputEvent& event); virtual void OnEventCaptureReleased(); virtual void Show(bool visible, bool invalidate); virtual void AdjustTransparency(uint8 transparency, bool invalidate); ButtonState state() const { return state_; } bool IsPressed() const { return state() == BUTTON_PRESSED_STICKY; } void SetPressedState(bool pressed); private: void OnButtonClicked(); const pp::ImageData& GetCurrentImage(); void ChangeState(ButtonState new_state, bool force); ButtonStyle style_; ButtonState state_; bool is_pressed_; pp::ImageData normal_; pp::ImageData highlighted_; pp::ImageData pressed_; }; } // namespace chrome_pdf #endif // PDF_BUTTON_H_