Mercurial > MadButterfly
comparison src/redraw_man.c @ 1060:e415c55b4a0d
Stop using ob as acronym observer
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Sun, 28 Nov 2010 12:59:05 +0800 |
parents | 36aef79d68e4 |
children | a8d20bc8ce40 |
comparison
equal
deleted
inserted
replaced
1059:36aef79d68e4 | 1060:e415c55b4a0d |
---|---|
368 | 368 |
369 extern void sh_dummy_transform(shape_t *shape); | 369 extern void sh_dummy_transform(shape_t *shape); |
370 extern void sh_dummy_fill(shape_t *, mbe_t *); | 370 extern void sh_dummy_fill(shape_t *, mbe_t *); |
371 #endif /* UNITTEST */ | 371 #endif /* UNITTEST */ |
372 | 372 |
373 static subject_t *ob_subject_alloc(ob_factory_t *factory); | 373 static subject_t *observer_subject_alloc(observer_factory_t *factory); |
374 static void ob_subject_free(ob_factory_t *factory, subject_t *subject); | 374 static void observer_subject_free(observer_factory_t *factory, |
375 static observer_t *ob_observer_alloc(ob_factory_t *factory); | 375 subject_t *subject); |
376 static void ob_observer_free(ob_factory_t *factory, observer_t *observer); | 376 static observer_t *observer_observer_alloc(observer_factory_t *factory); |
377 static subject_t *ob_get_parent_subject(ob_factory_t *factory, | 377 static void observer_observer_free(observer_factory_t *factory, |
378 subject_t *cur_subject); | 378 observer_t *observer); |
379 static subject_t *observer_get_parent_subject(observer_factory_t *factory, | |
380 subject_t *cur_subject); | |
379 /* Functions for children. */ | 381 /* Functions for children. */ |
380 #define FORCHILDREN(coord, child) \ | 382 #define FORCHILDREN(coord, child) \ |
381 for((child) = STAILQ_HEAD((coord)->children); \ | 383 for((child) = STAILQ_HEAD((coord)->children); \ |
382 (child) != NULL; \ | 384 (child) != NULL; \ |
383 (child) = STAILQ_NEXT(coord_t, sibling, (child))) | 385 (child) = STAILQ_NEXT(coord_t, sibling, (child))) |
708 if(!(rdman->geo_pool && rdman->coord_pool && rdman->shnode_pool && | 710 if(!(rdman->geo_pool && rdman->coord_pool && rdman->shnode_pool && |
709 rdman->observer_pool && rdman->subject_pool && | 711 rdman->observer_pool && rdman->subject_pool && |
710 rdman->paint_color_pool && rdman->coord_canvas_pool)) | 712 rdman->paint_color_pool && rdman->coord_canvas_pool)) |
711 goto err; | 713 goto err; |
712 | 714 |
713 rdman->ob_factory.subject_alloc = ob_subject_alloc; | 715 rdman->observer_factory.subject_alloc = observer_subject_alloc; |
714 rdman->ob_factory.subject_free = ob_subject_free; | 716 rdman->observer_factory.subject_free = observer_subject_free; |
715 rdman->ob_factory.observer_alloc = ob_observer_alloc; | 717 rdman->observer_factory.observer_alloc = observer_observer_alloc; |
716 rdman->ob_factory.observer_free = ob_observer_free; | 718 rdman->observer_factory.observer_free = observer_observer_free; |
717 rdman->ob_factory.get_parent_subject = ob_get_parent_subject; | 719 rdman->observer_factory.get_parent_subject = observer_get_parent_subject; |
718 | 720 |
719 rdman->redraw = | 721 rdman->redraw = |
720 subject_new(&rdman->ob_factory, rdman, OBJT_RDMAN); | 722 subject_new(&rdman->observer_factory, rdman, OBJT_RDMAN); |
721 rdman->addrm_monitor = | 723 rdman->addrm_monitor = |
722 subject_new(&rdman->ob_factory, rdman, OBJT_RDMAN); | 724 subject_new(&rdman->observer_factory, rdman, OBJT_RDMAN); |
723 if(!(rdman->redraw && rdman->addrm_monitor)) | 725 if(!(rdman->redraw && rdman->addrm_monitor)) |
724 goto err; | 726 goto err; |
725 | 727 |
726 addrm_ob = subject_add_observer(rdman->addrm_monitor, | 728 addrm_ob = subject_add_observer(rdman->addrm_monitor, |
727 addrm_monitor_hdlr, rdman); | 729 addrm_monitor_hdlr, rdman); |
734 if(rdman->root_coord == NULL) | 736 if(rdman->root_coord == NULL) |
735 redraw_man_destroy(rdman); | 737 redraw_man_destroy(rdman); |
736 rdman->n_coords = 1; | 738 rdman->n_coords = 1; |
737 coord_init(rdman->root_coord, NULL); | 739 coord_init(rdman->root_coord, NULL); |
738 mb_prop_store_init(&rdman->root_coord->obj.props, rdman->pent_pool); | 740 mb_prop_store_init(&rdman->root_coord->obj.props, rdman->pent_pool); |
739 rdman->root_coord->mouse_event = subject_new(&rdman->ob_factory, | 741 rdman->root_coord->mouse_event = subject_new(&rdman->observer_factory, |
740 rdman->root_coord, | 742 rdman->root_coord, |
741 OBJT_COORD); | 743 OBJT_COORD); |
742 coord_set_flags(rdman->root_coord, COF_OWN_CANVAS); | 744 coord_set_flags(rdman->root_coord, COF_OWN_CANVAS); |
743 rdman->root_coord->canvas_info = | 745 rdman->root_coord->canvas_info = |
744 coord_canvas_info_new(rdman, rdman->root_coord, cr); | 746 coord_canvas_info_new(rdman, rdman->root_coord, cr); |
884 geo = elmpool_elm_alloc(rdman->geo_pool); | 886 geo = elmpool_elm_alloc(rdman->geo_pool); |
885 if(geo == NULL) | 887 if(geo == NULL) |
886 return ERR; | 888 return ERR; |
887 | 889 |
888 geo_init(geo); | 890 geo_init(geo); |
889 geo->mouse_event = subject_new(&rdman->ob_factory, geo, OBJT_GEO); | 891 geo->mouse_event = subject_new(&rdman->observer_factory, geo, OBJT_GEO); |
890 subject_set_monitor(geo->mouse_event, rdman->addrm_monitor); | 892 subject_set_monitor(geo->mouse_event, rdman->addrm_monitor); |
891 | 893 |
892 geo_attach_coord(geo, coord); | 894 geo_attach_coord(geo, coord); |
893 | 895 |
894 /* New one should be dirty to recompute it when drawing. */ | 896 /* New one should be dirty to recompute it when drawing. */ |
1032 if(coord == NULL) | 1034 if(coord == NULL) |
1033 return NULL; | 1035 return NULL; |
1034 | 1036 |
1035 coord_init(coord, parent); | 1037 coord_init(coord, parent); |
1036 mb_prop_store_init(&coord->obj.props, rdman->pent_pool); | 1038 mb_prop_store_init(&coord->obj.props, rdman->pent_pool); |
1037 coord->mouse_event = subject_new(&rdman->ob_factory, | 1039 coord->mouse_event = subject_new(&rdman->observer_factory, |
1038 coord, | 1040 coord, |
1039 OBJT_COORD); | 1041 OBJT_COORD); |
1040 subject_set_monitor(coord->mouse_event, rdman->addrm_monitor); | 1042 subject_set_monitor(coord->mouse_event, rdman->addrm_monitor); |
1041 /*! \note default opacity == 1 */ | 1043 /*! \note default opacity == 1 */ |
1042 coord->opacity = 1; | 1044 coord->opacity = 1; |
2617 /* \defgroup rdman_observer Observer memory management | 2619 /* \defgroup rdman_observer Observer memory management |
2618 * | 2620 * |
2619 * Implment factory and strategy functions for observers and subjects. | 2621 * Implment factory and strategy functions for observers and subjects. |
2620 * @{ | 2622 * @{ |
2621 */ | 2623 */ |
2622 static subject_t *ob_subject_alloc(ob_factory_t *factory) { | 2624 static subject_t *observer_subject_alloc(observer_factory_t *factory) { |
2623 redraw_man_t *rdman; | 2625 redraw_man_t *rdman; |
2624 subject_t *subject; | 2626 subject_t *subject; |
2625 | 2627 |
2626 rdman = MEM2OBJ(factory, redraw_man_t, ob_factory); | 2628 rdman = MEM2OBJ(factory, redraw_man_t, observer_factory); |
2627 subject = elmpool_elm_alloc(rdman->subject_pool); | 2629 subject = elmpool_elm_alloc(rdman->subject_pool); |
2628 | 2630 |
2629 return subject; | 2631 return subject; |
2630 } | 2632 } |
2631 | 2633 |
2632 static void ob_subject_free(ob_factory_t *factory, subject_t *subject) { | 2634 static void |
2635 observer_subject_free(observer_factory_t *factory, subject_t *subject) { | |
2633 redraw_man_t *rdman; | 2636 redraw_man_t *rdman; |
2634 | 2637 |
2635 rdman = MEM2OBJ(factory, redraw_man_t, ob_factory); | 2638 rdman = MEM2OBJ(factory, redraw_man_t, observer_factory); |
2636 elmpool_elm_free(rdman->subject_pool, subject); | 2639 elmpool_elm_free(rdman->subject_pool, subject); |
2637 } | 2640 } |
2638 | 2641 |
2639 static observer_t *ob_observer_alloc(ob_factory_t *factory) { | 2642 static observer_t *observer_observer_alloc(observer_factory_t *factory) { |
2640 redraw_man_t *rdman; | 2643 redraw_man_t *rdman; |
2641 observer_t *observer; | 2644 observer_t *observer; |
2642 | 2645 |
2643 rdman = MEM2OBJ(factory, redraw_man_t, ob_factory); | 2646 rdman = MEM2OBJ(factory, redraw_man_t, observer_factory); |
2644 observer = elmpool_elm_alloc(rdman->observer_pool); | 2647 observer = elmpool_elm_alloc(rdman->observer_pool); |
2645 | 2648 |
2646 return observer; | 2649 return observer; |
2647 } | 2650 } |
2648 | 2651 |
2649 static void ob_observer_free(ob_factory_t *factory, observer_t *observer) { | 2652 static void |
2653 observer_observer_free(observer_factory_t *factory, observer_t *observer) { | |
2650 redraw_man_t *rdman; | 2654 redraw_man_t *rdman; |
2651 | 2655 |
2652 rdman = MEM2OBJ(factory, redraw_man_t, ob_factory); | 2656 rdman = MEM2OBJ(factory, redraw_man_t, observer_factory); |
2653 elmpool_elm_free(rdman->observer_pool, observer); | 2657 elmpool_elm_free(rdman->observer_pool, observer); |
2654 } | 2658 } |
2655 | 2659 |
2656 static subject_t *ob_get_parent_subject(ob_factory_t *factory, | 2660 static subject_t * |
2657 subject_t *cur_subject) { | 2661 observer_get_parent_subject(observer_factory_t *factory, |
2662 subject_t *cur_subject) { | |
2658 redraw_man_t *rdman; | 2663 redraw_man_t *rdman; |
2659 coord_t *coord, *parent_coord; | 2664 coord_t *coord, *parent_coord; |
2660 geo_t *geo; | 2665 geo_t *geo; |
2661 subject_t *parent; | 2666 subject_t *parent; |
2662 | 2667 |
2663 rdman = MEM2OBJ(factory, redraw_man_t, ob_factory); | 2668 rdman = MEM2OBJ(factory, redraw_man_t, observer_factory); |
2664 switch(cur_subject->obj_type) { | 2669 switch(cur_subject->obj_type) { |
2665 case OBJT_GEO: | 2670 case OBJT_GEO: |
2666 geo = (geo_t *)cur_subject->obj; | 2671 geo = (geo_t *)cur_subject->obj; |
2667 parent_coord = geo->shape->coord; | 2672 parent_coord = geo->shape->coord; |
2668 parent = parent_coord->mouse_event; | 2673 parent = parent_coord->mouse_event; |