summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2008-12-26 19:04:57 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2008-12-26 19:04:57 +0000
commitdbc6d8793f7069815a049a07d0be6f8d3a1a01d5 (patch)
tree7ee0d1615099a57928e4405a32b1907b0e7efff1
parentb4e80b4d3a14e9b0e91965ab8ac67f4e1a5640ac (diff)
downloadnetsurf-dbc6d8793f7069815a049a07d0be6f8d3a1a01d5.tar.gz
netsurf-dbc6d8793f7069815a049a07d0be6f8d3a1a01d5.tar.bz2
Reduce memory usage
svn path=/trunk/netsurf/; revision=5926
-rwxr-xr-xamiga/gui.c131
-rwxr-xr-xamiga/gui.h15
2 files changed, 79 insertions, 67 deletions
diff --git a/amiga/gui.c b/amiga/gui.c
index dac6f8d25..fb6faf2ef 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -113,7 +113,7 @@ ULONG throbber_width,throbber_height,throbber_frames;
BOOL rmbtrapped;
BOOL locked_screen = FALSE;
-static struct RastPort dummyrp;
+//static struct RastPort dummyrp;
#define AMI_LASTPOINTER GUI_POINTER_PROGRESS+1
Object *mouseptrobj[AMI_LASTPOINTER+1];
@@ -434,13 +434,14 @@ void gui_init2(int argc, char** argv)
ami_fetch_file_register();
ami_fetch_mailto_register();
+/*
InitRastPort(&dummyrp);
dummyrp.BitMap = p96AllocBitMap(1,1,32,
BMF_CLEAR | BMF_DISPLAYABLE | BMF_INTERLEAVED,
NULL,RGBFB_A8R8G8B8);
if(!dummyrp.BitMap) die(messages_get("NoMemory"));
-
+*/
if(notalreadyrunning)
{
if((option_modeid) && (option_modeid[0] != '\0'))
@@ -493,6 +494,52 @@ void gui_init2(int argc, char** argv)
}
}
+/* init shared bitmaps */
+ glob.bm = p96AllocBitMap(scrn->Width,scrn->Height,32,
+ BMF_CLEAR | BMF_DISPLAYABLE | BMF_INTERLEAVED,
+ NULL, //gwin->shared->win->RPort->BitMap,
+ RGBFB_A8R8G8B8);
+
+ if(!glob.bm)
+ {
+ warn_user("NoMemory","");
+ //browser_window_destroy(bw);
+ //return NULL;
+ }
+
+ InitRastPort(&glob.rp);
+ glob.rp.BitMap = glob.bm;
+ SetDrMd(&glob.rp,BGBACKFILL);
+
+ glob.layerinfo = NewLayerInfo();
+ glob.rp.Layer = CreateUpfrontLayer(glob.layerinfo,glob.bm,0,0,scrn->Width-1,scrn->Height-1,0,NULL);
+
+ glob.areabuf = AllocVec(100,MEMF_PRIVATE | MEMF_CLEAR);
+ glob.rp.AreaInfo = AllocVec(sizeof(struct AreaInfo),MEMF_PRIVATE | MEMF_CLEAR);
+
+ if((!glob.areabuf) || (!glob.rp.AreaInfo))
+ {
+ warn_user("NoMemory","");
+ //browser_window_destroy(bw);
+ //return NULL;
+ }
+
+ InitArea(glob.rp.AreaInfo,glob.areabuf,100/5);
+ glob.rp.TmpRas = AllocVec(sizeof(struct TmpRas),MEMF_PRIVATE | MEMF_CLEAR);
+ glob.tmprasbuf = AllocVec(scrn->Width*scrn->Height,MEMF_PRIVATE | MEMF_CLEAR);
+
+ if((!glob.tmprasbuf) || (!glob.rp.TmpRas))
+ {
+ warn_user("NoMemory","");
+ //browser_window_destroy(bw);
+ //return NULL;
+ }
+
+ InitTmpRas(glob.rp.TmpRas,glob.tmprasbuf,scrn->Width*scrn->Height);
+
+ currp = &glob.rp;
+/* init shared bitmaps */
+
if(argc) // argc==0 is started from wb
{
if(args = ReadArgs(template,rarray,NULL))
@@ -1228,11 +1275,20 @@ void gui_quit(void)
ami_arexx_cleanup();
+ DeleteLayer(0,glob.rp.Layer);
+ DisposeLayerInfo(glob.layerinfo);
+ p96FreeBitMap(glob.bm);
+ FreeVec(glob.rp.TmpRas);
+ FreeVec(glob.rp.AreaInfo);
+ FreeVec(glob.tmprasbuf);
+ FreeVec(glob.areabuf);
+
if(!locked_screen) /* set if we are using somebody else's screen */
{
while(!CloseScreen(scrn));
}
- p96FreeBitMap(dummyrp.BitMap);
+// p96FreeBitMap(dummyrp.BitMap);
+
FreeVec(nsscreentitle);
if(option_context_menu) ami_context_menu_free();
@@ -1711,49 +1767,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
}
gwin->shared->bw = bw;
- currp = &gwin->shared->rp; // WINDOW.CLASS: &gwin->rp; //gwin->win->RPort;
-
- gwin->shared->bm = p96AllocBitMap(scrn->Width,scrn->Height,32,
- BMF_CLEAR | BMF_DISPLAYABLE | BMF_INTERLEAVED,
- gwin->shared->win->RPort->BitMap,
- RGBFB_A8R8G8B8);
-
- if(!gwin->shared->bm)
- {
- warn_user("NoMemory","");
- browser_window_destroy(bw);
- return NULL;
- }
-
- InitRastPort(&gwin->shared->rp);
- gwin->shared->rp.BitMap = gwin->shared->bm;
- SetDrMd(&gwin->shared->rp,BGBACKFILL);
-
- gwin->shared->layerinfo = NewLayerInfo();
- gwin->shared->rp.Layer = CreateUpfrontLayer(gwin->shared->layerinfo,gwin->shared->bm,0,0,scrn->Width-1,scrn->Height-1,0,NULL);
-
- gwin->shared->areabuf = AllocVec(100,MEMF_PRIVATE | MEMF_CLEAR);
- gwin->shared->rp.AreaInfo = AllocVec(sizeof(struct AreaInfo),MEMF_PRIVATE | MEMF_CLEAR);
-
- if((!gwin->shared->areabuf) || (!gwin->shared->rp.AreaInfo))
- {
- warn_user("NoMemory","");
- browser_window_destroy(bw);
- return NULL;
- }
-
- InitArea(gwin->shared->rp.AreaInfo,gwin->shared->areabuf,100/5);
- gwin->shared->rp.TmpRas = AllocVec(sizeof(struct TmpRas),MEMF_PRIVATE | MEMF_CLEAR);
- gwin->shared->tmprasbuf = AllocVec(scrn->Width*scrn->Height,MEMF_PRIVATE | MEMF_CLEAR);
-
- if((!gwin->shared->tmprasbuf) || (!gwin->shared->rp.TmpRas))
- {
- warn_user("NoMemory","");
- browser_window_destroy(bw);
- return NULL;
- }
-
- InitTmpRas(gwin->shared->rp.TmpRas,gwin->shared->tmprasbuf,scrn->Width*scrn->Height);
+ //currp = &glob.rp; // WINDOW.CLASS: &gwin->rp; //gwin->win->RPort;
// GetRPAttrs(&gwin->rp,RPTAG_Font,&origrpfont,TAG_DONE);
@@ -1812,7 +1826,7 @@ void gui_window_destroy(struct gui_window *g)
if(!g) return;
- currp = &dummyrp;
+// currp = &dummyrp;
if(g->shared->tabs > 1)
{
@@ -1842,13 +1856,6 @@ void gui_window_destroy(struct gui_window *g)
if(g->shared->searchwin) ami_search_close();
DisposeObject(g->shared->objects[OID_MAIN]);
- DeleteLayer(0,g->shared->rp.Layer);
- DisposeLayerInfo(g->shared->layerinfo);
- p96FreeBitMap(g->shared->bm);
- FreeVec(g->shared->rp.TmpRas);
- FreeVec(g->shared->rp.AreaInfo);
- FreeVec(g->shared->tmprasbuf);
- FreeVec(g->shared->areabuf);
DelObject(g->shared->node);
if(g->tab_node)
{
@@ -1947,7 +1954,7 @@ void gui_window_update_box(struct gui_window *g,
current_redraw_browser = g->shared->bw;
- currp = &g->shared->rp;
+ currp = &glob.rp;
width=bbox->Width;
height=bbox->Height;
@@ -1972,11 +1979,11 @@ void gui_window_update_box(struct gui_window *g,
0xFFFFFF);
current_redraw_browser = NULL;
- currp = &dummyrp;
+// currp = &dummyrp;
ami_update_buttons(g->shared);
- BltBitMapRastPort(g->shared->bm,0,0,g->shared->win->RPort,xoffset,yoffset,width,height,0x0C0); // this blit needs optimising
+ BltBitMapRastPort(glob.bm,0,0,g->shared->win->RPort,xoffset,yoffset,width,height,0x0C0); // this blit needs optimising
/* doing immediate redraw here for now
g->shared->redraw_required = true;
@@ -2005,7 +2012,7 @@ void ami_do_redraw(struct gui_window_2 *g)
current_redraw_browser = g->bw;
- currp = &g->rp;
+ currp = &glob.rp;
width=bbox->Width;
height=bbox->Height;
@@ -2045,14 +2052,14 @@ void ami_do_redraw(struct gui_window_2 *g)
// }
current_redraw_browser = NULL;
- currp = &dummyrp;
+// currp = &dummyrp;
ami_update_buttons(g);
- BltBitMapRastPort(g->bm,0,0,g->win->RPort,xoffset,yoffset,width,height,0x0C0);
+ BltBitMapRastPort(glob.bm,0,0,g->win->RPort,xoffset,yoffset,width,height,0x0C0);
- reg = InstallClipRegion(g->rp.Layer,NULL);
+ reg = InstallClipRegion(glob.rp.Layer,NULL);
if(reg) DisposeRegion(reg);
// DeleteLayer(0,g->rp.Layer);
@@ -2460,7 +2467,7 @@ void gui_window_remove_caret(struct gui_window *g)
GetAttr(SCROLLER_Top,g->shared->objects[OID_HSCROLL],(ULONG *)&xs);
GetAttr(SCROLLER_Top,g->shared->objects[OID_VSCROLL],(ULONG *)&ys);
- BltBitMapRastPort(g->shared->bm,g->c_x,g->c_y,g->shared->win->RPort,bbox->Left+g->c_x-xs,bbox->Top+g->c_y-ys,2+1,g->c_h+1,0x0C0);
+ BltBitMapRastPort(glob.bm,g->c_x,g->c_y,g->shared->win->RPort,bbox->Left+g->c_x-xs,bbox->Top+g->c_y-ys,2+1,g->c_h+1,0x0C0);
g->c_h = 0;
}
diff --git a/amiga/gui.h b/amiga/gui.h
index d2c12e96d..66e42482f 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -91,11 +91,6 @@ struct gui_window_2 {
struct List tab_list;
ULONG tabs;
ULONG next_tab;
- struct BitMap *bm;
- struct RastPort rp;
- struct Layer_Info *layerinfo;
- APTR areabuf;
- APTR tmprasbuf;
struct Hook scrollerhook;
struct Hook popuphook;
struct form_control *control;
@@ -119,6 +114,15 @@ struct gui_window
struct browser_window *bw; // not used
};
+struct gui_globals
+{
+ struct BitMap *bm;
+ struct RastPort rp;
+ struct Layer_Info *layerinfo;
+ APTR areabuf;
+ APTR tmprasbuf;
+};
+
void ami_get_msg(void);
void ami_update_pointer(struct Window *win, gui_pointer_shape shape);
void ami_close_all_tabs(struct gui_window_2 *gwin);
@@ -134,4 +138,5 @@ struct FileRequester *filereq;
struct MsgPort *sport;
bool win_destroyed;
struct browser_window *curbw;
+struct gui_globals glob;
#endif