summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2014-10-25 15:08:04 +0100
committerChris Young <chris@unsatisfactorysoftware.co.uk>2014-10-25 15:08:04 +0100
commitf5d866ab700534e86579952e5f74944bf57aa526 (patch)
treef92e9f8de84649a5742b30562934010aed94d9d6 /amiga
parent6034e69ad14b23eb808c713b6e40d4d96609e2f5 (diff)
downloadnetsurf-f5d866ab700534e86579952e5f74944bf57aa526.tar.gz
netsurf-f5d866ab700534e86579952e5f74944bf57aa526.tar.bz2
Rename OID_VSCROLL to GID_VSCROLL and ensure it exists before referencing
Diffstat (limited to 'amiga')
-rw-r--r--amiga/gui.c98
-rwxr-xr-xamiga/gui.h2
2 files changed, 76 insertions, 24 deletions
diff --git a/amiga/gui.c b/amiga/gui.c
index 2d790217e..558852a7a 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -3045,6 +3045,53 @@ void ami_gui_hotlist_update_all(void)
} while(node = nnode);
}
+static void ami_gui_vscroll_add(struct gui_window_2 *gwin)
+{
+ struct TagItem attrs[2];
+
+ if(gwin->objects[GID_VSCROLL] != NULL) return;
+
+ attrs[0].ti_Tag = CHILD_MinWidth;
+ attrs[0].ti_Data = 0;
+ attrs[1].ti_Tag = TAG_DONE;
+ attrs[1].ti_Data = 0;
+
+ gwin->objects[GID_VSCROLL] = ScrollerObject,
+ GA_ID, GID_VSCROLL,
+ GA_RelVerify, TRUE,
+ ICA_TARGET, ICTARGET_IDCMP,
+ ScrollerEnd;
+
+ IDoMethod(gwin->objects[GID_VSCROLLLAYOUT], LM_ADDCHILD,
+ gwin->win, gwin->objects[GID_VSCROLL], attrs);
+
+ FlushLayoutDomainCache((struct Gadget *)gwin->objects[GID_MAIN]);
+
+ RethinkLayout((struct Gadget *)gwin->objects[GID_MAIN],
+ gwin->win, NULL, TRUE);
+
+ if(gwin->bw) {
+ ami_schedule_redraw(gwin, true);
+ }
+}
+
+static void ami_gui_vscroll_remove(struct gui_window_2 *gwin)
+{
+ if(gwin->objects[GID_VSCROLL] == NULL) return;
+
+ IDoMethod(gwin->objects[GID_VSCROLLLAYOUT], LM_REMOVECHILD,
+ gwin->win, gwin->objects[GID_VSCROLL]);
+
+ FlushLayoutDomainCache((struct Gadget *)gwin->objects[GID_MAIN]);
+
+ RethinkLayout((struct Gadget *)gwin->objects[GID_MAIN],
+ gwin->win, NULL, TRUE);
+
+ ami_schedule_redraw(gwin, true);
+
+ gwin->objects[GID_VSCROLL] = NULL;
+}
+
void ami_toggletabbar(struct gui_window_2 *gwin, bool show)
{
if(ClickTabBase->lib_Version < 53) return;
@@ -3618,15 +3665,11 @@ gui_window_create(struct browser_window *bw,
CHILD_WeightedHeight,0,
LayoutEnd,
CHILD_WeightedHeight,0,
- LAYOUT_AddChild, HGroupObject,
+ LAYOUT_AddChild, g->shared->objects[GID_VSCROLLLAYOUT] = HGroupObject,
LAYOUT_AddChild, g->shared->objects[GID_BROWSER] = SpaceObject,
GA_ID,GID_BROWSER,
SPACE_Transparent,TRUE,
SpaceEnd,
- LAYOUT_AddChild, g->shared->objects[OID_VSCROLL] = ScrollerObject,
- GA_ID, OID_VSCROLL,
- GA_RelVerify, TRUE,
- ScrollerEnd,
EndGroup,
EndGroup,
EndWindow;
@@ -3673,9 +3716,10 @@ gui_window_create(struct browser_window *bw,
GA_ID,GID_BROWSER,
SPACE_Transparent,TRUE,
SpaceEnd,
- LAYOUT_AddChild, g->shared->objects[OID_VSCROLL] = ScrollerObject,
- GA_ID, OID_VSCROLL,
+ LAYOUT_AddChild, g->shared->objects[GID_VSCROLL] = ScrollerObject,
+ GA_ID, GID_VSCROLL,
GA_RelVerify, TRUE,
+ ICA_TARGET, ICTARGET_IDCMP,
ScrollerEnd,
EndGroup,
EndWindow;
@@ -3691,12 +3735,6 @@ gui_window_create(struct browser_window *bw,
return NULL;
}
- RefreshSetGadgetAttrs((struct Gadget *)(APTR)g->shared->objects[OID_VSCROLL],
- g->shared->win, NULL,
- GA_ID, OID_VSCROLL,
- ICA_TARGET, ICTARGET_IDCMP,
- TAG_DONE);
-
if(nsoption_bool(kiosk_mode) == false)
{
ULONG sz, size1, size2;
@@ -3793,6 +3831,8 @@ gui_window_create(struct browser_window *bw,
ScreenToFront(scrn);
+ami_gui_vscroll_add(g->shared);
+
return g;
}
@@ -3824,14 +3864,15 @@ static ULONG ami_get_border_gadget_balance(struct gui_window_2 *gwin, ULONG *siz
** a convenience.
*/
- ULONG sz;
+ ULONG sz = 30; /* temporary arbitrary value */
ULONG available_width;
float gad1percent;
/**TODO: This is getting the width of the vertical scroll bar, which is not
necessarily the same as the width of the size gadget that we are
- supposed to be accounting for. */
- GetAttr(GA_Width, gwin->objects[OID_VSCROLL], (ULONG *)&sz);
+ supposed to be accounting for. */
+ if(gwin->objects[GID_VSCROLL])
+ GetAttr(GA_Width, gwin->objects[GID_VSCROLL], (ULONG *)&sz);
available_width = gwin->win->Width - scrn->WBorLeft - sz;
@@ -4502,7 +4543,12 @@ void ami_get_hscroll_pos(struct gui_window_2 *gwin, ULONG *xs)
void ami_get_vscroll_pos(struct gui_window_2 *gwin, ULONG *ys)
{
- GetAttr(SCROLLER_Top, gwin->objects[OID_VSCROLL], ys);
+ if(gwin->objects[GID_VSCROLL]) {
+ GetAttr(SCROLLER_Top, gwin->objects[GID_VSCROLL], ys);
+ } else {
+ *ys = 0;
+ }
+
*ys /= gwin->bw->scale;
}
@@ -4541,10 +4587,12 @@ static void gui_window_set_scroll(struct gui_window *g, int sx, int sy)
if((cur_tab == g->tab) || (g->shared->tabs <= 1))
{
- RefreshSetGadgetAttrs((struct Gadget *)(APTR)g->shared->objects[OID_VSCROLL],
- g->shared->win, NULL,
- SCROLLER_Top, (ULONG)(sy * g->shared->bw->scale),
+ if(g->shared->objects[GID_VSCROLL]) {
+ RefreshSetGadgetAttrs((struct Gadget *)(APTR)g->shared->objects[GID_VSCROLL],
+ g->shared->win, NULL,
+ SCROLLER_Top, (ULONG)(sy * g->shared->bw->scale),
TAG_DONE);
+ }
if(g->shared->objects[GID_HSCROLL])
{
@@ -4607,10 +4655,12 @@ static void gui_window_update_extent(struct gui_window *g)
GetAttr(SPACE_AreaBox, g->shared->objects[GID_BROWSER],
(ULONG *)&bbox);
- RefreshSetGadgetAttrs((struct Gadget *)(APTR)g->shared->objects[OID_VSCROLL],g->shared->win,NULL,
- SCROLLER_Total, (ULONG)(content_get_height(g->shared->bw->current_content) * g->shared->bw->scale),
- SCROLLER_Visible, bbox->Height,
+ if(g->shared->objects[GID_VSCROLL]) {
+ RefreshSetGadgetAttrs((struct Gadget *)(APTR)g->shared->objects[GID_VSCROLL],g->shared->win,NULL,
+ SCROLLER_Total, (ULONG)(content_get_height(g->shared->bw->current_content) * g->shared->bw->scale),
+ SCROLLER_Visible, bbox->Height,
TAG_DONE);
+ }
if(g->shared->objects[GID_HSCROLL])
{
@@ -4868,7 +4918,7 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
{
case GID_HSCROLL:
case OID_HSCROLL:
- case OID_VSCROLL:
+ case GID_VSCROLL:
if(nsoption_bool(faster_scroll) == true) gwin->redraw_scroll = true;
else gwin->redraw_scroll = false;
diff --git a/amiga/gui.h b/amiga/gui.h
index 830ac95dd..ef6ea10c4 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -70,6 +70,8 @@ enum
GID_HOTLISTLAYOUT,
GID_HOTLISTSEPBAR,
GID_HSCROLL,
+ GID_VSCROLL,
+ GID_VSCROLLLAYOUT,
GID_LAST
};