/*
  area.c - A quick approach to handling areas of a window.
*/

#include <stdlib.h>

#include "err.h"
#include "hb.h"

#include "wind.h"

#include "area.h"

/* ------------------------------------------------------------------------ */
struct area *
area_create(struct aop *aop, size_t dsize)
{
    struct area *ret;

    ret = calloc(sizeof(struct area) + dsize, 1);
    if (!ret) {
	do_error(ERR_NOMEM, "Can't create area.");
    }
    
    ret->bounds.x = aop->x;
    ret->bounds.y = aop->y;
    ret->bounds.width = aop->width;
    ret->bounds.height = aop->height;
    ret->owner = aop->owner;
    ret->gc = aop->gc;
    ret->data = ret + 1;
    return(ret);
}

/* ------------------------------------------------------------------------ */
void 
area_destroy(struct area *area)
{
    free(area);
}

/* ------------------------------------------------------------------------ */
int 
area_mouse(struct area *area, XButtonEvent *bev)
{
    return(area->aops->mouse(area, bev));
}

/* ------------------------------------------------------------------------ */
int
area_draw(struct area *area, XExposeEvent *eev)
{
    return(area->aops->draw(area, eev));
}

/* ------------------------------------------------------------------------ */
int
area_resize(struct area *area, XConfigureEvent *cev)
{
    return(area->aops->resize(area, cev));
}

/* ------------------------------------------------------------------------ */
int 
area_key(struct area *area, XKeyEvent *kev)
{
    return(area->aops->key(area, kev));
}

/* ------------------------------------------------------------------------ */
int
area_activate(struct area *area, XMapEvent *mev)
{
    return(area->aops->activate(area, mev));
}

/* ------------------------------------------------------------------------ */
int
area_deactivate(struct area *area, XUnmapEvent *uev)
{
    return(area->aops->deactivate(area, uev));
}

