<-- Back to AG_Intro.3


#include <agar/core.h>
#include <agar/gui.h>


AG_DriverMw is a subclass of AG_Driver(3) for "multiple-window" drivers (i.e., drivers where Agar must interface with a native window system).


AG_Driver(3)-> AG_DriverMw.


The AG_DriverMwClass structure describes a "multiple-window" graphics driver, where Agar will need to interface with an existing window manager. AG_DriverMwClass inherits from AG_DriverClass and is defined as follows:
typedef struct ag_driver_mw_class {
	struct ag_driver_class _inherit;

	/* Open/close native windows */
	int  (*openWindow)(AG_Window *w, const AG_Rect *r, int bpp,
	                   Uint flags);
	void (*closeWindow)(AG_Window *w);

	/* Show and hide window */
	int (*mapWindow)(AG_Window *w);
	int (*unmapWindow)(AG_Window *w);

	/* Configure stacking order and parenting */
	int (*raiseWindow)(AG_Window *w);
	int (*lowerWindow)(AG_Window *w);
	int (*reparentWindow)(AG_Window *w, AG_Window *winParent,
	                      int x, int y);

	/* Change and query input focus state */
	int (*getInputFocus)(AG_Window **w);
	int (*setInputFocus)(AG_Window *w);

	/* Move and resize windows */
	int  (*moveWindow)(AG_Window *w, int x, int y);
	int  (*resizeWindow)(AG_Window *w, Uint w, Uint h);
	int  (*moveResizeWindow)(AG_Window *w, AG_SizeAlloc *a);
	void (*preResizeCallback)(AG_Window *w);
	void (*postResizeCallback)(AG_Window *w, AG_SizeAlloc *a);

	/* Configure window parameters */
	int  (*setBorderWidth)(AG_Window *w, Uint w);
	int  (*setWindowCaption)(AG_Window *w, const char *s);
	void (*setTransientFor)(AG_Window *w, AG_Window *winParent);
	int  (*setOpacity)(AG_Window *w, float opacity);
	void (*tweakAlignment)(AG_Window *w, AG_SizeAlloc *a);
} AG_DriverMwClass;

The openWindow() operation opens a new "native" window corresponding to an AG_Window(3) that is in the process of being created, returning 0 on success or -1 on failure. The r argument specifies the preferred location and geometry of the window, in pixels. bpp specifies a preferred depth in bits per pixels. The following flags are recognized:
AG_DRIVER_MW_ANYPOSIgnore the coordinates in r and let the underlying window system select some default coordinates.

mapWindow() and unmapWindow() make a window visible or invisible, returning 0 on success and -1 on failure.

raiseWindow() and lowerWindow() respectively raise and lower the window, returning 0 on success and -1 on failure. The reparentWindow() function arranges for the window to become a child of winParent, moving it to parent-relative coordinates x, y. The function should return 0 on success or -1 on failure.

The getInputFocus() operation retrieves a pointer to the window currently holding focus, returning 0 on success. If the focus is external to the Agar application, it should return -1. setInputFocus() gives focus to the specified window, returning 0 on success or -1 on failure.

The moveWindow(), resizeWindow() and moveResizeWindow() operations respectively move, resize or move+resize a window to specified coordinates and geometry, returning 0 on success or -1 on failure.

The preResizeCallback() operation is invoked prior to a window resize, and postResizeCallback() is invoked following a window resize (the new window geometry is passed as the a argument).

setBorderWidth() configures a window border size in pixels, returning 0 on success or -1 if the operation is unsupported or an error has occurred.

setWindowCaption() sets the associated window caption text, if supported by the window system. The string passed to the function may contain characters in UTF-8 encoding. The function should return 0 on success or -1 on failure.

setTransientFor() passes a hint to the window manager that the window should be marked as "transient" for the specified window winParent. This operation is optional and window manager specific.

setOpacity() passes a window opacity argument (ranging from 0.0 to 1.0) to the underlying window manager.

The optional tweakAlignment() operation allows the driver to override or alter the effect of the window alignment request (set by AG_WindowSetPosition(3) or AG_WindowSetGeometryAligned(3)), such that underlying WM-specific items (desktop panels and such) can be taken into consideration (by default, the display boundaries are used). This routine should set the x and y members of a, in function of w and h.


AG_Driver(3), AG_DriverSw(3), AG_InitGraphics(3), AG_Intro(3)


The AG_DriverMw class first appeared in Agar 1.4.0. ElectronTubeStore