// 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_THUMBNAIL_CONTROL_H_
#define PDF_THUMBNAIL_CONTROL_H_
#include <map>
#include <vector>
#include "pdf/control.h"
#include "pdf/pdf_engine.h"
#include "ppapi/cpp/input_event.h"
namespace chrome_pdf {
class NumberImageGenerator;
class ThumbnailControl : public Control {
public:
enum ThumbnailEventIds {
EVENT_ID_THUMBNAIL_SELECTED = 100,
};
explicit ThumbnailControl();
virtual ~ThumbnailControl();
// Sets current position of the thumnail control.
void SetPosition(int position, int total, bool invalidate);
void SlideIn();
void SlideOut();
virtual bool CreateThumbnailControl(
uint32 id, const pp::Rect& rc,
bool visible, Owner* owner, PDFEngine* engine,
NumberImageGenerator* number_image_generator);
// Control interface.
virtual void Show(bool visible, bool invalidate);
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 ResetEngine(PDFEngine* engine);
private:
void ClearCache();
struct PageInfo {
int index;
pp::Rect rect;
};
PDFEngine* engine_;
pp::Rect visible_rect_;
std::vector<PageInfo> visible_pages_;
std::map<int, pp::ImageData*> image_cache_;
int sliding_width_;
int sliding_shift_;
int sliding_timeout_;
uint32 sliding_timer_id_;
NumberImageGenerator* number_image_generator_;
};
} // namespace chrome_pdf
#endif // PDF_THUMBNAIL_CONTROL_H_