summaryrefslogtreecommitdiffstats
path: root/pdf/button.h
blob: fa2517d62b695e42c2c8216bdf6bae5f9620bdf0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// 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_