gdk: Add gdk_toplevel_begin_move/resize

For now, these are wrappers around the surface apis,
but they are going to replace them, since this operation
is only available on toplevels.
This commit is contained in:
Matthias Clasen 2020-05-17 11:45:37 -04:00
parent 2c1d218749
commit 309a7aa253
3 changed files with 69 additions and 0 deletions

View File

@ -675,6 +675,8 @@ gdk_toplevel_set_deletable
gdk_toplevel_supports_edge_constraints
gdk_toplevel_inhibit_system_shortcuts
gdk_toplevel_restore_system_shortcuts
gdk_toplevel_begin_resize
gdk_toplevel_begin_move
<SUBSECTION Standard>
GDK_TYPE_TOPLEVEL
gdk_toplevel_get_type

View File

@ -23,6 +23,8 @@
#include "gdk-private.h"
#include "gdktoplevelprivate.h"
#include <math.h>
/**
* SECTION:gdktoplevel
* @Short_description: Interface for toplevel surfaces
@ -512,3 +514,51 @@ gdk_toplevel_restore_system_shortcuts (GdkToplevel *toplevel)
GDK_TOPLEVEL_GET_IFACE (toplevel)->restore_system_shortcuts (toplevel);
}
/**
* gdk_toplevel_begin_resize:
* @toplevel: a #GdkToplevel
* @edge: the edge or corner from which the drag is started
* @device: the device used for the operation
* @button: the button being used to drag, or 0 for a keyboard-initiated drag
* @x: surface X coordinate of mouse click that began the drag
* @y: surface Y coordinate of mouse click that began the drag
* @timestamp: timestamp of mouse click that began the drag (use gdk_event_get_time())
*
* Begins an interactive resize operation (for a toplevel surface).
* You might use this function to implement a window resize grip.
*/
void
gdk_toplevel_begin_resize (GdkToplevel *toplevel,
GdkSurfaceEdge edge,
GdkDevice *device,
int button,
double x,
double y,
guint32 timestamp)
{
gdk_surface_begin_resize_drag (GDK_SURFACE (toplevel), edge, device, button, round (x), round (y), timestamp);
}
/**
* gdk_toplevel_begin_move:
* @toplevel: a #GdkToplevel
* @device: the device used for the operation
* @button: the button being used to drag, or 0 for a keyboard-initiated drag
* @x: surface X coordinate of mouse click that began the drag
* @y: surface Y coordinate of mouse click that began the drag
* @timestamp: timestamp of mouse click that began the drag
*
* Begins an interactive move operation (for a toplevel surface).
* You might use this function to implement draggable titlebars.
*/
void
gdk_toplevel_begin_move (GdkToplevel *toplevel,
GdkDevice *device,
int button,
double x,
double y,
guint32 timestamp)
{
gdk_surface_begin_move_drag (GDK_SURFACE (toplevel), device, button, round (x), round (y), timestamp);
}

View File

@ -95,6 +95,23 @@ void gdk_toplevel_inhibit_system_shortcuts (GdkToplevel *toplevel,
GDK_AVAILABLE_IN_ALL
void gdk_toplevel_restore_system_shortcuts (GdkToplevel *toplevel);
GDK_AVAILABLE_IN_ALL
void gdk_toplevel_begin_resize (GdkToplevel *toplevel,
GdkSurfaceEdge edge,
GdkDevice *device,
int button,
double x,
double y,
guint32 timestamp);
GDK_AVAILABLE_IN_ALL
void gdk_toplevel_begin_move (GdkToplevel *toplevel,
GdkDevice *device,
int button,
double x,
double y,
guint32 timestamp);
G_END_DECLS