C++程序  |  85行  |  2.57 KB

// 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_FADING_CONTROLS_H_
#define PDF_FADING_CONTROLS_H_

#include <list>

#include "pdf/control.h"

namespace chrome_pdf {

class FadingControls : public Control,
                       public ControlOwner {
 public:
  enum FadingState {
    NONE,
    FADING_IN,
    FADING_OUT
  };

  FadingControls();
  virtual ~FadingControls();
  virtual bool CreateFadingControls(
      uint32 id, const pp::Rect& rc, bool visible,
      Control::Owner* delegate, uint8 transparency);

  // Control interface.
  virtual void Paint(pp::ImageData* image_data, const pp::Rect& rc);
  virtual bool HandleEvent(const pp::InputEvent& event);
  virtual void OnTimerFired(uint32 timer_id);
  virtual void EventCaptureReleased();
  virtual void MoveBy(const pp::Point& offset, bool invalidate);

  // ControlOwner interface.
  virtual void OnEvent(uint32 control_id, uint32 event_id, void* data);
  virtual void Invalidate(uint32 control_id, const pp::Rect& rc);
  virtual uint32 ScheduleTimer(uint32 control_id, uint32 timeout_ms);
  virtual void SetEventCapture(uint32 control_id, bool set_capture);
  virtual void SetCursor(uint32 control_id, PP_CursorType_Dev cursor_type);
  virtual pp::Instance* GetInstance();

  // FadingControls interface
  // This function takes ownership of the control, and will destoy it
  // when control is destroyed.
  // Input control MUST be located inside FadingControls boundaries, and has
  // this instance of FadingControls as a delegate.
  virtual bool AddControl(Control* control);
  virtual void RemoveControl(uint32 control_id);
  virtual Control* GetControl(uint32 id);
  virtual pp::Rect GetControlsRect();

  // Expand/Shrink area which triggers inner control appearance to the left.
  virtual bool ExpandLeft(int offset);

  // Fade-in, then show controls for time_ms, and then fade-out. Any mouse
  // event in this control area will interrupt splash mode.
  virtual void Splash(uint32 time_ms);

  uint8 current_transparency() const { return current_transparency_; }

 private:
  bool NotifyControls(const pp::InputEvent& event);
  void FadeIn();
  void FadeOut();
  void OnFadingComplete();
  void CancelSplashMode();

  std::list<Control*> controls_;
  FadingState state_;
  uint8 current_transparency_;
  uint32 fading_timer_id_;
  uint32 current_capture_control_;
  uint32 fading_timeout_;
  uint32 alpha_shift_;
  bool splash_;
  uint32 splash_timeout_;
};

}  // namespace chrome_pdf

#endif  // PDF_FADING_CONTROLS_H_