// 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_