1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef PDF_FADING_CONTROLS_H_
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define PDF_FADING_CONTROLS_H_
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <list>
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "pdf/control.h"
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace chrome_pdf {
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class FadingControls : public Control,
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                       public ControlOwner {
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  enum FadingState {
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    NONE,
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    FADING_IN,
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    FADING_OUT
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  };
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FadingControls();
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~FadingControls();
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool CreateFadingControls(
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      uint32 id, const pp::Rect& rc, bool visible,
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      Control::Owner* delegate, uint8 transparency);
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Control interface.
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void Paint(pp::ImageData* image_data, const pp::Rect& rc);
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool HandleEvent(const pp::InputEvent& event);
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnTimerFired(uint32 timer_id);
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void EventCaptureReleased();
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void MoveBy(const pp::Point& offset, bool invalidate);
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // ControlOwner interface.
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnEvent(uint32 control_id, uint32 event_id, void* data);
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void Invalidate(uint32 control_id, const pp::Rect& rc);
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual uint32 ScheduleTimer(uint32 control_id, uint32 timeout_ms);
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void SetEventCapture(uint32 control_id, bool set_capture);
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void SetCursor(uint32 control_id, PP_CursorType_Dev cursor_type);
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual pp::Instance* GetInstance();
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // FadingControls interface
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // This function takes ownership of the control, and will destoy it
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // when control is destroyed.
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Input control MUST be located inside FadingControls boundaries, and has
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // this instance of FadingControls as a delegate.
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool AddControl(Control* control);
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void RemoveControl(uint32 control_id);
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual Control* GetControl(uint32 id);
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual pp::Rect GetControlsRect();
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Expand/Shrink area which triggers inner control appearance to the left.
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool ExpandLeft(int offset);
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Fade-in, then show controls for time_ms, and then fade-out. Any mouse
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // event in this control area will interrupt splash mode.
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void Splash(uint32 time_ms);
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  uint8 current_transparency() const { return current_transparency_; }
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool NotifyControls(const pp::InputEvent& event);
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void FadeIn();
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void FadeOut();
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void OnFadingComplete();
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void CancelSplashMode();
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::list<Control*> controls_;
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FadingState state_;
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  uint8 current_transparency_;
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  uint32 fading_timer_id_;
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  uint32 current_capture_control_;
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  uint32 fading_timeout_;
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  uint32 alpha_shift_;
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool splash_;
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  uint32 splash_timeout_;
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace chrome_pdf
82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // PDF_FADING_CONTROLS_H_
84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
85