* Add support for drag and drop of a picture into grafx2 windows
WARNING : it will not ask to save changes before. I believe it should work like the fileselector but could not find where to plug it there... git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1548 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
378555d943
commit
aaef37bd40
47
src/input.c
47
src/input.c
@ -21,6 +21,12 @@
|
||||
*/
|
||||
|
||||
#include <SDL.h>
|
||||
#include <SDL_syswm.h>
|
||||
|
||||
#ifdef __WIN32__
|
||||
#include <windows.h>
|
||||
#include <ShellApi.h>
|
||||
#endif
|
||||
|
||||
#include "global.h"
|
||||
#include "keyboard.h"
|
||||
@ -29,6 +35,7 @@
|
||||
#include "errors.h"
|
||||
#include "misc.h"
|
||||
#include "input.h"
|
||||
#include "loadsave.h"
|
||||
|
||||
#ifdef __VBCC__
|
||||
#define __attribute__(x)
|
||||
@ -86,6 +93,19 @@ short Joybutton_left_click=0; // Button number that serves as left click
|
||||
short Joybutton_right_click=0; // Button number that serves as right-click
|
||||
#endif
|
||||
|
||||
|
||||
void AcceptDND(void)
|
||||
{
|
||||
#ifdef __WIN32__
|
||||
SDL_SysWMinfo wminfo;
|
||||
SDL_VERSION(&wminfo.version);
|
||||
SDL_GetWMInfo(&wminfo);
|
||||
HWND hwnd = wminfo.window;
|
||||
DragAcceptFiles(hwnd,TRUE);
|
||||
SDL_EventState (SDL_SYSWMEVENT,SDL_ENABLE );
|
||||
#endif
|
||||
}
|
||||
|
||||
int Has_shortcut(word function)
|
||||
{
|
||||
if (function == 0xFFFF)
|
||||
@ -718,6 +738,33 @@ int Get_input(void)
|
||||
#endif
|
||||
// End of Joystick handling
|
||||
|
||||
case SDL_SYSWMEVENT:
|
||||
#ifdef __WIN32__
|
||||
if(event.syswm.msg->msg == WM_DROPFILES) {
|
||||
int fileCount;
|
||||
HDROP hdrop = (HDROP)(event.syswm.msg->wParam);
|
||||
if((fileCount = DragQueryFile(hdrop,(UINT)-1,(LPTSTR) NULL ,(UINT) 0)) > 0) {
|
||||
char buf[MAX_PATH];
|
||||
T_IO_Context context;
|
||||
char* flimit;
|
||||
|
||||
DragQueryFile(hdrop,0 ,(LPTSTR) buf ,(UINT) MAX_PATH);
|
||||
flimit = Find_last_slash(buf);
|
||||
*(flimit++) = '\0';
|
||||
|
||||
// TODO : check if there are unsaved changes first !
|
||||
|
||||
Init_context_layered_image(&context, flimit, buf);
|
||||
Load_image(&context);
|
||||
Destroy_context(&context);
|
||||
Redraw_layered_image();
|
||||
End_of_modification();
|
||||
Display_all_screen();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
// DEBUG("Unhandled SDL event number : ",event.type);
|
||||
break;
|
||||
|
||||
19
src/main.c
19
src/main.c
@ -85,6 +85,15 @@
|
||||
extern DECLSPEC int SDLCALL SDL_putenv(const char *variable);
|
||||
#endif
|
||||
|
||||
int test_colorcycling(void* useless)
|
||||
{
|
||||
byte r = 0;
|
||||
while(1) {
|
||||
SDL_Delay(50);
|
||||
Set_color(0,++r,0,0);
|
||||
}
|
||||
}
|
||||
|
||||
//--- Affichage de la syntaxe, et de la liste des modes vidéos disponibles ---
|
||||
void Display_syntax(void)
|
||||
{
|
||||
@ -818,6 +827,16 @@ int Init_program(int argc,char * argv[])
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
// Color cycling test
|
||||
{
|
||||
SDL_Thread* t = SDL_CreateThread(test_colorcycling, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
AcceptDND();
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user