Edit

kc3-lang/angle/util/fuchsia/ScenicWindow.h

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2019-10-24 12:55:11
    Hash : 16370a65
    Message : Enable "-Winconsistent-missing-destructor-override". This is purely a code style and consistency warning. Enabled to support building in Skia. Bug: angleproject:4046 Change-Id: Ibdcd06ded0195123e52c693851c43d0864e54ad1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1877480 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • util/fuchsia/ScenicWindow.h
  • //
    // Copyright 2019 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // ScenicWindow.h:
    //    Subclasses OSWindow for Fuchsia's Scenic compositor.
    //
    
    #ifndef UTIL_FUCHSIA_SCENIC_WINDOW_H
    #define UTIL_FUCHSIA_SCENIC_WINDOW_H
    
    #include "common/debug.h"
    #include "util/OSWindow.h"
    #include "util/util_export.h"
    
    // Disable ANGLE-specific warnings that pop up in fuchsia headers.
    ANGLE_DISABLE_DESTRUCTOR_OVERRIDE_WARNING
    
    #include <fuchsia/ui/policy/cpp/fidl.h>
    #include <fuchsia/ui/scenic/cpp/fidl.h>
    #include <fuchsia_egl.h>
    #include <lib/async-loop/cpp/loop.h>
    #include <lib/ui/scenic/cpp/commands.h>
    #include <lib/ui/scenic/cpp/resources.h>
    #include <lib/ui/scenic/cpp/session.h>
    #include <zircon/types.h>
    #include <string>
    
    ANGLE_REENABLE_DESTRUCTOR_OVERRIDE_WARNING
    
    struct FuchsiaEGLWindowDeleter
    {
        void operator()(fuchsia_egl_window *eglWindow) { fuchsia_egl_window_destroy(eglWindow); }
    };
    
    class ANGLE_UTIL_EXPORT ScenicWindow : public OSWindow
    {
      public:
        ScenicWindow();
        ~ScenicWindow() override;
    
        // OSWindow:
        bool initialize(const std::string &name, int width, int height) override;
        void destroy() override;
        void resetNativeWindow() override;
        EGLNativeWindowType getNativeWindow() const override;
        EGLNativeDisplayType getNativeDisplay() const override;
        void messageLoop() override;
        void setMousePosition(int x, int y) override;
        bool setPosition(int x, int y) override;
        bool resize(int width, int height) override;
        void setVisible(bool isVisible) override;
        void signalTestEvent() override;
    
        // FIDL callbacks:
        void OnScenicEvents(std::vector<fuchsia::ui::scenic::Event> events);
        void OnScenicError(zx_status_t status);
    
      private:
        // Default message loop.
        async::Loop *mLoop;
    
        // System services.
        zx::channel mServiceRoot;
        fuchsia::ui::scenic::ScenicPtr mScenic;
        fuchsia::ui::policy::PresenterPtr mPresenter;
    
        // Scenic session & resources.
        scenic::Session mScenicSession;
        scenic::ShapeNode mShape;
        scenic::Material mMaterial;
    
        // Scenic view.
        std::unique_ptr<scenic::View> mView;
    
        // EGL native window.
        std::unique_ptr<fuchsia_egl_window, FuchsiaEGLWindowDeleter> mFuchsiaEGLWindow;
    };
    
    #endif  // UTIL_FUCHSIA_SCENIC_WINDOW_H