#include "ctk-gtksim.h"

#include "ctk-gtksim-draw.h"

#define RASTER_X 8

#define FONT_BASELINE 8

struct ctk_gtksim_draw_font {
  /*  GdkFont *font;*/
  PangoFontDescription *font;
};

struct ctk_gtksim_draw_color {
  GdkGC *color;
};

struct ctk_gtksim_draw_font ctk_gtksim_draw_font_normal,
  ctk_gtksim_draw_font_bold,
  ctk_gtksim_draw_font_menu,
  ctk_gtksim_draw_font_monospace,
  ctk_gtksim_draw_font_monospace_bold;

struct ctk_gtksim_draw_color ctk_gtksim_draw_color_white,
  ctk_gtksim_draw_color_lightgray,
  ctk_gtksim_draw_color_midgray,
  ctk_gtksim_draw_color_darkgray,
  ctk_gtksim_draw_color_ddarkgray,
  ctk_gtksim_draw_color_black,
  ctk_gtksim_draw_color_blue;

/*static GdkFont *font, *ctk_gtksim_draw_font_bold, *menufont, *ctk_gtksim_draw_font_monospace;*/

static PangoLayout *layout;

/*--------------------------------------------------------------------------*/
int
ctk_gtksim_draw_string_width(struct ctk_gtksim_draw_font *font,
			     char *str, int monospace)
{
  int width;
  if(monospace) {
    return strlen(str) * RASTER_X;
  } else {
    pango_layout_set_text(layout, str, -1);
    pango_layout_set_font_description(layout, font->font);
    pango_layout_get_size(layout, &width, NULL);
    return width / PANGO_SCALE;
    /*    return gdk_string_width(font->font, str);*/
  }
}
/*--------------------------------------------------------------------------*/
void
ctk_gtksim_draw_string(struct ctk_gtksim_draw_font *font,
		       struct ctk_gtksim_draw_color *color,
		       int x, int y, char *str, 
		       int monospace)
{
  int i;
  char text[2];

  pango_layout_set_font_description(layout, font->font);
  
  if(monospace) {
    text[1] = 0;
    for(i = 0; i < strlen(str); ++i) {
      text[0] = str[i];
      pango_layout_set_text(layout, text, 1);
      
      gdk_draw_layout(ctk_gtksim_pixmap, color->color,
		      x, y, layout);
      /*    gdk_draw_string(ctk_gtksim_pixmap, font->font, color->color,
	    x, y + FONT_BASELINE, text);*/
      x += RASTER_X;
    }
  } else {
    pango_layout_set_text(layout, str, -1);
    
    gdk_draw_layout(ctk_gtksim_pixmap, color->color,
		    x, y, layout);
    /*    gdk_draw_string(ctk_gtksim_pixmap, font->font, color->color,
	  x, y + FONT_BASELINE, str);*/
  }
}
/*--------------------------------------------------------------------------*/
static GdkGC *
get_color(unsigned short r, unsigned short g, unsigned short b)
{
  GdkGCValues values;
  GdkColor color;

  color.pixel = 0;
  color.red = r;
  color.green = g;
  color.blue = b;

  if(gdk_colormap_alloc_color(gdk_colormap_get_system(),
			      &color, FALSE, TRUE)) {
  }
  
  values.foreground = color;
  
  return gdk_gc_new_with_values(ctk_gtksim_drawing_area->window,
				&values,
				GDK_GC_FOREGROUND);  
}
/*--------------------------------------------------------------------------*/
void
ctk_gtksim_draw_init(void)
{
  /*  
  ctk_gtksim_draw_font_normal.font =
    gdk_font_load("-*-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*");
  if(ctk_gtksim_draw_font_normal.font != NULL) {
    printf("ctk-gtksim-service: Font loaded OK\n");
  } else {
    printf("ctk-gtksim-service: Font loading failed\n");
    exit(1);
  }

  ctk_gtksim_draw_font_bold.font =
    gdk_font_load("-*-helvetica-bold-r-*-*-10-*-*-*-*-*-*-*");
  if(ctk_gtksim_draw_font_bold.font != NULL) {
    printf("ctk-gtksim-service: Font loaded OK\n");
  } else {
    printf("ctk-gtksim-service: Font loading failed\n");
    exit(1);
  }

  ctk_gtksim_draw_font_menu.font =
    gdk_font_load("-*-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*");
  if(ctk_gtksim_draw_font_menu.font != NULL) {
    printf("ctk-gtksim-service: Font loaded OK\n");
  } else {
    printf("ctk-gtksim-service: Font loading failed\n");
    exit(1);
  }

  ctk_gtksim_draw_font_monospace.font =
    gdk_font_load("-*-courier-medium-r-*-*-*-120-*-*-*-*-*-*");
  if(ctk_gtksim_draw_font_monospace.font != NULL) {
    printf("ctk-gtksim-service: Font loaded OK\n");
  } else {
    printf("ctk-gtksim-service: Font loading failed\n");
    exit(1);
  }
  */
  ctk_gtksim_draw_color_blue.color = get_color(0, 0, 0xffff);
  ctk_gtksim_draw_color_white.color = get_color(0xffff, 0xffff, 0xffff);
  ctk_gtksim_draw_color_lightgray.color = get_color(0xefff, 0xefff, 0xefff);
  ctk_gtksim_draw_color_midgray.color = get_color(0xdfff, 0xdfff, 0xdfff);
  ctk_gtksim_draw_color_darkgray.color = get_color(0xcfff, 0xcfff, 0xcfff);
  ctk_gtksim_draw_color_ddarkgray.color = get_color(0xafff, 0xafff, 0xafff);
  ctk_gtksim_draw_color_black.color = get_color(0, 0, 0);

  layout = pango_layout_new(gtk_widget_get_pango_context(ctk_gtksim_drawing_area));

  ctk_gtksim_draw_font_normal.font =
      pango_font_description_from_string("Arial 8");
  ctk_gtksim_draw_font_bold.font =
      pango_font_description_from_string("Arial bold 8");
  ctk_gtksim_draw_font_menu.font =
      pango_font_description_from_string("Arial bold 9");
  ctk_gtksim_draw_font_monospace.font =
      pango_font_description_from_string("Monospace 8");
  ctk_gtksim_draw_font_monospace_bold.font =
      pango_font_description_from_string("Monospace bold 8");
  
  
}  
/*--------------------------------------------------------------------------*/