| Index: examples/pdf_viewer/pdf_viewer.cc
|
| diff --git a/examples/pdf_viewer/pdf_viewer.cc b/examples/pdf_viewer/pdf_viewer.cc
|
| deleted file mode 100644
|
| index 57370d0decdd1d6755546697bed17119c5717946..0000000000000000000000000000000000000000
|
| --- a/examples/pdf_viewer/pdf_viewer.cc
|
| +++ /dev/null
|
| @@ -1,221 +0,0 @@
|
| -// Copyright 2014 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.
|
| -
|
| -#include <string>
|
| -
|
| -#include "examples/bitmap_uploader/bitmap_uploader.h"
|
| -#include "mojo/application/application_runner_chromium.h"
|
| -#include "mojo/application/content_handler_factory.h"
|
| -#include "mojo/data_pipe_utils/data_pipe_utils.h"
|
| -#include "mojo/public/c/system/main.h"
|
| -#include "mojo/public/cpp/application/application_connection.h"
|
| -#include "mojo/public/cpp/application/application_delegate.h"
|
| -#include "mojo/public/cpp/application/application_impl.h"
|
| -#include "mojo/public/cpp/application/interface_factory_impl.h"
|
| -#include "mojo/public/cpp/application/service_provider_impl.h"
|
| -#include "mojo/services/content_handler/interfaces/content_handler.mojom.h"
|
| -#include "mojo/services/input_events/interfaces/input_events.mojom.h"
|
| -#include "mojo/services/input_events/interfaces/input_key_codes.mojom.h"
|
| -#include "mojo/services/view_manager/cpp/types.h"
|
| -#include "mojo/services/view_manager/cpp/view.h"
|
| -#include "mojo/services/view_manager/cpp/view_manager.h"
|
| -#include "mojo/services/view_manager/cpp/view_manager_client_factory.h"
|
| -#include "mojo/services/view_manager/cpp/view_manager_delegate.h"
|
| -#include "mojo/services/view_manager/cpp/view_observer.h"
|
| -#include "third_party/pdfium/fpdfsdk/include/fpdf_ext.h"
|
| -#include "third_party/pdfium/fpdfsdk/include/fpdfview.h"
|
| -#include "v8/include/v8.h"
|
| -
|
| -#define BACKGROUND_COLOR 0xFF888888
|
| -
|
| -namespace mojo {
|
| -namespace examples {
|
| -
|
| -namespace {
|
| -
|
| -class EmbedderData {
|
| - public:
|
| - EmbedderData(Shell* shell, View* root) : bitmap_uploader_(root) {
|
| - bitmap_uploader_.Init(shell);
|
| - bitmap_uploader_.SetColor(BACKGROUND_COLOR);
|
| - }
|
| -
|
| - BitmapUploader& bitmap_uploader() { return bitmap_uploader_; }
|
| -
|
| - private:
|
| - BitmapUploader bitmap_uploader_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(EmbedderData);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -class PDFView : public ApplicationDelegate,
|
| - public ViewManagerDelegate,
|
| - public ViewObserver {
|
| - public:
|
| - PDFView(URLResponsePtr response)
|
| - : current_page_(0), page_count_(0), doc_(NULL), app_(nullptr) {
|
| - FetchPDF(response.Pass());
|
| - }
|
| -
|
| - ~PDFView() override {
|
| - if (doc_)
|
| - FPDF_CloseDocument(doc_);
|
| - for (auto& roots : embedder_for_roots_) {
|
| - roots.first->RemoveObserver(this);
|
| - delete roots.second;
|
| - }
|
| - }
|
| -
|
| - private:
|
| - // Overridden from ApplicationDelegate:
|
| - void Initialize(ApplicationImpl* app) override {
|
| - app_ = app;
|
| - view_manager_client_factory_.reset(
|
| - new ViewManagerClientFactory(app->shell(), this));
|
| - }
|
| -
|
| - bool ConfigureIncomingConnection(ApplicationConnection* connection) override {
|
| - connection->AddService(view_manager_client_factory_.get());
|
| - return true;
|
| - }
|
| -
|
| - // Overridden from ViewManagerDelegate:
|
| - void OnEmbed(View* root,
|
| - InterfaceRequest<ServiceProvider> services,
|
| - ServiceProviderPtr exposed_services) override {
|
| - DCHECK(embedder_for_roots_.find(root) == embedder_for_roots_.end());
|
| - root->AddObserver(this);
|
| - EmbedderData* embedder_data = new EmbedderData(app_->shell(), root);
|
| - embedder_for_roots_[root] = embedder_data;
|
| - DrawBitmap(embedder_data);
|
| - }
|
| -
|
| - void OnViewManagerDisconnected(ViewManager* view_manager) override {}
|
| -
|
| - // Overridden from ViewObserver:
|
| - void OnViewBoundsChanged(View* view,
|
| - const Rect& old_bounds,
|
| - const Rect& new_bounds) override {
|
| - DCHECK(embedder_for_roots_.find(view) != embedder_for_roots_.end());
|
| - DrawBitmap(embedder_for_roots_[view]);
|
| - }
|
| -
|
| - void OnViewInputEvent(View* view, const EventPtr& event) override {
|
| - DCHECK(embedder_for_roots_.find(view) != embedder_for_roots_.end());
|
| - if (event->key_data &&
|
| - (event->action != EventType::KEY_PRESSED || event->key_data->is_char)) {
|
| - return;
|
| - }
|
| - if ((event->key_data &&
|
| - event->key_data->windows_key_code == KeyboardCode::DOWN) ||
|
| - (event->pointer_data && event->pointer_data->vertical_wheel < 0)) {
|
| - if (current_page_ < (page_count_ - 1)) {
|
| - current_page_++;
|
| - DrawBitmap(embedder_for_roots_[view]);
|
| - }
|
| - } else if ((event->key_data &&
|
| - event->key_data->windows_key_code == KeyboardCode::UP) ||
|
| - (event->pointer_data &&
|
| - event->pointer_data->vertical_wheel > 0)) {
|
| - if (current_page_ > 0) {
|
| - current_page_--;
|
| - DrawBitmap(embedder_for_roots_[view]);
|
| - }
|
| - }
|
| - }
|
| -
|
| - void OnViewDestroyed(View* view) override {
|
| - DCHECK(embedder_for_roots_.find(view) != embedder_for_roots_.end());
|
| - const auto& it = embedder_for_roots_.find(view);
|
| - DCHECK(it != embedder_for_roots_.end());
|
| - delete it->second;
|
| - embedder_for_roots_.erase(it);
|
| - if (embedder_for_roots_.size() == 0)
|
| - ApplicationImpl::Terminate();
|
| - }
|
| -
|
| - void DrawBitmap(EmbedderData* embedder_data) {
|
| - if (!doc_)
|
| - return;
|
| -
|
| - FPDF_PAGE page = FPDF_LoadPage(doc_, current_page_);
|
| - int width = static_cast<int>(FPDF_GetPageWidth(page));
|
| - int height = static_cast<int>(FPDF_GetPageHeight(page));
|
| -
|
| - scoped_ptr<std::vector<unsigned char>> bitmap;
|
| - bitmap.reset(new std::vector<unsigned char>);
|
| - bitmap->resize(width * height * 4);
|
| -
|
| - FPDF_BITMAP f_bitmap = FPDFBitmap_CreateEx(width, height, FPDFBitmap_BGRA,
|
| - &(*bitmap)[0], width * 4);
|
| - FPDFBitmap_FillRect(f_bitmap, 0, 0, width, height, 0xFFFFFFFF);
|
| - FPDF_RenderPageBitmap(f_bitmap, page, 0, 0, width, height, 0, 0);
|
| - FPDFBitmap_Destroy(f_bitmap);
|
| -
|
| - FPDF_ClosePage(page);
|
| -
|
| - embedder_data->bitmap_uploader().SetBitmap(width, height, bitmap.Pass(),
|
| - BitmapUploader::BGRA);
|
| - }
|
| -
|
| - void FetchPDF(URLResponsePtr response) {
|
| - data_.clear();
|
| - mojo::common::BlockingCopyToString(response->body.Pass(), &data_);
|
| - if (data_.length() >= static_cast<size_t>(std::numeric_limits<int>::max()))
|
| - return;
|
| - doc_ = FPDF_LoadMemDocument(data_.data(), static_cast<int>(data_.length()),
|
| - nullptr);
|
| - page_count_ = FPDF_GetPageCount(doc_);
|
| - }
|
| -
|
| - std::string data_;
|
| - int current_page_;
|
| - int page_count_;
|
| - FPDF_DOCUMENT doc_;
|
| - ApplicationImpl* app_;
|
| - std::map<View*, EmbedderData*> embedder_for_roots_;
|
| - scoped_ptr<ViewManagerClientFactory> view_manager_client_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(PDFView);
|
| -};
|
| -
|
| -class PDFViewer : public ApplicationDelegate,
|
| - public ContentHandlerFactory::ManagedDelegate {
|
| - public:
|
| - PDFViewer() : content_handler_factory_(this) {
|
| - v8::V8::InitializeICU();
|
| - FPDF_InitLibrary();
|
| - }
|
| -
|
| - ~PDFViewer() override { FPDF_DestroyLibrary(); }
|
| -
|
| - private:
|
| - // Overridden from ApplicationDelegate:
|
| - bool ConfigureIncomingConnection(ApplicationConnection* connection) override {
|
| - connection->AddService(&content_handler_factory_);
|
| - return true;
|
| - }
|
| -
|
| - // Overridden from ContentHandlerFactory::ManagedDelegate:
|
| - scoped_ptr<ContentHandlerFactory::HandledApplicationHolder>
|
| - CreateApplication(InterfaceRequest<Application> application_request,
|
| - URLResponsePtr response) override {
|
| - return make_handled_factory_holder(new mojo::ApplicationImpl(
|
| - new PDFView(response.Pass()), application_request.Pass()));
|
| - }
|
| -
|
| - ContentHandlerFactory content_handler_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(PDFViewer);
|
| -};
|
| -
|
| -} // namespace examples
|
| -} // namespace mojo
|
| -
|
| -MojoResult MojoMain(MojoHandle application_request) {
|
| - mojo::ApplicationRunnerChromium runner(new mojo::examples::PDFViewer());
|
| - return runner.Run(application_request);
|
| -}
|
|
|