mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-01 01:20:25 +00:00
Move event queue to she::System
This commit is contained in:
parent
fd15b4be97
commit
e8350fb51a
@ -1,5 +1,5 @@
|
||||
// SHE library
|
||||
// Copyright (C) 2012-2014 David Capello
|
||||
// Copyright (C) 2012-2015 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
@ -10,6 +10,7 @@
|
||||
|
||||
#include "she/alleg4/internals.h"
|
||||
#include "she/event.h"
|
||||
#include "she/system.h"
|
||||
|
||||
#include <allegro.h>
|
||||
|
||||
@ -29,11 +30,11 @@ namespace {
|
||||
if (want_close_stage == STAGE_NORMAL)
|
||||
want_close_stage = STAGE_WANT_CLOSE;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
namespace she {
|
||||
|
||||
|
||||
void close_button_init()
|
||||
{
|
||||
// Hook the window close message
|
||||
|
@ -1,5 +1,5 @@
|
||||
// SHE library
|
||||
// Copyright (C) 2012-2014 David Capello
|
||||
// Copyright (C) 2012-2015 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
@ -11,12 +11,8 @@
|
||||
namespace she {
|
||||
|
||||
class Display;
|
||||
class Event;
|
||||
|
||||
extern Display* unique_display;
|
||||
|
||||
void queue_event(const Event& ev);
|
||||
|
||||
} // namespace she
|
||||
|
||||
#endif
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "she/clock.h"
|
||||
#include "she/display.h"
|
||||
#include "she/event.h"
|
||||
#include "she/system.h"
|
||||
|
||||
#include <allegro.h>
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include "base/concurrent_queue.h"
|
||||
#include "base/string.h"
|
||||
#include "base/unique_ptr.h"
|
||||
#include "she/alleg4/surface.h"
|
||||
#include "she/common/system.h"
|
||||
#include "she/logger.h"
|
||||
@ -148,20 +149,9 @@ private:
|
||||
base::concurrent_queue<Event> m_events;
|
||||
};
|
||||
|
||||
base::mutex unique_display_mutex;
|
||||
base::concurrent_queue<Event> initial_queue; // Events generated when "unique_display" is NULL
|
||||
Display* unique_display = NULL;
|
||||
int display_scale;
|
||||
|
||||
void queue_event(const Event& ev)
|
||||
{
|
||||
base::scoped_lock hold(unique_display_mutex);
|
||||
if (unique_display)
|
||||
static_cast<Alleg4EventQueue*>(unique_display->getEventQueue())->queueEvent(ev);
|
||||
else
|
||||
initial_queue.push(ev);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
#if _WIN32
|
||||
@ -473,16 +463,6 @@ public:
|
||||
show_mouse(NULL);
|
||||
setScale(scale);
|
||||
|
||||
m_queue = new Alleg4EventQueue();
|
||||
|
||||
// Copy the initial queue to the display queue
|
||||
{
|
||||
base::scoped_lock hold(unique_display_mutex);
|
||||
Event ev;
|
||||
while (initial_queue.try_pop(ev))
|
||||
m_queue->queueEvent(ev);
|
||||
}
|
||||
|
||||
// Add a hook to display-switch so when the user returns to the
|
||||
// screen it's completelly refreshed/redrawn.
|
||||
LOCK_VARIABLE(display_flags);
|
||||
@ -500,19 +480,12 @@ public:
|
||||
}
|
||||
|
||||
~Alleg4Display() {
|
||||
// Put "unique_display" to null so queue_event() doesn't use
|
||||
// "m_queue" anymore.
|
||||
{
|
||||
base::scoped_lock hold(unique_display_mutex);
|
||||
unique_display = NULL;
|
||||
}
|
||||
unique_display = NULL;
|
||||
|
||||
#if _WIN32
|
||||
unsubclass_hwnd((HWND)nativeHandle());
|
||||
#endif
|
||||
|
||||
delete m_queue;
|
||||
|
||||
m_surface->dispose();
|
||||
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
|
||||
}
|
||||
@ -606,10 +579,6 @@ public:
|
||||
set_window_title(title.c_str());
|
||||
}
|
||||
|
||||
EventQueue* getEventQueue() override {
|
||||
return m_queue;
|
||||
}
|
||||
|
||||
NativeCursor nativeMouseCursor() override {
|
||||
return m_nativeCursor;
|
||||
}
|
||||
@ -702,7 +671,6 @@ public:
|
||||
private:
|
||||
Surface* m_surface;
|
||||
int m_scale;
|
||||
Alleg4EventQueue* m_queue;
|
||||
NativeCursor m_nativeCursor;
|
||||
};
|
||||
|
||||
@ -721,9 +689,11 @@ public:
|
||||
register_bitmap_file_type("png", load_png, save_png);
|
||||
|
||||
g_instance = this;
|
||||
m_queue.reset(new Alleg4EventQueue);
|
||||
}
|
||||
|
||||
~Alleg4System() {
|
||||
m_queue.reset();
|
||||
g_instance = nullptr;
|
||||
|
||||
remove_timer();
|
||||
@ -738,6 +708,10 @@ public:
|
||||
return (Capabilities)(kCanResizeDisplayCapability);
|
||||
}
|
||||
|
||||
EventQueue* eventQueue() override {
|
||||
return m_queue;
|
||||
}
|
||||
|
||||
Display* defaultDisplay() override {
|
||||
return unique_display;
|
||||
}
|
||||
@ -772,6 +746,8 @@ public:
|
||||
return sur;
|
||||
}
|
||||
|
||||
private:
|
||||
base::UniquePtr<Alleg4EventQueue> m_queue;
|
||||
};
|
||||
|
||||
System* create_system() {
|
||||
|
@ -16,7 +16,6 @@
|
||||
|
||||
namespace she {
|
||||
|
||||
class EventQueue;
|
||||
class NonDisposableSurface;
|
||||
class Surface;
|
||||
class Font;
|
||||
@ -55,8 +54,6 @@ namespace she {
|
||||
|
||||
virtual void setTitleBar(const std::string& title) = 0;
|
||||
|
||||
virtual EventQueue* getEventQueue() = 0;
|
||||
|
||||
virtual NativeCursor nativeMouseCursor() = 0;
|
||||
virtual bool setNativeMouseCursor(NativeCursor cursor) = 0;
|
||||
virtual void setMousePosition(const gfx::Point& position) = 0;
|
||||
|
@ -10,11 +10,12 @@
|
||||
|
||||
#include "she/skia/skia_display.h"
|
||||
|
||||
#include "she/system.h"
|
||||
|
||||
namespace she {
|
||||
|
||||
SkiaDisplay::SkiaDisplay(EventQueue* queue, int width, int height, int scale)
|
||||
: m_queue(queue)
|
||||
, m_window(m_queue, this)
|
||||
: m_window(instance()->eventQueue(), this)
|
||||
, m_surface(new SkiaSurface)
|
||||
, m_customSurface(false)
|
||||
, m_nativeCursor(kArrowCursor)
|
||||
@ -112,11 +113,6 @@ void SkiaDisplay::setTitleBar(const std::string& title)
|
||||
m_window.setText(title);
|
||||
}
|
||||
|
||||
EventQueue* SkiaDisplay::getEventQueue()
|
||||
{
|
||||
return m_queue;
|
||||
}
|
||||
|
||||
NativeCursor SkiaDisplay::nativeMouseCursor()
|
||||
{
|
||||
return m_nativeCursor;
|
||||
|
@ -52,7 +52,6 @@ public:
|
||||
void maximize() override;
|
||||
bool isMaximized() const override;
|
||||
void setTitleBar(const std::string& title) override;
|
||||
EventQueue* getEventQueue() override;
|
||||
NativeCursor nativeMouseCursor() override;
|
||||
bool setNativeMouseCursor(NativeCursor cursor) override;
|
||||
void setMousePosition(const gfx::Point& position) override;
|
||||
@ -63,7 +62,6 @@ public:
|
||||
DisplayHandle nativeHandle() override;
|
||||
|
||||
private:
|
||||
EventQueue* m_queue;
|
||||
SkiaWindow m_window;
|
||||
SkiaSurface* m_surface;
|
||||
bool m_recreated;
|
||||
|
@ -45,6 +45,10 @@ public:
|
||||
int(kDisplayScaleCapability));
|
||||
}
|
||||
|
||||
EventQueue* eventQueue() override {
|
||||
return &m_queue;
|
||||
}
|
||||
|
||||
Display* defaultDisplay() override {
|
||||
return m_defaultDisplay;
|
||||
}
|
||||
|
@ -9,13 +9,14 @@
|
||||
#pragma once
|
||||
|
||||
#include "she/capabilities.h"
|
||||
#include "she/event_queue.h"
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
namespace she {
|
||||
|
||||
class Clipboard;
|
||||
class Display;
|
||||
class EventLoop;
|
||||
class Font;
|
||||
class Logger;
|
||||
class NativeDialogs;
|
||||
@ -34,6 +35,7 @@ namespace she {
|
||||
virtual Capabilities capabilities() const = 0;
|
||||
virtual Logger* logger() = 0;
|
||||
virtual NativeDialogs* nativeDialogs() = 0;
|
||||
virtual EventQueue* eventQueue() = 0;
|
||||
virtual Display* defaultDisplay() = 0;
|
||||
virtual Display* createDisplay(int width, int height, int scale) = 0;
|
||||
virtual Surface* createSurface(int width, int height) = 0;
|
||||
@ -47,6 +49,10 @@ namespace she {
|
||||
System* create_system();
|
||||
System* instance();
|
||||
|
||||
inline void queue_event(const Event& ev) {
|
||||
instance()->eventQueue()->queueEvent(ev);
|
||||
}
|
||||
|
||||
} // namespace she
|
||||
|
||||
#endif
|
||||
|
@ -146,7 +146,7 @@ Manager::~Manager()
|
||||
void Manager::setDisplay(she::Display* display)
|
||||
{
|
||||
m_display = display;
|
||||
m_eventQueue = m_display->getEventQueue();
|
||||
m_eventQueue = she::instance()->eventQueue();
|
||||
}
|
||||
|
||||
void Manager::setClipboard(she::Clipboard* clipboard)
|
||||
|
Loading…
x
Reference in New Issue
Block a user