mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-23 12:36:51 +03:00
option_screen_compositing to enable switching compositing for NetSurf's own
screen on/off. Some experimentation with compositing and simple/smart refresh reveals that simple refresh windows with compositing on for the screen behave the same as smart refresh windows. Smart refresh windows with compositing off use more gfx memory than when compositing is on. Simple refresh windows with compositing off will probably be more memory efficient, as we are using an off-screen bitmap to render the browsing area anyway. However due to this bitmap being re-used over multiple tabs/windows, it does not always reflect what should be on the window, so performing a redraw of damaged areas may be the only option. Need to read damaged regions from layer (probably through struct Region *DamageList) and check on performance vs memory or make the window refresh type configurable. Simple refresh code #ifdefed out for now for further investigation later. svn path=/trunk/netsurf/; revision=13464
This commit is contained in:
parent
9478f01828
commit
b517cf331a
@ -5,7 +5,7 @@
|
||||
CFLAGS += -std=c99 -I . -Dnsamiga
|
||||
|
||||
ifneq ($(SUBTARGET),os3)
|
||||
CFLAGS += -N -U__STRICT_ANSI__ -D__USE_INLINE__ -D__USE_BASETYPE__
|
||||
CFLAGS += -U__STRICT_ANSI__ -D__USE_INLINE__ -D__USE_BASETYPE__
|
||||
endif
|
||||
|
||||
NETSURF_FEATURE_ROSPRITE_CFLAGS := -DWITH_NSSPRITE
|
||||
|
66
amiga/gui.c
66
amiga/gui.c
@ -16,6 +16,9 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* define this to use simple (as opposed to smart) refresh windows */
|
||||
#undef AMI_SIMPLEREFRESH
|
||||
|
||||
/* NetSurf core includes */
|
||||
#include "content/urldb.h"
|
||||
#include "css/utils.h"
|
||||
@ -563,6 +566,12 @@ void gui_init(int argc, char** argv)
|
||||
void ami_openscreen(void)
|
||||
{
|
||||
ULONG id = 0;
|
||||
ULONG compositing;
|
||||
|
||||
if(option_screen_compositing == -1)
|
||||
compositing = ~0UL;
|
||||
else compositing = option_screen_compositing;
|
||||
|
||||
if(!option_use_pubscreen || option_use_pubscreen[0] == '\0')
|
||||
{
|
||||
if((option_modeid) && (strncmp(option_modeid,"0x",2) == 0))
|
||||
@ -595,6 +604,7 @@ void ami_openscreen(void)
|
||||
SA_Type, PUBLICSCREEN,
|
||||
SA_PubName, "NetSurf",
|
||||
SA_LikeWorkbench, TRUE,
|
||||
SA_Compositing, compositing,
|
||||
TAG_DONE);
|
||||
|
||||
if(scrn)
|
||||
@ -2527,7 +2537,6 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
|
||||
gwin->shared->search_ico_hook.h_Entry = (void *)ami_set_search_ico_render_hook;
|
||||
gwin->shared->search_ico_hook.h_Data = gwin->shared;
|
||||
|
||||
|
||||
if(!option_kiosk_mode)
|
||||
{
|
||||
ULONG addtabclosegadget = TAG_IGNORE;
|
||||
@ -2659,13 +2668,18 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw,
|
||||
IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE |
|
||||
IDCMP_RAWKEY | IDCMP_SIZEVERIFY |
|
||||
IDCMP_GADGETUP | IDCMP_IDCMPUPDATE |
|
||||
IDCMP_ACTIVEWINDOW | // IDCMP_INTUITICKS |
|
||||
IDCMP_EXTENDEDMOUSE,
|
||||
#ifdef AMI_SIMPLEREFRESH
|
||||
IDCMP_REFRESHWINDOW |
|
||||
#endif
|
||||
IDCMP_ACTIVEWINDOW | IDCMP_EXTENDEDMOUSE,
|
||||
WINDOW_IconifyGadget, iconifygadget,
|
||||
WINDOW_NewMenu, gwin->shared->menu,
|
||||
WINDOW_VertProp,1,
|
||||
WINDOW_IDCMPHook,&gwin->shared->scrollerhook,
|
||||
WINDOW_IDCMPHookBits,IDCMP_IDCMPUPDATE |
|
||||
WINDOW_IDCMPHookBits, IDCMP_IDCMPUPDATE |
|
||||
#ifdef AMI_SIMPLEREFRESH
|
||||
IDCMP_REFRESHWINDOW |
|
||||
#endif
|
||||
IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY,
|
||||
WINDOW_AppPort, appport,
|
||||
WINDOW_AppWindow,TRUE,
|
||||
@ -3485,6 +3499,43 @@ void ami_do_redraw(struct gui_window_2 *g)
|
||||
g->new_content = false;
|
||||
}
|
||||
|
||||
#if AMI_SIMPLEREFRESH
|
||||
// simplerefresh only
|
||||
|
||||
void ami_refresh_window(struct gui_window_2 *gwin)
|
||||
{
|
||||
struct IBox *bbox;
|
||||
int x0, x1, y0, y1;
|
||||
|
||||
GetAttr(SPACE_AreaBox, (Object *)gwin->objects[GID_BROWSER], (ULONG *)&bbox);
|
||||
|
||||
BeginRefresh(gwin->win);
|
||||
|
||||
// probably need to trawl through struct Region *DamageList
|
||||
x0 = gwin->win->RPort->Layer->bounds.MinX;
|
||||
x1 = gwin->win->RPort->Layer->bounds.MaxX;
|
||||
y0 = gwin->win->RPort->Layer->bounds.MinY;
|
||||
y1 = gwin->win->RPort->Layer->bounds.MaxY;
|
||||
|
||||
ami_do_redraw_limits(gwin->bw->window, gwin->bw, x0, y0, x1, y1);
|
||||
|
||||
/* quick refresh - scuppered by shared offscreen bitmap
|
||||
BltBitMapTags(BLITA_SrcType, BLITT_BITMAP,
|
||||
BLITA_Source, browserglob.bm,
|
||||
BLITA_SrcX, 0,
|
||||
BLITA_SrcY, 0,
|
||||
BLITA_DestType, BLITT_RASTPORT,
|
||||
BLITA_Dest, gwin->win->RPort,
|
||||
BLITA_DestX, bbox->Left,
|
||||
BLITA_DestY, bbox->Top,
|
||||
BLITA_Width, bbox->Width,
|
||||
BLITA_Height, bbox->Height,
|
||||
TAG_DONE);
|
||||
*/
|
||||
EndRefresh(gwin->win, TRUE);
|
||||
}
|
||||
#endif
|
||||
|
||||
void ami_get_hscroll_pos(struct gui_window_2 *gwin, ULONG *xs)
|
||||
{
|
||||
if(gwin->objects[GID_HSCROLL])
|
||||
@ -3950,6 +4001,13 @@ void ami_scroller_hook(struct Hook *hook,Object *object,struct IntuiMessage *msg
|
||||
|
||||
case IDCMP_SIZEVERIFY:
|
||||
break;
|
||||
|
||||
#if AMI_SIMPLEREFRESH
|
||||
case IDCMP_REFRESHWINDOW:
|
||||
printf("refreshing\n");
|
||||
ami_refresh_window(gwin);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
// ReplyMsg((struct Message *)msg);
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ extern char *option_url_file;
|
||||
extern char *option_hotlist_file;
|
||||
extern char *option_use_pubscreen;
|
||||
extern char *option_modeid;
|
||||
extern int option_screen_compositing;
|
||||
extern int option_cache_bitmaps;
|
||||
extern char *option_theme;
|
||||
extern bool option_utf8_clipboard;
|
||||
@ -74,6 +75,7 @@ char *option_url_file = 0; \
|
||||
char *option_hotlist_file = 0; \
|
||||
char *option_use_pubscreen = 0; \
|
||||
char *option_modeid = 0; \
|
||||
extern int option_screen_compositing = -1; \
|
||||
int option_cache_bitmaps = 0; \
|
||||
char *option_theme = 0; \
|
||||
bool option_utf8_clipboard = false; \
|
||||
@ -124,6 +126,7 @@ int option_menu_refresh = 0; \
|
||||
{ "hotlist_file", OPTION_STRING, &option_hotlist_file }, \
|
||||
{ "use_pubscreen", OPTION_STRING, &option_use_pubscreen}, \
|
||||
{ "screen_modeid", OPTION_STRING, &option_modeid}, \
|
||||
{ "screen_compositing", OPTION_INTEGER, &option_screen_compositing}, \
|
||||
{ "cache_bitmaps", OPTION_INTEGER, &option_cache_bitmaps}, \
|
||||
{ "theme", OPTION_STRING, &option_theme}, \
|
||||
{ "clipboard_write_utf8", OPTION_BOOL, &option_utf8_clipboard}, \
|
||||
|
Loading…
Reference in New Issue
Block a user