1cb93a386Sopenharmony_ci
2cb93a386Sopenharmony_ci/*
3cb93a386Sopenharmony_ci * Copyright 2016 Google Inc.
4cb93a386Sopenharmony_ci *
5cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be
6cb93a386Sopenharmony_ci * found in the LICENSE file.
7cb93a386Sopenharmony_ci */
8cb93a386Sopenharmony_ci
9cb93a386Sopenharmony_ci#ifndef WindowContextFactory_mac_DEFINED
10cb93a386Sopenharmony_ci#define WindowContextFactory_mac_DEFINED
11cb93a386Sopenharmony_ci
12cb93a386Sopenharmony_ci#include "tools/sk_app/WindowContext.h"
13cb93a386Sopenharmony_ci
14cb93a386Sopenharmony_ci#include <Cocoa/Cocoa.h>
15cb93a386Sopenharmony_ci
16cb93a386Sopenharmony_ci#include <memory>
17cb93a386Sopenharmony_ci
18cb93a386Sopenharmony_cinamespace sk_app {
19cb93a386Sopenharmony_ci
20cb93a386Sopenharmony_cistruct DisplayParams;
21cb93a386Sopenharmony_ci
22cb93a386Sopenharmony_cistatic inline CGFloat GetBackingScaleFactor(NSView* view) {
23cb93a386Sopenharmony_ci    #ifdef SK_BUILD_FOR_IOS
24cb93a386Sopenharmony_ci    UIScreen* screen = view.window.screen ?: [UIScreen mainScreen];
25cb93a386Sopenharmony_ci    return screen.nativeScale;
26cb93a386Sopenharmony_ci    #else
27cb93a386Sopenharmony_ci    NSScreen* screen = view.window.screen ?: [NSScreen mainScreen];
28cb93a386Sopenharmony_ci    return screen.backingScaleFactor;
29cb93a386Sopenharmony_ci    #endif
30cb93a386Sopenharmony_ci}
31cb93a386Sopenharmony_ci
32cb93a386Sopenharmony_cinamespace window_context_factory {
33cb93a386Sopenharmony_ci
34cb93a386Sopenharmony_cistruct MacWindowInfo {
35cb93a386Sopenharmony_ci    NSView*   fMainView;
36cb93a386Sopenharmony_ci};
37cb93a386Sopenharmony_ci
38cb93a386Sopenharmony_ci#ifdef SK_VULKAN
39cb93a386Sopenharmony_ciinline std::unique_ptr<WindowContext> MakeVulkanForMac(const MacWindowInfo&, const DisplayParams&) {
40cb93a386Sopenharmony_ci    // No Vulkan support on Mac.
41cb93a386Sopenharmony_ci    return nullptr;
42cb93a386Sopenharmony_ci}
43cb93a386Sopenharmony_ci#endif
44cb93a386Sopenharmony_ci
45cb93a386Sopenharmony_ci#ifdef SK_GL
46cb93a386Sopenharmony_cistd::unique_ptr<WindowContext> MakeRasterForMac(const MacWindowInfo&, const DisplayParams&);
47cb93a386Sopenharmony_cistd::unique_ptr<WindowContext> MakeGLForMac(const MacWindowInfo&, const DisplayParams&);
48cb93a386Sopenharmony_ci#endif
49cb93a386Sopenharmony_ci
50cb93a386Sopenharmony_ci#ifdef SK_DAWN
51cb93a386Sopenharmony_cistd::unique_ptr<WindowContext> MakeDawnMTLForMac(const MacWindowInfo&, const DisplayParams&);
52cb93a386Sopenharmony_ci#endif
53cb93a386Sopenharmony_ci
54cb93a386Sopenharmony_ci#ifdef SK_METAL
55cb93a386Sopenharmony_cistd::unique_ptr<WindowContext> MakeMetalForMac(const MacWindowInfo&, const DisplayParams&);
56cb93a386Sopenharmony_ci#ifdef SK_GRAPHITE_ENABLED
57cb93a386Sopenharmony_cistd::unique_ptr<WindowContext> MakeGraphiteMetalForMac(const MacWindowInfo&, const DisplayParams&);
58cb93a386Sopenharmony_ci#endif
59cb93a386Sopenharmony_ci#endif
60cb93a386Sopenharmony_ci
61cb93a386Sopenharmony_ci}  // namespace window_context_factory
62cb93a386Sopenharmony_ci
63cb93a386Sopenharmony_ci}  // namespace sk_app
64cb93a386Sopenharmony_ci
65cb93a386Sopenharmony_ci#endif
66