summaryrefslogtreecommitdiffstats
path: root/pdf/page_indicator.h
blob: 0d06ee1a0b04701ff7c043db32c087e7c6a364bc (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
72
// Copyright (c) 2012 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_PAGE_INDICATOR_H_
#define PDF_PAGE_INDICATOR_H_

#include <string>
#include <vector>

#include "pdf/control.h"
#include "pdf/fading_control.h"
#include "ppapi/cpp/image_data.h"
#include "ppapi/cpp/point.h"
#include "ppapi/cpp/rect.h"

namespace chrome_pdf {

class NumberImageGenerator;

const uint32 kPageIndicatorScrollFadeTimeoutMs = 240;
const uint32 kPageIndicatorInitialFadeTimeoutMs = 960;
const uint32 kPageIndicatorSplashTimeoutMs = 2000;

class PageIndicator : public FadingControl {
 public:
  PageIndicator();
  virtual ~PageIndicator();
  virtual bool CreatePageIndicator(
      uint32 id,
      bool visible,
      Control::Owner* delegate,
      NumberImageGenerator* number_image_generator,
      bool always_visible);

  void Configure(const pp::Point& origin, const pp::ImageData& background);

  int current_page() const { return current_page_; }
  void set_current_page(int current_page);

  virtual void Splash();
  void Splash(uint32 splash_timeout, uint32 page_timeout);

  // Returns the y position where the page indicator should be drawn given the
  // position of the scrollbar and the total document height and the plugin
  // height.
  int GetYPosition(
      int vertical_scrollbar_y, int document_height, int plugin_height);

  // Control interface.
  virtual void Paint(pp::ImageData* image_data, const pp::Rect& rc);
  virtual void OnTimerFired(uint32 timer_id);

  // FadingControl interface.
  virtual void OnFadeInComplete();

 private:
  void ResetFadeOutTimer();

  int current_page_;
  pp::ImageData background_;
  NumberImageGenerator* number_image_generator_;
  uint32 fade_out_timer_id_;
  uint32 splash_timeout_;
  uint32 fade_timeout_;

  bool always_visible_;
};

}  // namespace chrome_pdf

#endif  // PDF_PAGE_INDICATOR_H_