view examples/svg2code_ex/main.c @ 88:dd813dcc232c

New example, calculator.
author Thinker K.F. Li <thinker@branda.to>
date Sat, 23 Aug 2008 15:26:47 +0800
parents 42698de1f653
children 565b55508c8d
line wrap: on
line source

#include <stdio.h>
#include <mb_types.h>
#include <X_supp.h>
#include "svg2code_ex.h"

typedef struct _ex_rt ex_rt_t;
struct _ex_rt {
    X_MB_runtime_t *rt;
    svg2code_ex_t *code;
};

static void file_button_handler(event_t *evt, void *arg) {
    ex_rt_t *ex_rt = (ex_rt_t *)arg;

    switch(evt->type) {
    case EVT_MOUSE_BUT_PRESS:
	coord_show(ex_rt->code->file_menu);
	rdman_coord_changed(ex_rt->rt->rdman, ex_rt->code->file_menu);
	rdman_redraw_changed(ex_rt->rt->rdman);
	break;
    }
}

static void file_menu_handler(event_t *evt, void *arg) {
    ex_rt_t *ex_rt = (ex_rt_t *)arg;

    switch(evt->type) {
    case EVT_MOUSE_BUT_PRESS:
	coord_hide(ex_rt->code->file_menu);
	rdman_coord_changed(ex_rt->rt->rdman, ex_rt->code->file_menu);
	rdman_redraw_changed(ex_rt->rt->rdman);
	break;
    }
}

int main(int argc, char * const argv[]) {
    X_MB_runtime_t rt;
    svg2code_ex_t *svg2code;
    ob_factory_t *factory;
    subject_t *subject;
    ex_rt_t ex_rt;
    int r;

    r = X_MB_init(":0.0", 800, 600, &rt);

    svg2code = svg2code_ex_new(rt.rdman);

    factory = rdman_get_ob_factory(rt.rdman);
    subject = coord_get_mouse_event(svg2code->file_button);
    ex_rt.rt = &rt;
    ex_rt.code = svg2code;
    subject_add_observer(factory, subject, file_button_handler, &ex_rt);
    subject = coord_get_mouse_event(svg2code->file_menu);
    subject_add_observer(factory, subject, file_menu_handler, &ex_rt);

    X_MB_handle_connection(&rt);

    svg2code_ex_free(svg2code);
    X_MB_destroy(&rt);

    return 0;
}