Move drop file event to Window, handle mouse capture automatically

This commit is contained in:
Joshua Granick
2016-03-01 10:45:33 -08:00
parent 85ec75fd59
commit 78bf85b766
22 changed files with 218 additions and 189 deletions

View File

@@ -28,8 +28,6 @@ namespace lime {
printf ("Could not initialize SDL: %s.\n", SDL_GetError ());
}
SDL_EventState(SDL_DROPFILE, SDL_ENABLE);
SDL_LogSetPriority (SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN);
@@ -48,10 +46,10 @@ namespace lime {
nextUpdate = 0;
ApplicationEvent applicationEvent;
DropEvent dropEvent;
GamepadEvent gamepadEvent;
JoystickEvent joystickEvent;
KeyEvent keyEvent;
DropEvent dropEvent;
MouseEvent mouseEvent;
RenderEvent renderEvent;
SensorEvent sensorEvent;
@@ -59,6 +57,7 @@ namespace lime {
TouchEvent touchEvent;
WindowEvent windowEvent;
SDL_EventState (SDL_DROPFILE, SDL_ENABLE);
SDLJoystick::Init ();
#ifdef HX_MACOS
@@ -151,6 +150,11 @@ namespace lime {
ProcessGamepadEvent (event);
break;
case SDL_DROPFILE:
ProcessDropEvent (event);
break;
case SDL_FINGERMOTION:
case SDL_FINGERDOWN:
case SDL_FINGERUP:
@@ -204,11 +208,6 @@ namespace lime {
ProcessTextEvent (event);
break;
case SDL_DROPFILE:
ProcessDropEvent (event);
break;
case SDL_WINDOWEVENT:
switch (event->window.event) {
@@ -265,6 +264,21 @@ namespace lime {
}
void SDLApplication::ProcessDropEvent (SDL_Event* event) {
if (DropEvent::callback) {
dropEvent.type = DROP_FILE;
dropEvent.file = event->drop.file;
DropEvent::Dispatch (&dropEvent);
SDL_free (dropEvent.file);
}
}
void SDLApplication::ProcessGamepadEvent (SDL_Event* event) {
if (GamepadEvent::callback) {
@@ -462,17 +476,6 @@ namespace lime {
}
void SDLApplication::ProcessDropEvent (SDL_Event* event)
{
if (DropEvent::callback)
{
dropEvent.type = DROP_FILE;
dropEvent.file = event->drop.file;
DropEvent::Dispatch(&dropEvent);
SDL_free(dropEvent.file);
}
}
void SDLApplication::ProcessKeyEvent (SDL_Event* event) {
@@ -513,6 +516,8 @@ namespace lime {
case SDL_MOUSEBUTTONDOWN:
SDL_CaptureMouse (SDL_TRUE);
mouseEvent.type = MOUSE_DOWN;
mouseEvent.button = event->button.button - 1;
mouseEvent.x = event->button.x;
@@ -521,6 +526,8 @@ namespace lime {
case SDL_MOUSEBUTTONUP:
SDL_CaptureMouse (SDL_FALSE);
mouseEvent.type = MOUSE_UP;
mouseEvent.button = event->button.button - 1;
mouseEvent.x = event->button.x;

View File

@@ -7,11 +7,11 @@
#include <app/ApplicationEvent.h>
#include <graphics/RenderEvent.h>
#include <system/SensorEvent.h>
#include <ui/DropEvent.h>
#include <ui/GamepadEvent.h>
#include <ui/JoystickEvent.h>
#include <ui/KeyEvent.h>
#include <ui/MouseEvent.h>
#include <ui/DropEvent.h>
#include <ui/TextEvent.h>
#include <ui/TouchEvent.h>
#include <ui/WindowEvent.h>
@@ -39,10 +39,10 @@ namespace lime {
private:
void HandleEvent (SDL_Event* event);
void ProcessDropEvent (SDL_Event* event);
void ProcessGamepadEvent (SDL_Event* event);
void ProcessJoystickEvent (SDL_Event* event);
void ProcessKeyEvent (SDL_Event* event);
void ProcessDropEvent (SDL_Event* event);
void ProcessMouseEvent (SDL_Event* event);
void ProcessSensorEvent (SDL_Event* event);
void ProcessTextEvent (SDL_Event* event);
@@ -59,10 +59,10 @@ namespace lime {
ApplicationEvent applicationEvent;
Uint32 currentUpdate;
double framePeriod;
DropEvent dropEvent;
GamepadEvent gamepadEvent;
JoystickEvent joystickEvent;
KeyEvent keyEvent;
DropEvent dropEvent;
Uint32 lastUpdate;
MouseEvent mouseEvent;
double nextUpdate;

View File

@@ -176,19 +176,8 @@ namespace lime {
}
}
void Mouse::SetCaptureMode(bool capture)
{
if (capture)
{
SDL_CaptureMouse(SDL_TRUE);
}
else
{
SDL_CaptureMouse(SDL_FALSE);
}
}
void Mouse::Show () {
SDL_ShowCursor (SDL_ENABLE);

View File

@@ -324,20 +324,23 @@ namespace lime {
}
bool SDLWindow::SetMaximized (bool maximized)
{
if (maximized)
{
SDL_MaximizeWindow(sdlWindow);
}
else
{
SDL_RestoreWindow(sdlWindow);
}
return maximized;
}
bool SDLWindow::SetMaximized (bool maximized) {
if (maximized) {
SDL_MaximizeWindow (sdlWindow);
} else {
SDL_RestoreWindow (sdlWindow);
}
return maximized;
}
bool SDLWindow::SetMinimized (bool minimized) {

View File

@@ -33,9 +33,9 @@ namespace lime {
virtual void SetEnableTextEvents (bool enabled);
virtual bool SetFullscreen (bool fullscreen);
virtual void SetIcon (ImageBuffer *imageBuffer);
virtual bool SetMaximized (bool maximized);
virtual bool SetMinimized (bool minimized);
virtual bool SetResizable (bool resizable);
virtual bool SetMaximized (bool minimized);
virtual const char* SetTitle (const char* title);
SDL_Window* sdlWindow;