#ifndef HEXTILE_H
#define HEXTILE_H

#include "vncserv.h"

/* Hextile encoding handling */

typedef struct
{
  char output[16*16*8]; // large enough to hold any hextile coded 16x16 block
  int len;
  bool validfg;
  bool validbg;
  union {
    struct {
      CARD32 bg;
      CARD32 fg;
      CARD32 clientblock[16*16];
    } _32;
    struct {
      CARD16 bg;
      CARD16 fg;
      CARD16 clientblock[16*16];
    } _16;
    struct {
      CARD8 bg;
      CARD8 fg;
      CARD8 clientblock[16*16];
    } _8;
  };
} hextile_temp_buffer;

#define HEXTILE_MAX_PACKET (16*16*4*16) /* hextile_send tries to do 16 tiles at once */

/* Return number of rectangles needed */
extern int hextile_num_rects(vncserv *serv, const area *rect);

/* Returns true if progress has been made */
extern bool hextile_send(vncserv *serv, send_rect_state *state, hextile_temp_buffer *temp);

#endif
