DFBResult IWindow_Real::Move( int dx, int dy ) { D_DEBUG_AT( Core_Window, "IWindow_Real::%s( %p )\n", __FUNCTION__, obj ); D_MAGIC_ASSERT( obj, CoreWindow ); return dfb_window_move( obj, dx, dy, true ); }
static DFBResult IDirectFBWindow_Move( IDirectFBWindow *thiz, int dx, int dy ) { DIRECT_INTERFACE_GET_DATA(IDirectFBWindow) D_DEBUG_AT( IDirectFB_Window, "%s()\n", __FUNCTION__ ); if (data->destroyed) return DFB_DESTROYED; if (dx == 0 && dy == 0) return DFB_OK; return dfb_window_move( data->window, dx, dy, true ); }
DFBResult IWindow_Real::MoveTo( int x, int y ) { DFBResult ret; DFBInsets insets; D_DEBUG_AT( Core_Window, "IWindow_Real::%s( %p )\n", __FUNCTION__, obj ); D_MAGIC_ASSERT( obj, CoreWindow ); dfb_windowstack_lock( obj->stack ); dfb_wm_get_insets( obj->stack, obj, &insets ); ret = dfb_window_move( obj, x + insets.l, y + insets.t, false ); dfb_windowstack_unlock( obj->stack ); return ret; }
static DFBResult IDirectFBWindow_MoveTo( IDirectFBWindow *thiz, int x, int y ) { DFBResult ret; DFBInsets insets; DIRECT_INTERFACE_GET_DATA(IDirectFBWindow) D_DEBUG_AT( IDirectFB_Window, "%s()\n", __FUNCTION__ ); if (data->destroyed) return DFB_DESTROYED; dfb_windowstack_lock( data->window->stack ); dfb_wm_get_insets( data->window->stack, data->window, &insets ); x += insets.l; y += insets.t; ret = dfb_window_move( data->window, x, y, false ); dfb_windowstack_unlock( data->window->stack ); return ret; }
void dfb_windowstack_handle_motion( CoreWindowStack *stack, int dx, int dy ) { int new_cx, new_cy; DFBWindowEvent we; DFB_ASSERT( stack != NULL ); if (!stack->cursor.enabled) return; new_cx = MIN( stack->cursor.x + dx, stack->cursor.region.x2); new_cy = MIN( stack->cursor.y + dy, stack->cursor.region.y2); new_cx = MAX( new_cx, stack->cursor.region.x1 ); new_cy = MAX( new_cy, stack->cursor.region.y1 ); if (new_cx == stack->cursor.x && new_cy == stack->cursor.y) { stack_unlock( stack ); return; } dx = new_cx - stack->cursor.x; dy = new_cy - stack->cursor.y; stack->cursor.x = new_cx; stack->cursor.y = new_cy; DFB_ASSERT( stack->cursor.window != NULL ); dfb_window_move( stack->cursor.window, dx, dy ); switch (stack->wm_hack) { case 2: { CoreWindow *window = stack->entered_window; if (window && !(window->options & DWOP_KEEP_SIZE)) { int width = window->width + dx; int height = window->height + dy; if (width < 48) width = 48; if (height < 48) height = 48; if (width > 2048) width = 2048; if (height > 2048) height = 2048; if (width != window->width || height != window->height) dfb_window_resize( window, width, height ); } break; } case 1: { CoreWindow *window = stack->entered_window; if (window && !(window->options & DWOP_KEEP_POSITION)) dfb_window_move( window, dx, dy ); break; } case 0: stack_lock( stack ); we.cx = stack->cursor.x; we.cy = stack->cursor.y; if (stack->pointer_window) { we.type = DWET_MOTION; we.x = we.cx - stack->pointer_window->x; we.y = we.cy - stack->pointer_window->y; dfb_window_dispatch( stack->pointer_window, &we ); } else { if (!handle_enter_leave_focus( stack ) && stack->entered_window) { we.type = DWET_MOTION; we.x = we.cx - stack->entered_window->x; we.y = we.cy - stack->entered_window->y; dfb_window_dispatch( stack->entered_window, &we ); } } stack_unlock( stack ); break; default: ; } HEAVYDEBUGMSG("DirectFB/windows: mouse at %d, %d\n", stack->cursor.x, stack->cursor.y); }