Gitweb links:

...log 
http://git.netsurf-browser.org/netsurf.git/shortlog/d577a48bb7cce5f88904e86499906ade86809d8a
...commit 
http://git.netsurf-browser.org/netsurf.git/commit/d577a48bb7cce5f88904e86499906ade86809d8a
...tree 
http://git.netsurf-browser.org/netsurf.git/tree/d577a48bb7cce5f88904e86499906ade86809d8a

The branch, chris/palette-mapped-plotters has been updated
       via  d577a48bb7cce5f88904e86499906ade86809d8a (commit)
       via  337b0f6724144800b9d226e1f949642ec200b511 (commit)
      from  34154ebb99c9ce199e6c9c9ed5993e017023c697 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/netsurf.git/commitdiff/d577a48bb7cce5f88904e86499906ade86809d8a
commit d577a48bb7cce5f88904e86499906ade86809d8a
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>

    Abstract pen obtain/release and structure so we can add these to a physical 
browser window's list

diff --git a/amiga/gui.c b/amiga/gui.c
index ee15ee9..347fcde 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2209,6 +2209,7 @@ void ami_switch_tab(struct gui_window_2 *gwin,bool redraw)
                return;
        }
 
+       ami_plot_release_pens(&g->shared->shared_pens);
        ami_update_buttons(gwin);
        ami_menu_update_disabled(gwin->bw->window, gwin->bw->current_content);
 
@@ -2574,6 +2575,8 @@ struct gui_window *gui_create_browser_window(struct 
browser_window *bw,
                return NULL;
        }
 
+       NewList(&g->shared->shared_pens);
+       
        g->shared->scrollerhook.h_Entry = (void *)ami_scroller_hook;
        g->shared->scrollerhook.h_Data = g->shared;
 
@@ -3182,6 +3185,8 @@ void gui_window_destroy(struct gui_window *g)
                return;
        }
 
+       ami_plot_release_pens(&g->shared->shared_pens);
+
        DisposeObject(g->shared->objects[OID_MAIN]);
        ami_gui_appicon_remove(g->shared);
        if(g->shared->appwin) RemoveAppWindow(g->shared->appwin);
@@ -3280,6 +3285,8 @@ void ami_do_redraw_tiled(struct gui_window_2 *gwin,
        int tile_x_scale = (int)(nsoption_int(redraw_tile_size_x) / 
gwin->bw->scale);
        int tile_y_scale = (int)(nsoption_int(redraw_tile_size_y) / 
gwin->bw->scale);
 
+       browserglob.shared_pens = &gwin->shared_pens;
+       
        if(top < 0) {
                height += top;
                top = 0;
@@ -3997,7 +4004,7 @@ void gui_window_new_content(struct gui_window *g)
        g->shared->oldh = 0;
        g->shared->oldv = 0;
        g->favicon = NULL;
-
+       ami_plot_release_pens(&g->shared->shared_pens);
        ami_menu_update_disabled(g, c);
 }
 
diff --git a/amiga/gui.h b/amiga/gui.h
index 01588c7..013be50 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -112,6 +112,7 @@ struct gui_window_2 {
        gui_drag_type drag_op;
        struct IBox *ptr_lock;
        struct AppWindow *appwin;
+       struct MinList shared_pens;
 };
 
 struct gui_window
diff --git a/amiga/plotters.c b/amiga/plotters.c
index 348e66e..34f5964 100755
--- a/amiga/plotters.c
+++ b/amiga/plotters.c
@@ -227,6 +227,26 @@ void ami_clearclipreg(struct gui_globals *gg)
        gg->rect.MaxY = scrn->Height-1;
 }
 
+ULONG ami_plot_obtain_pen(struct MinList *shared_pens, ULONG colour)
+{
+       ULONG pen = ObtainBestPenA(scrn->ViewPort.ColorMap,
+                       (colour & 0x000000ff) << 24,
+                       (colour & 0x0000ff00) << 16,
+                       (colour & 0x00ff0000) << 8,
+                       NULL);
+       
+       if(pen == -1) LOG(("WARNING: Cannot allocate pen for ABGR:%lx", 
colour));
+                       
+       /* TODO: add allocated pen to list */
+       
+       return pen;
+}
+
+void ami_plot_release_pens(struct MinList *shared_pens)
+{
+       /* TODO: trawl through list releasing pens */
+}
+
 void ami_plot_setapen(ULONG colour)
 {
        if(palette_mapped == false) {
@@ -234,16 +254,8 @@ void ami_plot_setapen(ULONG colour)
                        p96EncodeColor(RGBFF_A8B8G8R8, colour),
                        TAG_DONE);
        } else {
-               ULONG pen = ObtainBestPenA(scrn->ViewPort.ColorMap,
-                       (colour & 0x000000ff) << 24,
-                       (colour & 0x0000ff00) << 16,
-                       (colour & 0x00ff0000) << 8,
-                       NULL);
-
-               if(pen == -1) LOG(("WARNING: Cannot allocate pen for ABGR:%lx", 
colour));
-                       
-               SetAPen(glob->rp, pen); 
-               /* TODO: Add pen to a list for later release */
+               ULONG pen = ami_plot_obtain_pen(gg->shared_pens, colour);
+               if(pen != -1) SetAPen(glob->rp, pen);
        }
 }
 
@@ -254,16 +266,8 @@ void ami_plot_setopen(ULONG colour)
                        p96EncodeColor(RGBFF_A8B8G8R8, colour),
                        TAG_DONE);
        } else {
-               ULONG pen = ObtainBestPenA(scrn->ViewPort.ColorMap,
-                       (colour & 0x000000ff) << 24,
-                       (colour & 0x0000ff00) << 16,
-                       (colour & 0x00ff0000) << 8,
-                       NULL);
-
-               if(pen == -1) LOG(("WARNING: Cannot allocate pen for ABGR:%lx", 
colour));
-                       
-               SetOPen(glob->rp, pen); 
-               /* TODO: Add pen to a list for later release */
+               ULONG pen = ami_plot_obtain_pen(gg->shared_pens, colour);
+               if(pen != -1) SetOPen(glob->rp, pen);
        }
 }
 
diff --git a/amiga/plotters.h b/amiga/plotters.h
index c3f816d..94dfaee 100755
--- a/amiga/plotters.h
+++ b/amiga/plotters.h
@@ -33,6 +33,7 @@ struct gui_globals
        APTR areabuf;
        APTR tmprasbuf;
        struct Rectangle rect;
+       struct MinList *shared_pens;
 #ifdef NS_AMIGA_CAIRO
        cairo_surface_t *surface;
        cairo_t *cr;
@@ -63,6 +64,7 @@ bool ami_path(const float *p, unsigned int n, colour fill, 
float width,
 void ami_init_layers(struct gui_globals *gg, ULONG width, ULONG height);
 void ami_free_layers(struct gui_globals *gg);
 void ami_clearclipreg(struct gui_globals *gg);
+void ami_plot_release_pens(struct MinList *shared_pens);
 
 struct gui_globals *glob;
 #endif


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commitdiff/337b0f6724144800b9d226e1f949642ec200b511
commit 337b0f6724144800b9d226e1f949642ec200b511
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>

    Allow forcing palette-mapped mode by setting cairo_renderer:-1

diff --git a/amiga/plotters.c b/amiga/plotters.c
index c581711..348e66e 100755
--- a/amiga/plotters.c
+++ b/amiga/plotters.c
@@ -131,10 +131,10 @@ void ami_init_layers(struct gui_globals *gg, ULONG width, 
ULONG height)
        struct BitMap *friend = NULL; /* Required to be NULL for Cairo and ARGB 
bitmaps */
 
        if(dri = GetScreenDrawInfo(scrn)) {
-               if(dri->dri_Depth < 16) {
+               if((dri->dri_Depth < 16) || (nsoption_int(cairo_renderer) == 
-1)) {
                        palette_mapped = true;
                        depth = dri->dri_Depth; /* this is always wrong */
-               //      friend = scrn->RastPort.BitMap;
+                       // friend = scrn->RastPort.BitMap;
                } else {
                        palette_mapped = false;
                }
@@ -578,7 +578,7 @@ bool ami_arc(int x, int y, int radius, int angle1, int 
angle2, const plot_style_
        LOG(("[ami_plotter] Entered ami_arc()"));
        #endif
 
-       if((nsoption_int(cairo_renderer) == 0) || (palette_mapped == true)) {
+       if((nsoption_int(cairo_renderer) <= 0) || (palette_mapped == true)) {
                /* TODO: gfx.lib plotter needs arc support */
                /* eg. http://www.crbond.com/primitives.htm CommonFuncsPPC.lha 
*/
                ami_plot_setapen(style->fill_colour);


-----------------------------------------------------------------------

Summary of changes:
 amiga/gui.c      |    9 ++++++++-
 amiga/gui.h      |    1 +
 amiga/plotters.c |   50 +++++++++++++++++++++++++++-----------------------
 amiga/plotters.h |    2 ++
 4 files changed, 38 insertions(+), 24 deletions(-)

diff --git a/amiga/gui.c b/amiga/gui.c
index ee15ee9..347fcde 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -2209,6 +2209,7 @@ void ami_switch_tab(struct gui_window_2 *gwin,bool redraw)
                return;
        }
 
+       ami_plot_release_pens(&g->shared->shared_pens);
        ami_update_buttons(gwin);
        ami_menu_update_disabled(gwin->bw->window, gwin->bw->current_content);
 
@@ -2574,6 +2575,8 @@ struct gui_window *gui_create_browser_window(struct 
browser_window *bw,
                return NULL;
        }
 
+       NewList(&g->shared->shared_pens);
+       
        g->shared->scrollerhook.h_Entry = (void *)ami_scroller_hook;
        g->shared->scrollerhook.h_Data = g->shared;
 
@@ -3182,6 +3185,8 @@ void gui_window_destroy(struct gui_window *g)
                return;
        }
 
+       ami_plot_release_pens(&g->shared->shared_pens);
+
        DisposeObject(g->shared->objects[OID_MAIN]);
        ami_gui_appicon_remove(g->shared);
        if(g->shared->appwin) RemoveAppWindow(g->shared->appwin);
@@ -3280,6 +3285,8 @@ void ami_do_redraw_tiled(struct gui_window_2 *gwin,
        int tile_x_scale = (int)(nsoption_int(redraw_tile_size_x) / 
gwin->bw->scale);
        int tile_y_scale = (int)(nsoption_int(redraw_tile_size_y) / 
gwin->bw->scale);
 
+       browserglob.shared_pens = &gwin->shared_pens;
+       
        if(top < 0) {
                height += top;
                top = 0;
@@ -3997,7 +4004,7 @@ void gui_window_new_content(struct gui_window *g)
        g->shared->oldh = 0;
        g->shared->oldv = 0;
        g->favicon = NULL;
-
+       ami_plot_release_pens(&g->shared->shared_pens);
        ami_menu_update_disabled(g, c);
 }
 
diff --git a/amiga/gui.h b/amiga/gui.h
index 01588c7..013be50 100755
--- a/amiga/gui.h
+++ b/amiga/gui.h
@@ -112,6 +112,7 @@ struct gui_window_2 {
        gui_drag_type drag_op;
        struct IBox *ptr_lock;
        struct AppWindow *appwin;
+       struct MinList shared_pens;
 };
 
 struct gui_window
diff --git a/amiga/plotters.c b/amiga/plotters.c
index c581711..34f5964 100755
--- a/amiga/plotters.c
+++ b/amiga/plotters.c
@@ -131,10 +131,10 @@ void ami_init_layers(struct gui_globals *gg, ULONG width, 
ULONG height)
        struct BitMap *friend = NULL; /* Required to be NULL for Cairo and ARGB 
bitmaps */
 
        if(dri = GetScreenDrawInfo(scrn)) {
-               if(dri->dri_Depth < 16) {
+               if((dri->dri_Depth < 16) || (nsoption_int(cairo_renderer) == 
-1)) {
                        palette_mapped = true;
                        depth = dri->dri_Depth; /* this is always wrong */
-               //      friend = scrn->RastPort.BitMap;
+                       // friend = scrn->RastPort.BitMap;
                } else {
                        palette_mapped = false;
                }
@@ -227,6 +227,26 @@ void ami_clearclipreg(struct gui_globals *gg)
        gg->rect.MaxY = scrn->Height-1;
 }
 
+ULONG ami_plot_obtain_pen(struct MinList *shared_pens, ULONG colour)
+{
+       ULONG pen = ObtainBestPenA(scrn->ViewPort.ColorMap,
+                       (colour & 0x000000ff) << 24,
+                       (colour & 0x0000ff00) << 16,
+                       (colour & 0x00ff0000) << 8,
+                       NULL);
+       
+       if(pen == -1) LOG(("WARNING: Cannot allocate pen for ABGR:%lx", 
colour));
+                       
+       /* TODO: add allocated pen to list */
+       
+       return pen;
+}
+
+void ami_plot_release_pens(struct MinList *shared_pens)
+{
+       /* TODO: trawl through list releasing pens */
+}
+
 void ami_plot_setapen(ULONG colour)
 {
        if(palette_mapped == false) {
@@ -234,16 +254,8 @@ void ami_plot_setapen(ULONG colour)
                        p96EncodeColor(RGBFF_A8B8G8R8, colour),
                        TAG_DONE);
        } else {
-               ULONG pen = ObtainBestPenA(scrn->ViewPort.ColorMap,
-                       (colour & 0x000000ff) << 24,
-                       (colour & 0x0000ff00) << 16,
-                       (colour & 0x00ff0000) << 8,
-                       NULL);
-
-               if(pen == -1) LOG(("WARNING: Cannot allocate pen for ABGR:%lx", 
colour));
-                       
-               SetAPen(glob->rp, pen); 
-               /* TODO: Add pen to a list for later release */
+               ULONG pen = ami_plot_obtain_pen(gg->shared_pens, colour);
+               if(pen != -1) SetAPen(glob->rp, pen);
        }
 }
 
@@ -254,16 +266,8 @@ void ami_plot_setopen(ULONG colour)
                        p96EncodeColor(RGBFF_A8B8G8R8, colour),
                        TAG_DONE);
        } else {
-               ULONG pen = ObtainBestPenA(scrn->ViewPort.ColorMap,
-                       (colour & 0x000000ff) << 24,
-                       (colour & 0x0000ff00) << 16,
-                       (colour & 0x00ff0000) << 8,
-                       NULL);
-
-               if(pen == -1) LOG(("WARNING: Cannot allocate pen for ABGR:%lx", 
colour));
-                       
-               SetOPen(glob->rp, pen); 
-               /* TODO: Add pen to a list for later release */
+               ULONG pen = ami_plot_obtain_pen(gg->shared_pens, colour);
+               if(pen != -1) SetOPen(glob->rp, pen);
        }
 }
 
@@ -578,7 +582,7 @@ bool ami_arc(int x, int y, int radius, int angle1, int 
angle2, const plot_style_
        LOG(("[ami_plotter] Entered ami_arc()"));
        #endif
 
-       if((nsoption_int(cairo_renderer) == 0) || (palette_mapped == true)) {
+       if((nsoption_int(cairo_renderer) <= 0) || (palette_mapped == true)) {
                /* TODO: gfx.lib plotter needs arc support */
                /* eg. http://www.crbond.com/primitives.htm CommonFuncsPPC.lha 
*/
                ami_plot_setapen(style->fill_colour);
diff --git a/amiga/plotters.h b/amiga/plotters.h
index c3f816d..94dfaee 100755
--- a/amiga/plotters.h
+++ b/amiga/plotters.h
@@ -33,6 +33,7 @@ struct gui_globals
        APTR areabuf;
        APTR tmprasbuf;
        struct Rectangle rect;
+       struct MinList *shared_pens;
 #ifdef NS_AMIGA_CAIRO
        cairo_surface_t *surface;
        cairo_t *cr;
@@ -63,6 +64,7 @@ bool ami_path(const float *p, unsigned int n, colour fill, 
float width,
 void ami_init_layers(struct gui_globals *gg, ULONG width, ULONG height);
 void ami_free_layers(struct gui_globals *gg);
 void ami_clearclipreg(struct gui_globals *gg);
+void ami_plot_release_pens(struct MinList *shared_pens);
 
 struct gui_globals *glob;
 #endif


-- 
NetSurf Browser

_______________________________________________
netsurf-commits mailing list
[email protected]
http://vlists.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to