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