mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-26 17:37:07 +00:00
159 lines
3.5 KiB
C++
159 lines
3.5 KiB
C++
// SHE library
|
|
// Copyright (C) 2012-2017 David Capello
|
|
//
|
|
// This file is released under the terms of the MIT license.
|
|
// Read LICENSE.txt for more information.
|
|
|
|
#ifndef SHE_SKIA_SKIA_SYSTEM_INCLUDED
|
|
#define SHE_SKIA_SKIA_SYSTEM_INCLUDED
|
|
#pragma once
|
|
|
|
#include "base/base.h"
|
|
|
|
#include "she/common/system.h"
|
|
#include "she/skia/skia_display.h"
|
|
#include "she/skia/skia_surface.h"
|
|
|
|
#ifdef _WIN32
|
|
#include "she/win/event_queue.h"
|
|
#include "she/win/system.h"
|
|
#define SkiaSystemBase WindowSystem
|
|
#elif __APPLE__
|
|
#include "she/osx/app.h"
|
|
#include "she/osx/event_queue.h"
|
|
#include "she/osx/system.h"
|
|
#define SkiaSystemBase OSXSystem
|
|
#else
|
|
#include "she/x11/event_queue.h"
|
|
#include "she/x11/system.h"
|
|
#define SkiaSystemBase X11System
|
|
#endif
|
|
|
|
#include "SkGraphics.h"
|
|
|
|
namespace she {
|
|
|
|
EventQueueImpl g_queue;
|
|
|
|
class SkiaSystem : public SkiaSystemBase {
|
|
public:
|
|
SkiaSystem()
|
|
: m_defaultDisplay(nullptr)
|
|
, m_gpuAcceleration(false) {
|
|
SkGraphics::Init();
|
|
}
|
|
|
|
~SkiaSystem() {
|
|
SkGraphics::Term();
|
|
}
|
|
|
|
void dispose() override {
|
|
delete this;
|
|
}
|
|
|
|
void activateApp() override {
|
|
#if __APPLE__
|
|
OSXApp::instance()->activateApp();
|
|
#endif
|
|
}
|
|
|
|
void finishLaunching() override {
|
|
#if __APPLE__
|
|
// Start processing NSApplicationDelegate events. (E.g. after
|
|
// calling this we'll receive application:openFiles: and we'll
|
|
// generate DropFiles events.) events
|
|
OSXApp::instance()->finishLaunching();
|
|
#endif
|
|
}
|
|
|
|
Capabilities capabilities() const override {
|
|
return Capabilities(
|
|
int(Capabilities::MultipleDisplays) |
|
|
int(Capabilities::CanResizeDisplay) |
|
|
int(Capabilities::DisplayScale) |
|
|
int(Capabilities::CustomNativeMouseCursor)
|
|
// TODO enable this when the GPU support is ready
|
|
#if 0 // SK_SUPPORT_GPU
|
|
| int(Capabilities::GpuAccelerationSwitch)
|
|
#endif
|
|
);
|
|
}
|
|
|
|
EventQueue* eventQueue() override {
|
|
return &g_queue;
|
|
}
|
|
|
|
bool gpuAcceleration() const override {
|
|
return m_gpuAcceleration;
|
|
}
|
|
|
|
void setGpuAcceleration(bool state) override {
|
|
m_gpuAcceleration = state;
|
|
}
|
|
|
|
gfx::Size defaultNewDisplaySize() override {
|
|
gfx::Size sz;
|
|
#ifdef _WIN32
|
|
sz.w = GetSystemMetrics(SM_CXMAXIMIZED);
|
|
sz.h = GetSystemMetrics(SM_CYMAXIMIZED);
|
|
sz.w -= GetSystemMetrics(SM_CXSIZEFRAME)*4;
|
|
sz.h -= GetSystemMetrics(SM_CYSIZEFRAME)*4;
|
|
sz.w = MAX(0, sz.w);
|
|
sz.h = MAX(0, sz.h);
|
|
#endif
|
|
return sz;
|
|
}
|
|
|
|
Display* defaultDisplay() override {
|
|
return m_defaultDisplay;
|
|
}
|
|
|
|
Display* createDisplay(int width, int height, int scale) override {
|
|
SkiaDisplay* display = new SkiaDisplay(width, height, scale);
|
|
if (!m_defaultDisplay)
|
|
m_defaultDisplay = display;
|
|
return display;
|
|
}
|
|
|
|
Surface* createSurface(int width, int height) override {
|
|
SkiaSurface* sur = new SkiaSurface;
|
|
sur->create(width, height);
|
|
return sur;
|
|
}
|
|
|
|
Surface* createRgbaSurface(int width, int height) override {
|
|
SkiaSurface* sur = new SkiaSurface;
|
|
sur->createRgba(width, height);
|
|
return sur;
|
|
}
|
|
|
|
Surface* loadSurface(const char* filename) override {
|
|
return SkiaSurface::loadSurface(filename);
|
|
}
|
|
|
|
Surface* loadRgbaSurface(const char* filename) override {
|
|
return loadSurface(filename);
|
|
}
|
|
|
|
void setTranslateDeadKeys(bool state) override {
|
|
if (m_defaultDisplay)
|
|
m_defaultDisplay->setTranslateDeadKeys(state);
|
|
|
|
#ifdef _WIN32
|
|
g_queue.setTranslateDeadKeys(state);
|
|
#endif
|
|
}
|
|
|
|
private:
|
|
SkiaDisplay* m_defaultDisplay;
|
|
bool m_gpuAcceleration;
|
|
};
|
|
|
|
EventQueue* EventQueue::instance() {
|
|
return &g_queue;
|
|
}
|
|
|
|
} // namespace she
|
|
|
|
#endif
|