File: arrow-renderer.c

package info (click to toggle)
entity 1.0.1-8
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 5,604 kB
  • ctags: 5,394
  • sloc: ansic: 64,242; sh: 7,377; makefile: 776; perl: 319
file content (76 lines) | stat: -rw-r--r-- 2,077 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <gtk/gtk.h>
#include <stdlib.h>
#include "entity.h"
#include "gtk-common.h"
#include "gtk-widget-attr.h"


static gint
set_arrow_position (ENode * node, EBuf * attr, EBuf * value)
{
    GtkWidget *arrow;

    arrow = enode_get_kv (node, "top-widget");

    EDEBUG (("arrow-renderer", "setting arrow position to %i",
		value->str));

    if (ebuf_equal_str (value, "up"))
	gtk_arrow_set ((GtkArrow *) arrow, GTK_ARROW_UP, GTK_SHADOW_OUT);
    else if (ebuf_equal_str (value, "down"))
	gtk_arrow_set ((GtkArrow *) arrow, GTK_ARROW_DOWN, GTK_SHADOW_OUT);
    else if (ebuf_equal_str (value, "right"))
	gtk_arrow_set ((GtkArrow *) arrow, GTK_ARROW_RIGHT, GTK_SHADOW_OUT);
    else if (ebuf_equal_str (value, "left"))
	gtk_arrow_set ((GtkArrow *) arrow, GTK_ARROW_LEFT, GTK_SHADOW_OUT);
    else
	EDEBUG (("arrow-renderer", 
		    "value '%s' doesn't match 'up' 'down' 'right' or 'left'",
		    value->str));

    return TRUE;
}

static void
rendgtk_arrow_render (ENode * node)
{
    GtkWidget *arrow;

    EDEBUG (("arrow-renderer", "in rendgtk_arrow_render"));

    arrow = gtk_arrow_new (GTK_ARROW_UP, GTK_SHADOW_OUT);

    enode_set_kv (node, "top-widget", arrow);
    enode_set_kv (node, "bottom-widget", arrow);

    enode_attribs_sync (node);

    rendgtk_show_cond (node, arrow);
}


void
arrow_renderer_register (void)
{
    Element *element;
    ElementAttr *e_attr;

    element = g_new0 (Element, 1);
    element->render_func = rendgtk_arrow_render;
    element->destroy_func = rendgtk_element_destroy;
    element->parent_func = rendgtk_box_pack;
    element->tag = "arrow";
    element->description = "Create a new arrow widget";
    element_register (element);

    e_attr = g_new0 (ElementAttr, 1);
    e_attr->attribute = "position";
    e_attr->description = "Direction Arrow points in 90 degree increments";
    e_attr->value_desc = "choice";
    e_attr->possible_values = "up,down,left,right";
    e_attr->set_attr_func = set_arrow_position;
    element_register_attrib (element, e_attr);

    rendgtk_widget_attr_register (element, GTK_TYPE_ARROW);
}