mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This CL generated by |sed -i '/sky\/engine\/config.h/d'| and a manual sweep to catch some oddballs. TBR=eseidel@chromium.org Review URL: https://codereview.chromium.org/1206763002.
109 lines
3.6 KiB
C++
109 lines
3.6 KiB
C++
// Copyright 2015 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 "sky/engine/public/sky/sky_view.h"
|
|
|
|
#include "base/bind.h"
|
|
#include "base/trace_event/trace_event.h"
|
|
#include "sky/engine/core/events/GestureEvent.h"
|
|
#include "sky/engine/core/events/KeyboardEvent.h"
|
|
#include "sky/engine/core/events/PointerEvent.h"
|
|
#include "sky/engine/core/events/WheelEvent.h"
|
|
#include "sky/engine/core/script/dart_controller.h"
|
|
#include "sky/engine/core/script/dom_dart_state.h"
|
|
#include "sky/engine/core/view/View.h"
|
|
#include "sky/engine/platform/weborigin/KURL.h"
|
|
#include "sky/engine/public/platform/WebInputEvent.h"
|
|
#include "sky/engine/public/sky/sky_view_client.h"
|
|
|
|
namespace blink {
|
|
|
|
class SkyView::Data {
|
|
public:
|
|
RefPtr<View> view_;
|
|
};
|
|
|
|
std::unique_ptr<SkyView> SkyView::Create(SkyViewClient* client) {
|
|
return std::unique_ptr<SkyView>(new SkyView(client));
|
|
}
|
|
|
|
SkyView::SkyView(SkyViewClient* client)
|
|
: client_(client),
|
|
data_(new Data),
|
|
weak_factory_(this) {
|
|
}
|
|
|
|
SkyView::~SkyView() {
|
|
// TODO(abarth): Move this work into the DartController destructor once we
|
|
// remove the Frame code path.
|
|
if (dart_controller_)
|
|
dart_controller_->ClearForClose();
|
|
}
|
|
|
|
void SkyView::SetDisplayMetrics(const SkyDisplayMetrics& metrics) {
|
|
display_metrics_ = metrics;
|
|
data_->view_->setDisplayMetrics(display_metrics_);
|
|
}
|
|
|
|
void SkyView::Load(const WebURL& web_url, mojo::URLResponsePtr response) {
|
|
KURL url = web_url;
|
|
|
|
data_->view_ = View::create(base::Bind(
|
|
&SkyView::ScheduleFrame, weak_factory_.GetWeakPtr()));
|
|
data_->view_->setDisplayMetrics(display_metrics_);
|
|
|
|
dart_controller_.reset(new DartController);
|
|
dart_controller_->CreateIsolateFor(adoptPtr(new DOMDartState(nullptr, url)));
|
|
dart_controller_->InstallView(data_->view_.get());
|
|
|
|
{
|
|
Dart_Isolate isolate = dart_controller_->dart_state()->isolate();
|
|
DartIsolateScope scope(isolate);
|
|
DartApiScope api_scope;
|
|
client_->DidCreateIsolate(isolate);
|
|
}
|
|
|
|
if (url.path().endsWith(".snapshot"))
|
|
dart_controller_->LoadSnapshot(url, response.Pass());
|
|
else
|
|
dart_controller_->LoadMainLibrary(url, response.Pass());
|
|
}
|
|
|
|
void SkyView::BeginFrame(base::TimeTicks frame_time) {
|
|
data_->view_->beginFrame(frame_time);
|
|
}
|
|
|
|
skia::RefPtr<SkPicture> SkyView::Paint() {
|
|
if (Picture* picture = data_->view_->picture())
|
|
return skia::SharePtr(picture->toSkia());
|
|
return skia::RefPtr<SkPicture>();
|
|
}
|
|
|
|
void SkyView::HandleInputEvent(const WebInputEvent& inputEvent) {
|
|
TRACE_EVENT0("input", "SkyView::HandleInputEvent");
|
|
|
|
if (WebInputEvent::isPointerEventType(inputEvent.type)) {
|
|
const WebPointerEvent& event = static_cast<const WebPointerEvent&>(inputEvent);
|
|
data_->view_->handleInputEvent(PointerEvent::create(event));
|
|
} else if (WebInputEvent::isGestureEventType(inputEvent.type)) {
|
|
const WebGestureEvent& event = static_cast<const WebGestureEvent&>(inputEvent);
|
|
data_->view_->handleInputEvent(GestureEvent::create(event));
|
|
} else if (WebInputEvent::isKeyboardEventType(inputEvent.type)) {
|
|
const WebKeyboardEvent& event = static_cast<const WebKeyboardEvent&>(inputEvent);
|
|
data_->view_->handleInputEvent(KeyboardEvent::create(event));
|
|
} else if (WebInputEvent::isWheelEventType(inputEvent.type)) {
|
|
const WebWheelEvent& event = static_cast<const WebWheelEvent&>(inputEvent);
|
|
data_->view_->handleInputEvent(WheelEvent::create(event));
|
|
} else if (inputEvent.type == WebInputEvent::Back) {
|
|
data_->view_->handleInputEvent(Event::create("back"));
|
|
}
|
|
|
|
}
|
|
|
|
void SkyView::ScheduleFrame() {
|
|
client_->ScheduleFrame();
|
|
}
|
|
|
|
} // namespace blink
|