src/events/SDL_mouse.c
branchSDL-1.3
changeset 1724 6c63fc2bd986
parent 1722 5daa04d862f1
child 1731 875c3cf1a12c
equal deleted inserted replaced
1723:4bdbb9b2bd0a 1724:6c63fc2bd986
   263     mouse->xdelta = 0;
   263     mouse->xdelta = 0;
   264     mouse->ydelta = 0;
   264     mouse->ydelta = 0;
   265     return mouse->buttonstate;
   265     return mouse->buttonstate;
   266 }
   266 }
   267 
   267 
   268 int
   268 void
   269 SDL_SendMouseMotion(int index, SDL_WindowID windowID, int relative, int x,
   269 SDL_SetMouseFocus(int index, SDL_WindowID windowID)
   270                     int y)
   270 {
       
   271     SDL_Mouse *mouse = SDL_GetMouse(index);
       
   272     int i;
       
   273     SDL_bool focus;
       
   274 
       
   275     if (!mouse || (mouse->focus == windowID)) {
       
   276         return;
       
   277     }
       
   278 
       
   279     /* See if the current window has lost focus */
       
   280     if (mouse->focus) {
       
   281         focus = SDL_FALSE;
       
   282         for (i = 0; i < SDL_num_mice; ++i) {
       
   283             SDL_Mouse *check;
       
   284             if (i != index) {
       
   285                 check = SDL_GetMouse(i);
       
   286                 if (check && check->focus == mouse->focus) {
       
   287                     focus = SDL_TRUE;
       
   288                     break;
       
   289                 }
       
   290             }
       
   291         }
       
   292         if (!focus) {
       
   293             SDL_SendWindowEvent(windowID, SDL_WINDOWEVENT_LEAVE, 0, 0);
       
   294         }
       
   295     }
       
   296 
       
   297     mouse->focus = windowID;
       
   298 
       
   299     if (mouse->focus) {
       
   300         focus = SDL_FALSE;
       
   301         for (i = 0; i < SDL_num_mice; ++i) {
       
   302             SDL_Mouse *check;
       
   303             if (i != index) {
       
   304                 check = SDL_GetMouse(i);
       
   305                 if (check && check->focus == mouse->focus) {
       
   306                     focus = SDL_TRUE;
       
   307                     break;
       
   308                 }
       
   309             }
       
   310         }
       
   311         if (!focus) {
       
   312             SDL_SendWindowEvent(windowID, SDL_WINDOWEVENT_ENTER, 0, 0);
       
   313         }
       
   314     }
       
   315 }
       
   316 
       
   317 int
       
   318 SDL_SendMouseMotion(int index, int relative, int x, int y)
   271 {
   319 {
   272     SDL_Mouse *mouse = SDL_GetMouse(index);
   320     SDL_Mouse *mouse = SDL_GetMouse(index);
   273     int posted;
   321     int posted;
   274     int xrel;
   322     int xrel;
   275     int yrel;
   323     int yrel;
   276 
   324 
   277     if (!mouse || mouse->flush_motion) {
   325     if (!mouse || mouse->flush_motion) {
   278         return 0;
   326         return 0;
   279     }
       
   280 
       
   281     if (windowID) {
       
   282         mouse->focus = windowID;
       
   283     }
   327     }
   284 
   328 
   285     if (relative) {
   329     if (relative) {
   286         /* Push the cursor around */
   330         /* Push the cursor around */
   287         xrel = x;
   331         xrel = x;
   335     }
   379     }
   336     return posted;
   380     return posted;
   337 }
   381 }
   338 
   382 
   339 int
   383 int
   340 SDL_SendMouseButton(int index, SDL_WindowID windowID, Uint8 state,
   384 SDL_SendMouseButton(int index, Uint8 state, Uint8 button)
   341                     Uint8 button)
       
   342 {
   385 {
   343     SDL_Mouse *mouse = SDL_GetMouse(index);
   386     SDL_Mouse *mouse = SDL_GetMouse(index);
   344     int posted;
   387     int posted;
   345     Uint8 type;
   388     Uint8 type;
   346 
   389 
   347     if (!mouse) {
   390     if (!mouse) {
   348         return 0;
   391         return 0;
   349     }
       
   350 
       
   351     if (windowID) {
       
   352         mouse->focus = windowID;
       
   353     }
   392     }
   354 
   393 
   355     /* Figure out which event to perform */
   394     /* Figure out which event to perform */
   356     switch (state) {
   395     switch (state) {
   357     case SDL_PRESSED:
   396     case SDL_PRESSED:
   393         }
   432         }
   394     }
   433     }
   395     return posted;
   434     return posted;
   396 }
   435 }
   397 
   436 
       
   437 int
       
   438 SDL_SendMouseWheel(int index, int motion)
       
   439 {
       
   440     SDL_Mouse *mouse = SDL_GetMouse(index);
       
   441     int posted;
       
   442 
       
   443     if (!mouse || !motion) {
       
   444         return 0;
       
   445     }
       
   446 
       
   447     /* Post the event, if desired */
       
   448     posted = 0;
       
   449     if (SDL_ProcessEvents[SDL_MOUSEWHEEL] == SDL_ENABLE) {
       
   450         SDL_Event event;
       
   451         event.type = SDL_MOUSEWHEEL;
       
   452         event.wheel.which = (Uint8) index;
       
   453         event.wheel.motion = motion;
       
   454         event.wheel.windowID = mouse->focus;
       
   455         if ((SDL_EventOK == NULL)
       
   456             || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
       
   457             posted = 1;
       
   458             SDL_PushEvent(&event);
       
   459         }
       
   460     }
       
   461     return posted;
       
   462 }
       
   463 
   398 void
   464 void
   399 SDL_WarpMouseInWindow(SDL_WindowID windowID, int x, int y)
   465 SDL_WarpMouseInWindow(SDL_WindowID windowID, int x, int y)
   400 {
   466 {
   401     SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse);
   467     SDL_Mouse *mouse = SDL_GetMouse(SDL_current_mouse);
   402 
   468 
   405     }
   471     }
   406 
   472 
   407     if (mouse->WarpMouse) {
   473     if (mouse->WarpMouse) {
   408         mouse->WarpMouse(mouse, windowID, x, y);
   474         mouse->WarpMouse(mouse, windowID, x, y);
   409     } else {
   475     } else {
   410         SDL_SendMouseMotion(SDL_current_mouse, windowID, 0, x, y);
   476         SDL_SetMouseFocus(SDL_current_mouse, windowID);
       
   477         SDL_SendMouseMotion(SDL_current_mouse, 0, x, y);
   411     }
   478     }
   412 }
   479 }
   413 
   480 
   414 SDL_Cursor *
   481 SDL_Cursor *
   415 SDL_CreateCursor(const Uint8 * data, const Uint8 * mask,
   482 SDL_CreateCursor(const Uint8 * data, const Uint8 * mask,