#include <string.h>
#include <arpa/inet.h>
#include "render.h"
int render_init (render_t *ctx, int mode) {
memset(ctx, 0, sizeof(*ctx));
return render_set_mode(ctx, mode);
}
int render_set_mode (render_t *ctx, int mode) {
if (mode != RENDER_RAW && mode != RENDER_PNG)
return RENDER_ERR;
ctx->mode = mode;
return RENDER_OK;
}
int render_set_size (render_t *ctx, u_int32_t img_w, u_int32_t img_h) {
if (img_w == 0 || img_h == 0)
return RENDER_ERR;
ctx->img_w = img_w;
ctx->img_h = img_h;
return RENDER_OK;
}
int render_region_full (render_t *ctx) {
return render_region_raw(ctx, REGION_X1, REGION_Y1, REGION_X2, REGION_Y2);
}
int render_region_raw (render_t *ctx, double x1, double y1, double x2, double y2) {
if ((x1 >= x2) || (y1 >= y2))
return RENDER_ERR;
ctx->x1 = x1;
ctx->y1 = y1;
ctx->x2 = x2;
ctx->y2 = y2;
return RENDER_OK;
}
int render_io_custom (render_t *ctx, render_ctx_write_cb write_fn, render_ctx_flush_cb flush_fn, void *arg) {
if (!write_fn)
return RENDER_ERR;
ctx->io_write_fn = write_fn;
ctx->io_flush_fn = flush_fn;
ctx->io_cb_arg = arg;
return RENDER_OK;
}
int render_io_stream (render_t *ctx, FILE *fh) {
if (!fh)
return RENDER_ERR;
ctx->io_stream = fh;
return RENDER_OK;
}
int render_cmd_build (render_t *ctx, struct render_cmd *cmd) {
cmd->img_w = htonl(ctx->img_w);
cmd->img_h = htonl(ctx->img_h);
cmd->x1 = ctx->x1;
cmd->y1 = ctx->y1;
cmd->x2 = ctx->x2;
cmd->y2 = ctx->y2;
return RENDER_OK;
}