label.c 940 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11
#include "gui.h"
#include "gui_defs.h"
#include "x.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void paint(gui *_gui, widget *_w)
{
  struct gui *g = _gui;
  struct label_widget *l = _w;
Cedric Roux's avatar
Cedric Roux committed
12
  LOGD("PAINT label '%s'\n", l->t);
13 14 15 16 17 18 19
  x_draw_string(g->x, g->xwin, l->color,
      l->common.x, l->common.y + l->baseline, l->t);
}

static void hints(gui *_gui, widget *_w, int *width, int *height)
{
  struct label_widget *l = _w;
Cedric Roux's avatar
Cedric Roux committed
20
  LOGD("HINTS label '%s'\n", l->t);
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
  *width = l->width;
  *height = l->height;
}

widget *new_label(gui *_gui, const char *label)
{
  struct gui *g = _gui;
  struct label_widget *w;

  glock(g);

  w = new_widget(g, LABEL, sizeof(struct label_widget));

  w->t = strdup(label);
  if (w->t == NULL) OOM;
  w->color = FOREGROUND_COLOR;

  x_text_get_dimensions(g->x, label, &w->width, &w->height, &w->baseline);

  w->common.paint = paint;
  w->common.hints = hints;

  gunlock(g);

  return w;
}