From ae36d35728f8622396faba7aeb58434aff2d0331 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Wed, 8 May 2019 00:56:07 +0100 Subject: throbber crap --- frontends/amiga/gui.c | 39 +++++++++++++++++++++++++++++++++++++++ frontends/amiga/gui.h | 21 +++++++++++++++++++++ frontends/amiga/theme.c | 20 ++++++++++---------- 3 files changed, 70 insertions(+), 10 deletions(-) (limited to 'frontends') diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c index 3920616e3..2132a2408 100644 --- a/frontends/amiga/gui.c +++ b/frontends/amiga/gui.c @@ -379,6 +379,45 @@ void ami_gui_set_throbbing(struct gui_window *gw, bool throbbing) gw->throbbing = throbbing; } +int ami_gui_get_throbber_frame(struct gui_window *gw) +{ + assert(gw != NULL); + assert(gw->shared != NULL); + return gw->shared->throbber_frame; +} + +void ami_gui_set_throbber_frame(struct gui_window *gw, int frame) +{ + assert(gw != NULL); + assert(gw->shared != NULL); + gw->shared->throbber_frame = frame; +} + +Object *ami_gui_get_object(struct gui_window *gw, int object_type) +{ + ULONG obj = 0; + + assert(gw != NULL); + assert(gw->shared != NULL); + + switch(object_type) { + case AMI_GAD_THROBBER: + obj = GID_THROBBER; + break; + + case AMI_GAD_TABS: + obj = GID_TABS; + break; + + default: + return NULL; + break; + } + + return gw->shared->objects[obj]; +} + + struct Window *ami_gui2_get_window(struct gui_window_2 *gwin) { assert(gwin != NULL); diff --git a/frontends/amiga/gui.h b/frontends/amiga/gui.h index e1042c517..bc1dc3903 100644 --- a/frontends/amiga/gui.h +++ b/frontends/amiga/gui.h @@ -38,6 +38,12 @@ #define HOOKF(ret,func,type,ptr,msgtype) static ASM ret func(REG(a0, struct Hook *hook),REG(a2, type ptr), REG(a1, msgtype msg)) #endif +/* valid options for ami_gui_get_object */ +enum { + AMI_GAD_THROBBER = 0, + AMI_GAD_TABS +}; + enum { OID_MAIN = 0, @@ -322,11 +328,26 @@ void ami_gui_set_find_window(struct gui_window *gw, struct find_window *fw); */ bool ami_gui_get_throbbing(struct gui_window *gw); +/** + * Get throbbing frame from gui_window + */ +int ami_gui_get_throbber_frame(struct gui_window *gw); + +/** + * Set throbbing frame in gui_window + */ +void ami_gui_set_throbber_frame(struct gui_window *gw, int frame); + /** * Set throbbing status in gui_window */ void ami_gui_set_throbbing(struct gui_window *gw, bool throbbing); +/** + * Get object from gui_window + */ +Object *ami_gui_get_object(struct gui_window *gw, int object_type); + /** * Get window from gui_window */ diff --git a/frontends/amiga/theme.c b/frontends/amiga/theme.c index c20d02527..900f465a1 100644 --- a/frontends/amiga/theme.c +++ b/frontends/amiga/theme.c @@ -432,13 +432,13 @@ void gui_window_start_throbber(struct gui_window *g) if(ami_gui_get_tab_node(g) && (ami_gui_get_gui_window_2(g)->tabs > 1)) { SetClickTabNodeAttrs(ami_gui_get_tab_node(g), TNA_Flagged, TRUE, TAG_DONE); - RefreshGadgets((APTR)ami_gui_get_gui_window_2(g)->objects[GID_TABS], + RefreshGadgets((APTR)ami_gui_get_object(g, AMI_GAD_TABS), ami_gui_get_window(g), NULL); } #endif ami_gui_set_throbbing(g, true); - if(ami_gui_get_gui_window_2(g)->throbber_frame == 0) ami_gui_get_gui_window_2(g)->throbber_frame = 1; + if(ami_gui_get_throbber_frame(g) == 0) ami_gui_set_throbber_frame(g, 1); ami_throbber_redraw_schedule(throbber_update_interval, g); } @@ -453,13 +453,13 @@ void gui_window_stop_throbber(struct gui_window *g) if(ami_gui_get_tab_node(g) && (ami_gui_get_gui_window_2(g)->tabs > 1)) { SetClickTabNodeAttrs(ami_gui_get_tab_node(g), TNA_Flagged, FALSE, TAG_DONE); - RefreshGadgets((APTR)ami_gui_get_gui_window_2(g)->objects[GID_TABS], + RefreshGadgets((APTR)ami_gui_get_object(g, AMI_GAD_TABS), ami_gui_get_window(g), NULL); } #endif if(IS_CURRENT_GW(ami_gui_get_gui_window_2(g), g)) { - if(ami_gui_get_space_box(ami_gui_get_gui_window_2(g)->objects[GID_THROBBER], &bbox) != NSERROR_OK) { + if(ami_gui_get_space_box(ami_gui_get_object(g, AMI_GAD_THROBBER), &bbox) != NSERROR_OK) { amiga_warn_user("NoMemory", ""); return; } @@ -484,17 +484,17 @@ static void ami_throbber_update(void *p) int frame = 0; if(!g) return; - if(!ami_gui_get_gui_window_2(g)->objects[GID_THROBBER]) return; + if(!ami_gui_get_object(g, AMI_GAD_THROBBER)) return; if(ami_gui_get_throbbing(g) == true) { - frame = ami_gui_get_gui_window_2(g)->throbber_frame; - ami_gui_get_gui_window_2(g)->throbber_frame++; - if(ami_gui_get_gui_window_2(g)->throbber_frame > (throbber_frames-1)) - ami_gui_get_gui_window_2(g)->throbber_frame=1; + frame = ami_gui_get_throbber_frame(g); + ami_gui_set_throbber_frame(g, frame + 1); + if(ami_gui_get_throbber_frame(g) > (throbber_frames-1)) + ami_gui_set_throbber_frame(g, 1); } if(IS_CURRENT_GW(ami_gui_get_gui_window_2(g),g)) { - if(ami_gui_get_space_box(ami_gui_get_gui_window_2(g)->objects[GID_THROBBER], &bbox) != NSERROR_OK) { + if(ami_gui_get_space_box(ami_gui_get_object(g, AMI_GAD_THROBBER), &bbox) != NSERROR_OK) { amiga_warn_user("NoMemory", ""); return; } -- cgit v1.2.3