56 lines
1.1 KiB
C
56 lines
1.1 KiB
C
#include <justui/jpainted.h>
|
|
#include <gint/std/stdlib.h>
|
|
|
|
/* Type identifier for jpainted */
|
|
static int jpainted_type_id = -1;
|
|
|
|
jpainted *jpainted_create(void *function, j_arg_t arg, int natural_w,
|
|
int natural_h, void *parent)
|
|
{
|
|
if(jpainted_type_id < 0) return NULL;
|
|
|
|
jpainted *p = malloc(sizeof *p);
|
|
jwidget_init(&p->widget, jpainted_type_id, parent);
|
|
|
|
p->paint = function;
|
|
p->arg = arg;
|
|
p->natural_w = natural_w;
|
|
p->natural_h = natural_h;
|
|
|
|
return p;
|
|
}
|
|
|
|
//---
|
|
// Polymorphic widget operations
|
|
//---
|
|
|
|
static void jpainted_poly_csize(void *p0)
|
|
{
|
|
jpainted *p = p0;
|
|
p->widget.w = p->natural_w;
|
|
p->widget.h = p->natural_h;
|
|
}
|
|
|
|
static void jpainted_poly_render(void *p0, int x, int y)
|
|
{
|
|
jpainted *p = p0;
|
|
p->paint(x, y, p->arg);
|
|
}
|
|
|
|
/* jpainted type definition */
|
|
static jwidget_poly type_jpainted = {
|
|
.name = "jpainted",
|
|
.csize = jpainted_poly_csize,
|
|
.layout = NULL,
|
|
.render = jpainted_poly_render,
|
|
.event = NULL,
|
|
.destroy = NULL,
|
|
};
|
|
|
|
/* Type registration */
|
|
__attribute__((constructor(1004)))
|
|
static void j_register_jpainted(void)
|
|
{
|
|
jpainted_type_id = j_register_widget(&type_jpainted, "jwidget");
|
|
}
|