/***************************************************************************
 begin       : Mon Feb 22 2010
 copyright   : (C) 2010 by Martin Preuss
 email       : martin@libchipcard.de

 ***************************************************************************
 *          Please see toplevel file COPYING for license details           *
 ***************************************************************************/


#ifndef HTMLXMLCTX_BE_H
#define HTMLXMLCTX_BE_H

#include <gwenhywfar/htmlfont_be.h>
#include <gwenhywfar/htmlobject_be.h>
#include <gwenhywfar/htmlimage_be.h>

#include <gwenhywfar/xmlctx.h>
#include <gwenhywfar/stringlist.h>


#ifdef __cplusplus
extern "C" {
#endif


typedef int (*HTMLCTX_GET_TEXT_WIDTH_FN)(GWEN_XML_CONTEXT *ctx,
                                         HTML_FONT *fnt,
                                         const char *s);

typedef int (*HTMLCTX_GET_TEXT_HEIGHT_FN)(GWEN_XML_CONTEXT *ctx,
                                          HTML_FONT *fnt,
                                          const char *s);


typedef uint32_t (*HTMLCTX_GET_COLOR_FROM_NAME_FN)(const GWEN_XML_CONTEXT *ctx, const char *s);


typedef HTML_FONT *(*HTMLCTX_GET_FONT_FN)(GWEN_XML_CONTEXT *ctx,
                                          const char *fontName,
                                          int fontSize,
                                          uint32_t fontFlags);

typedef HTML_IMAGE *(*HTMLCTX_GET_IMAGE_FN)(GWEN_XML_CONTEXT *ctx, const char *imageName);



GWENHYWFAR_API
GWEN_XML_CONTEXT *HtmlCtx_new(uint32_t flags);

GWENHYWFAR_API
void HtmlCtx_SetText(GWEN_XML_CONTEXT *ctx, const char *s);

GWENHYWFAR_API
int HtmlCtx_Layout(GWEN_XML_CONTEXT *ctx, int width, int height);

GWENHYWFAR_API
HTML_OBJECT *HtmlCtx_GetRootObject(const GWEN_XML_CONTEXT *ctx);


GWENHYWFAR_API
HTML_FONT *HtmlCtx_GetFont(GWEN_XML_CONTEXT *ctx,
                           const char *fontName,
                           int fontSize,
                           uint32_t fontFlags);

/**
 * The implementation must set width and height in the image returned.
 */
GWENHYWFAR_API
HTML_IMAGE *HtmlCtx_GetImage(GWEN_XML_CONTEXT *ctx, const char *imageName);

GWENHYWFAR_API
HTML_PROPS *HtmlCtx_GetStandardProps(const GWEN_XML_CONTEXT *ctx);

GWENHYWFAR_API
void HtmlCtx_SetStandardProps(GWEN_XML_CONTEXT *ctx, HTML_PROPS *pr);


GWENHYWFAR_API
int HtmlCtx_GetWidth(const GWEN_XML_CONTEXT *ctx);

GWENHYWFAR_API
int HtmlCtx_GetHeight(const GWEN_XML_CONTEXT *ctx);


GWENHYWFAR_API
int HtmlCtx_GetResolutionX(const GWEN_XML_CONTEXT *ctx);

GWENHYWFAR_API
void HtmlCtx_SetResolutionX(GWEN_XML_CONTEXT *ctx, int i);

GWENHYWFAR_API
int HtmlCtx_GetResolutionY(const GWEN_XML_CONTEXT *ctx);

GWENHYWFAR_API
void HtmlCtx_SetResolutionY(GWEN_XML_CONTEXT *ctx, int i);


GWENHYWFAR_API
GWEN_STRINGLIST *HtmlCtx_GetMediaPaths(const GWEN_XML_CONTEXT *ctx);

GWENHYWFAR_API
void HtmlCtx_AddMediaPath(GWEN_XML_CONTEXT *ctx, const char *s);


GWENHYWFAR_API
HTMLCTX_GET_TEXT_WIDTH_FN HtmlCtx_SetGetTextWidthFn(GWEN_XML_CONTEXT *ctx,
                                                    HTMLCTX_GET_TEXT_WIDTH_FN fn);

GWENHYWFAR_API
HTMLCTX_GET_TEXT_HEIGHT_FN HtmlCtx_SetGetTextHeightFn(GWEN_XML_CONTEXT *ctx,
                                                      HTMLCTX_GET_TEXT_HEIGHT_FN fn);


GWENHYWFAR_API
HTMLCTX_GET_COLOR_FROM_NAME_FN HtmlCtx_SetGetColorFromNameFn(GWEN_XML_CONTEXT *ctx,
                                                             HTMLCTX_GET_COLOR_FROM_NAME_FN fn);

GWENHYWFAR_API
HTMLCTX_GET_FONT_FN HtmlCtx_SetGetFontFn(GWEN_XML_CONTEXT *ctx,
                                         HTMLCTX_GET_FONT_FN fn);

GWENHYWFAR_API
HTMLCTX_GET_IMAGE_FN HtmlCtx_SetGetImageFn(GWEN_XML_CONTEXT *ctx, HTMLCTX_GET_IMAGE_FN fn);

#ifdef __cplusplus
}
#endif

#endif

