SK_View
—
Editor/display widget for Agar dimensioned 2D
sketches
#include <agar/core.h>
#include <agar/sk.h>
The SK_View
widget displays a
SK(3)
sketch, and allows edition facilities to be implemented using a tool
registration interface.
SK_View *
SK_ViewNew
(AG_Widget
*parent, SK *sk,
Uint flags);
void
SK_ViewZoom
(SK_View
*skv, M_Real
factor);
The
SK_ViewNew
()
function allocates, initializes, and attaches a
SK_View
widget. Acceptable
flags options include:
- SK_VIEW_HFILL
- Expand horizontally in parent container.
- SK_VIEW_VFILL
- Expand vertically in parent container.
- SK_VIEW_EXPAND
- Shorthand for
SK_VIEW_HFILL
|
SK_VIEW_VFILL
.
The
SK_ViewZoom
()
function sets the display scaling factor (1.0 = 100%).
SK_Tool *
SK_ViewRegTool
(SK_View
*skv, const SK_ToolOps
*ops, void
*arg);
void
SK_ViewSelectTool
(SK_View
*skv, SK_Tool
*tool, void
*arg);
SK_Tool *
SK_ViewFindTool
(SK_View
*skv, const char
*name);
SK_Tool *
SK_ViewFindToolByOps
(SK_View
*skv, const SK_ToolOps
*ops);
void
SK_ViewSetDefaultTool
(SK_View
*skv, SK_Tool
*tool);
The
SK_ViewRegTool
()
function registers a new tool class described by the
ops structure, which is defined as:
typedef struct sk_tool_ops {
const char *name;
const char *desc;
struct ag_static_icon *icon;
AG_Size len;
Uint flags;
#define SK_MOUSEMOTION_NOSNAP 0x01 /* Ignore snapping in mousemotion */
#define SK_BUTTONUP_NOSNAP 0x02 /* Ignore snapping in buttonup */
#define SK_BUTTONDOWN_NOSNAP 0x04 /* Ignore snapping in buttondown */
#define SK_BUTTON_NOSNAP (SK_BUTTONUP_NOSNAP|SK_BUTTONDOWN_NOSNAP)
#define SK_NOSNAP (SK_BUTTON_NOSNAP|SK_MOUSEMOTION_NOSNAP)
void (*init)(void *tool);
void (*destroy)(void *tool);
void (*edit)(void *tool, void *editBox);
int (*mousemotion)(void *tool, M_Vector3 pos, M_Vector3 vel,
int btn);
int (*mousebuttondown)(void *tool, M_Vector3 pos, int btn);
int (*mousebuttonup)(void *tool, M_Vector3 pos, int btn);
int (*keydown)(void *tool, int ksym, int kmod);
int (*keyup)(void *tool, int ksym, int kmod);
} SK_ToolOps;
The name field is a unique name identifier
for the tool. desc is a short description string.
icon is an optional icon or NULL.
len is the size of the structure describing an
instance of this tool class.
The
init
()
operation initializes a new instance of a tool.
destroy
()
should release all resources allocated by a tool instance. The optional
edit
()
operation is expected to attach arbitrary widgets to
editBox, for purposes of editing tool parameters.
The low-level input device events processed by
the SK_View
widget are forwarded to the handler
functions
mousemotion
(),
mousebuttondown
(),
mousebuttonup
(),
keydown
()
and
keyup
().
They should return 1 if some action has resulted from the event, or 0
otherwise. The coordinates passed to the
mouse*
()
handlers are translated to actual
SK(3)
coordinates.
The
SK_ViewSelectTool
()
function selects tool as the active tool instance. The
arg argument is an optional user pointer passed to the
tool instance.
The
SK_ViewFindTool
()
function looks up a tool instance by name.
SK_ViewFindToolByOps
() looks up a tool instance by
class. Both functions return NULL if no match was found.
SK_ViewSetDefaultTool
()
configures a tool to be active by default when the
SK_View
is initially created. This is often a
"select" type tool.
SK_Point *
SK_ViewOverPoint
(SK_View
*skv, M_Vector3
*pos, M_Vector3
*vC, void
*ignoreNode);
void
SK_ViewSetNodeData
(SK_View
*skv, SK_Node
*node, void
*pData);
void *
SK_ViewGetNodeData
(SK_View
*skv, SK_Node
*node);
The
SK_ViewOverPoint
()
function performs a proximity query for the given position
pos, with respect to all point entities in the sketch.
This function is a convenient wrapper around
SK_ProximitySearch(3).
The closest point is returned into the vC argument.
The optional ignore argument specifies a pointer to a
node that should be ignored in the search.
The
SK_ViewSetNodeData
()
function registers a pointer to an arbitrary data structure (previously
allocated with
malloc(3)
or
AG_Malloc(3))
to be associated with a given node, using a table in
the SK_View
structure. This is useful for nodes that
need to cache resources such as texture handles, that are specific to an
SK_View
instance.
SK_ViewGetNodeData
()
returns a pointer to the arbitrary data structure previously associated with
node, or NULL if no match was found.
See the
skedit(1)
application (the tools directory in the Agar source
distribution).
The SK_View
widget first appeared in Agar
1.6.0.