Sign in to follow this  

SDL Drag&Drop Windows problem

This topic is 2332 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi I used C and SDL in Ubuntu Linux for graphics side for my game program and there was no problem with SDL functions in Ubuntu.However when I switched to mingw32 and Windows XP, I started having problems with Drag&Drop.The code is the same but I can't drag the image.Just when I click on somewhere, the image is Blitted to the screen.But there is no continuous motion.Here is the code:

[code]

BOOL mouse_down=false;
BOOL mouse_motion=false;
BOOL mouse_pressed=false;
BOOL mouse_up=false;
BOOL startdrag=false;


void SDL_MouseDown_Event(SDL_Event *event)
{
int x,y;

x=event->button.x;
y=event->button.y;

if(event->button.button==SDL_BUTTON_LEFT)
{
mouse_down=true;
startdrag=true;

}

}

void SDL_MouseMove_Event(SDL_Event* event)
{
int x,y;

x=(int)event->motion.x;
y=(int)event->motion.y;

if(event->motion.state==SDL_BUTTON_LEFT && startdrag)
{

SDL_Rect src;

src.h=50;
src.w=50;
src.x=x;
src.y=y;


SDL_Drag_Event(&src,x,y);

}

}

void SDL_MouseUp_Event(SDL_Event* event)
{
int x,y;
x=(int)event->button.x;
y=(int)event->button.y;

if(startdrag)
{
startdrag=false;

}

}


void SDL_Drag_Event(SDL_Rect* src,int x,int y)
{
SDL_Rect dest;

dest.x=x;
dest.y=y;
dest.w=50;
dest.h=50;

SDL_Apply_Surface(100,20,image);

SDL_BlitSurface(picture,NULL,screen,&hedef_kare);

SDL_FillRect(screen,NULL,C_WHITE);


}


void SDL_Refresh(void)
{
SDL_UpdateRect(image,0,0,0,0);


}

[/code]

My Event Handling functions are in "main.c" which I am sure are working properly.Here are the Event Handling function:

[code]
do{

SDL_WaitEvent(&event);

while ( SDL_PollEvent(&event) ) {

switch(event.type)

{
case SDL_MOUSEBUTTONDOWN:
SDL_MouseDown_Event(&event);

break;

case SDL_MOUSEMOTION:
SDL_MouseMove_Event(&event);

break;

case SDL_MOUSEBUTTONUP:
SDL_MouseUp_Event(&event);

break;

case SDL_QUIT:

exit(0);
break;

case SDL_KEYDOWN:

exit(0);
break;

}
}

}while(event.type!=SDL_QUIT && event.type!=SDL_KEYDOWN);

[/code]

Any suggestions?Thank you very much

Share this post


Link to post
Share on other sites
[quote name='Wooh' timestamp='1311678959' post='4840452']
You don't handle the events you get from SDL_WaitEvent.
[/quote]

Can you be more specific?You mean I should change the event handling procedure?Or should I add another "case" for SDL_WaitEvent?Thanks

Share this post


Link to post
Share on other sites
In the loop you have SDL_WaitEvent(&event). If there is no events in the event queue it will wait for an event to arrive. You never do anything with the events you get from SDL_WaitEvent so you likely miss most of the events. I think if you remove the line with SDL_WaitEvent(&event) it will work better.

Share this post


Link to post
Share on other sites
[quote name='Wooh' timestamp='1311700177' post='4840665']
In the loop you have SDL_WaitEvent(&event). If there is no events in the event queue it will wait for an event to arrive. You never do anything with the events you get from SDL_WaitEvent so you likely miss most of the events. I think if you remove the line with SDL_WaitEvent(&event) it will work better.
[/quote]

It worked.Thank you very much: )

Share this post


Link to post
Share on other sites

This topic is 2332 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this