ref: 794e2ee40b0345746539fbd41ad0eda122f8603e
dir: /n_image.c/
#include <u.h>
#include <libc.h>
#include <draw.h>
#include <event.h>
#include "nate_construct.h"
#include "n_image.h"
#define N_TYPE NImage_Type
char *NImage_Type = "NImage";
static Rectangle
image_calcsize(Nelem *nelem, Image*, Rectangle r)
{
Point p;
NImage *i = (NImage*)nelem;
GUARD(i);
if (!i->autosize) {
i->r = r;
return i->r;
}
p = ZP;
if (i->image)
p = Pt(Dx(i->image->r), Dy(i->image->r));
r.max = addpt(r.min, p);
i->r = r;
return i->r;
}
static void
image_draw(Nelem *nelem, Image *img)
{
NImage *i = (NImage*)nelem;
GUARD(i);
if (!i->image) {
draw(img, i->r, display->white, nil, ZP);
return;
}
draw(img, i->r, i->image, nil, i->offset);
}
static void
image_free(Nelem *nelem)
{
GUARD(nelem);
if (nisroot(nelem))
return;
free(nelem);
}
static Nlist*
image_getchildren(Nelem*)
{
return nil;
}
static Nelemfunctions Nimagefunctions = {
.calcsize = image_calcsize,
.draw = image_draw,
.free = image_free,
.getchildren = image_getchildren,
};
DEF_ACCESSOR_OneParam(NImage, image_image, Image*, image);
DEF_ACCESSOR_OneParam(NImage, image_offset, Point, offset);
DEF_ACCESSOR_OneParam(NImage, image_autosize, int, autosize);
NImage*
New_Image(char *name)
{
NImage *i = MakeNelem(NImage, NImage_Type, &Nimagefunctions, name);
i->image = nil;
i->offset = ZP;
i->Image = image_image;
i->Offset = image_offset;
i->AutoSize = image_autosize;
nc_push(i);
return i;
}