1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2019 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // ScenicWindow.cpp:
7*8975f5c5SAndroid Build Coastguard Worker // Implements methods from ScenicWindow
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker
10*8975f5c5SAndroid Build Coastguard Worker #include "util/fuchsia/ScenicWindow.h"
11*8975f5c5SAndroid Build Coastguard Worker
12*8975f5c5SAndroid Build Coastguard Worker #include <fuchsia/element/cpp/fidl.h>
13*8975f5c5SAndroid Build Coastguard Worker #include <lib/async-loop/cpp/loop.h>
14*8975f5c5SAndroid Build Coastguard Worker #include <lib/async-loop/default.h>
15*8975f5c5SAndroid Build Coastguard Worker #include <lib/fdio/directory.h>
16*8975f5c5SAndroid Build Coastguard Worker #include <lib/fidl/cpp/interface_ptr.h>
17*8975f5c5SAndroid Build Coastguard Worker #include <lib/fidl/cpp/interface_request.h>
18*8975f5c5SAndroid Build Coastguard Worker #include <lib/zx/channel.h>
19*8975f5c5SAndroid Build Coastguard Worker #include <zircon/status.h>
20*8975f5c5SAndroid Build Coastguard Worker
21*8975f5c5SAndroid Build Coastguard Worker namespace
22*8975f5c5SAndroid Build Coastguard Worker {
23*8975f5c5SAndroid Build Coastguard Worker
GetDefaultLoop()24*8975f5c5SAndroid Build Coastguard Worker async::Loop *GetDefaultLoop()
25*8975f5c5SAndroid Build Coastguard Worker {
26*8975f5c5SAndroid Build Coastguard Worker static async::Loop *defaultLoop = new async::Loop(&kAsyncLoopConfigNeverAttachToThread);
27*8975f5c5SAndroid Build Coastguard Worker return defaultLoop;
28*8975f5c5SAndroid Build Coastguard Worker }
29*8975f5c5SAndroid Build Coastguard Worker
ConnectToServiceRoot()30*8975f5c5SAndroid Build Coastguard Worker zx::channel ConnectToServiceRoot()
31*8975f5c5SAndroid Build Coastguard Worker {
32*8975f5c5SAndroid Build Coastguard Worker zx::channel clientChannel;
33*8975f5c5SAndroid Build Coastguard Worker zx::channel serverChannel;
34*8975f5c5SAndroid Build Coastguard Worker zx_status_t result = zx::channel::create(0, &clientChannel, &serverChannel);
35*8975f5c5SAndroid Build Coastguard Worker ASSERT(result == ZX_OK);
36*8975f5c5SAndroid Build Coastguard Worker result = fdio_service_connect("/svc/.", serverChannel.release());
37*8975f5c5SAndroid Build Coastguard Worker ASSERT(result == ZX_OK);
38*8975f5c5SAndroid Build Coastguard Worker return clientChannel;
39*8975f5c5SAndroid Build Coastguard Worker }
40*8975f5c5SAndroid Build Coastguard Worker
41*8975f5c5SAndroid Build Coastguard Worker template <typename Interface>
ConnectToService(zx_handle_t serviceRoot,fidl::InterfaceRequest<Interface> request)42*8975f5c5SAndroid Build Coastguard Worker zx_status_t ConnectToService(zx_handle_t serviceRoot, fidl::InterfaceRequest<Interface> request)
43*8975f5c5SAndroid Build Coastguard Worker {
44*8975f5c5SAndroid Build Coastguard Worker ASSERT(request.is_valid());
45*8975f5c5SAndroid Build Coastguard Worker return fdio_service_connect_at(serviceRoot, Interface::Name_, request.TakeChannel().release());
46*8975f5c5SAndroid Build Coastguard Worker }
47*8975f5c5SAndroid Build Coastguard Worker
48*8975f5c5SAndroid Build Coastguard Worker template <typename Interface>
ConnectToService(zx_handle_t serviceRoot,async_dispatcher_t * dispatcher)49*8975f5c5SAndroid Build Coastguard Worker fidl::InterfacePtr<Interface> ConnectToService(zx_handle_t serviceRoot,
50*8975f5c5SAndroid Build Coastguard Worker async_dispatcher_t *dispatcher)
51*8975f5c5SAndroid Build Coastguard Worker {
52*8975f5c5SAndroid Build Coastguard Worker fidl::InterfacePtr<Interface> result;
53*8975f5c5SAndroid Build Coastguard Worker ConnectToService(serviceRoot, result.NewRequest(dispatcher));
54*8975f5c5SAndroid Build Coastguard Worker return result;
55*8975f5c5SAndroid Build Coastguard Worker }
56*8975f5c5SAndroid Build Coastguard Worker
57*8975f5c5SAndroid Build Coastguard Worker } // namespace
58*8975f5c5SAndroid Build Coastguard Worker
59*8975f5c5SAndroid Build Coastguard Worker // TODO: http://anglebug.com/42050005 - Implement using fuchsia.element.GraphicalPresenter to pass a
60*8975f5c5SAndroid Build Coastguard Worker // ViewCreationToken to Fuchsia Flatland.
ScenicWindow()61*8975f5c5SAndroid Build Coastguard Worker ScenicWindow::ScenicWindow()
62*8975f5c5SAndroid Build Coastguard Worker : mLoop(GetDefaultLoop()),
63*8975f5c5SAndroid Build Coastguard Worker mServiceRoot(ConnectToServiceRoot()),
64*8975f5c5SAndroid Build Coastguard Worker mPresenter(ConnectToService<fuchsia::element::GraphicalPresenter>(mServiceRoot.get(),
65*8975f5c5SAndroid Build Coastguard Worker mLoop->dispatcher()))
66*8975f5c5SAndroid Build Coastguard Worker {}
67*8975f5c5SAndroid Build Coastguard Worker
~ScenicWindow()68*8975f5c5SAndroid Build Coastguard Worker ScenicWindow::~ScenicWindow()
69*8975f5c5SAndroid Build Coastguard Worker {
70*8975f5c5SAndroid Build Coastguard Worker destroy();
71*8975f5c5SAndroid Build Coastguard Worker }
72*8975f5c5SAndroid Build Coastguard Worker
initializeImpl(const std::string & name,int width,int height)73*8975f5c5SAndroid Build Coastguard Worker bool ScenicWindow::initializeImpl(const std::string &name, int width, int height)
74*8975f5c5SAndroid Build Coastguard Worker {
75*8975f5c5SAndroid Build Coastguard Worker return true;
76*8975f5c5SAndroid Build Coastguard Worker }
77*8975f5c5SAndroid Build Coastguard Worker
disableErrorMessageDialog()78*8975f5c5SAndroid Build Coastguard Worker void ScenicWindow::disableErrorMessageDialog() {}
79*8975f5c5SAndroid Build Coastguard Worker
destroy()80*8975f5c5SAndroid Build Coastguard Worker void ScenicWindow::destroy()
81*8975f5c5SAndroid Build Coastguard Worker {
82*8975f5c5SAndroid Build Coastguard Worker mFuchsiaEGLWindow.reset();
83*8975f5c5SAndroid Build Coastguard Worker }
84*8975f5c5SAndroid Build Coastguard Worker
resetNativeWindow()85*8975f5c5SAndroid Build Coastguard Worker void ScenicWindow::resetNativeWindow()
86*8975f5c5SAndroid Build Coastguard Worker {
87*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
88*8975f5c5SAndroid Build Coastguard Worker }
89*8975f5c5SAndroid Build Coastguard Worker
getNativeWindow() const90*8975f5c5SAndroid Build Coastguard Worker EGLNativeWindowType ScenicWindow::getNativeWindow() const
91*8975f5c5SAndroid Build Coastguard Worker {
92*8975f5c5SAndroid Build Coastguard Worker return reinterpret_cast<EGLNativeWindowType>(mFuchsiaEGLWindow.get());
93*8975f5c5SAndroid Build Coastguard Worker }
94*8975f5c5SAndroid Build Coastguard Worker
getNativeDisplay() const95*8975f5c5SAndroid Build Coastguard Worker EGLNativeDisplayType ScenicWindow::getNativeDisplay() const
96*8975f5c5SAndroid Build Coastguard Worker {
97*8975f5c5SAndroid Build Coastguard Worker return EGL_DEFAULT_DISPLAY;
98*8975f5c5SAndroid Build Coastguard Worker }
99*8975f5c5SAndroid Build Coastguard Worker
messageLoop()100*8975f5c5SAndroid Build Coastguard Worker void ScenicWindow::messageLoop()
101*8975f5c5SAndroid Build Coastguard Worker {
102*8975f5c5SAndroid Build Coastguard Worker mLoop->ResetQuit();
103*8975f5c5SAndroid Build Coastguard Worker mLoop->RunUntilIdle();
104*8975f5c5SAndroid Build Coastguard Worker }
105*8975f5c5SAndroid Build Coastguard Worker
setMousePosition(int x,int y)106*8975f5c5SAndroid Build Coastguard Worker void ScenicWindow::setMousePosition(int x, int y)
107*8975f5c5SAndroid Build Coastguard Worker {
108*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
109*8975f5c5SAndroid Build Coastguard Worker }
110*8975f5c5SAndroid Build Coastguard Worker
setOrientation(int width,int height)111*8975f5c5SAndroid Build Coastguard Worker bool ScenicWindow::setOrientation(int width, int height)
112*8975f5c5SAndroid Build Coastguard Worker {
113*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
114*8975f5c5SAndroid Build Coastguard Worker return false;
115*8975f5c5SAndroid Build Coastguard Worker }
116*8975f5c5SAndroid Build Coastguard Worker
setPosition(int x,int y)117*8975f5c5SAndroid Build Coastguard Worker bool ScenicWindow::setPosition(int x, int y)
118*8975f5c5SAndroid Build Coastguard Worker {
119*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
120*8975f5c5SAndroid Build Coastguard Worker return false;
121*8975f5c5SAndroid Build Coastguard Worker }
122*8975f5c5SAndroid Build Coastguard Worker
resize(int width,int height)123*8975f5c5SAndroid Build Coastguard Worker bool ScenicWindow::resize(int width, int height)
124*8975f5c5SAndroid Build Coastguard Worker {
125*8975f5c5SAndroid Build Coastguard Worker fuchsia_egl_window_resize(mFuchsiaEGLWindow.get(), width, height);
126*8975f5c5SAndroid Build Coastguard Worker return true;
127*8975f5c5SAndroid Build Coastguard Worker }
128*8975f5c5SAndroid Build Coastguard Worker
setVisible(bool isVisible)129*8975f5c5SAndroid Build Coastguard Worker void ScenicWindow::setVisible(bool isVisible) {}
130*8975f5c5SAndroid Build Coastguard Worker
signalTestEvent()131*8975f5c5SAndroid Build Coastguard Worker void ScenicWindow::signalTestEvent() {}
132*8975f5c5SAndroid Build Coastguard Worker
present()133*8975f5c5SAndroid Build Coastguard Worker void ScenicWindow::present()
134*8975f5c5SAndroid Build Coastguard Worker {
135*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
136*8975f5c5SAndroid Build Coastguard Worker }
137*8975f5c5SAndroid Build Coastguard Worker
updateViewSize()138*8975f5c5SAndroid Build Coastguard Worker void ScenicWindow::updateViewSize()
139*8975f5c5SAndroid Build Coastguard Worker {
140*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
141*8975f5c5SAndroid Build Coastguard Worker }
142*8975f5c5SAndroid Build Coastguard Worker
143*8975f5c5SAndroid Build Coastguard Worker // static
New()144*8975f5c5SAndroid Build Coastguard Worker OSWindow *OSWindow::New()
145*8975f5c5SAndroid Build Coastguard Worker {
146*8975f5c5SAndroid Build Coastguard Worker return new ScenicWindow;
147*8975f5c5SAndroid Build Coastguard Worker }
148