ref: 1890aeca379976e46deabb0ce844aefc8be1a2c5
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 Nelemfunctions Nimagefunctions = {
.calcsize = image_calcsize,
.draw = image_draw,
};
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, 0);
i->image = nil;
i->offset = ZP;
i->Image = image_image;
i->Offset = image_offset;
i->AutoSize = image_autosize;
nc_push(i);
return i;
}