summaryrefslogtreecommitdiff
path: root/frontends
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2017-02-13 00:18:32 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2017-02-13 00:18:32 +0000
commitedaa9c29f22a550ddc7c8e1f02ff6d9dedf9a5b1 (patch)
treeb5e5c8acfc567da678cf7ffd85b11e030942d221 /frontends
parent7b9fa8d7eb60950401065a81efffebd10d84309a (diff)
downloadnetsurf-edaa9c29f22a550ddc7c8e1f02ff6d9dedf9a5b1.tar.gz
netsurf-edaa9c29f22a550ddc7c8e1f02ff6d9dedf9a5b1.tar.bz2
Remove use of global context data from Amiga frontend
Diffstat (limited to 'frontends')
-rw-r--r--frontends/amiga/bitmap.c21
-rwxr-xr-xfrontends/amiga/bitmap.h1
-rw-r--r--frontends/amiga/corewindow.c8
-rw-r--r--frontends/amiga/font_diskfont.c23
-rw-r--r--frontends/amiga/gui.c19
-rw-r--r--frontends/amiga/gui.h5
-rw-r--r--frontends/amiga/gui_menu.h1
-rwxr-xr-xfrontends/amiga/history_local.c9
-rw-r--r--frontends/amiga/plotters.c80
-rw-r--r--frontends/amiga/plotters.h2
-rw-r--r--frontends/amiga/print.c4
11 files changed, 81 insertions, 92 deletions
diff --git a/frontends/amiga/bitmap.c b/frontends/amiga/bitmap.c
index 5fc772ba3..95e99aa5b 100644
--- a/frontends/amiga/bitmap.c
+++ b/frontends/amiga/bitmap.c
@@ -725,25 +725,22 @@ static nserror bitmap_render(struct bitmap *bitmap, struct hlcache_handle *conte
#ifdef __amigaos4__
LOG("Entering bitmap_render");
+ int plot_width;
+ int plot_height;
+ struct gui_globals bm_globals;
+
struct redraw_context ctx = {
.interactive = false,
.background_images = true,
- .plot = &amiplot
+ .plot = &amiplot,
+ .priv = &bm_globals
};
- int plot_width;
- int plot_height;
- struct gui_globals bm_globals;
- struct gui_globals *temp_gg = glob;
-
plot_width = MIN(content_get_width(content), bitmap->width);
plot_height = ((plot_width * bitmap->height) + (bitmap->width / 2)) /
bitmap->width;
ami_init_layers(&bm_globals, bitmap->width, bitmap->height, true);
- bm_globals.shared_pens = NULL;
-
- glob = &bm_globals;
ami_clearclipreg(&bm_globals);
content_scaled_redraw(content, plot_width, plot_height, &ctx);
@@ -768,12 +765,6 @@ static nserror bitmap_render(struct bitmap *bitmap, struct hlcache_handle *conte
ami_free_layers(&bm_globals);
amiga_bitmap_set_opaque(bitmap, true);
-
- /* Restore previous render area. This is set when plotting starts,
- * but if bitmap_render is called *during* a browser render then
- * having an invalid pointer here causes NetSurf to crash.
- */
- glob = temp_gg;
#else
#warning FIXME for OS3 (in current state none of bitmap_render can work!)
#endif
diff --git a/frontends/amiga/bitmap.h b/frontends/amiga/bitmap.h
index a32d740df..056953fa9 100755
--- a/frontends/amiga/bitmap.h
+++ b/frontends/amiga/bitmap.h
@@ -31,6 +31,7 @@
extern struct gui_bitmap_table *amiga_bitmap_table;
struct bitmap;
struct nsurl;
+struct gui_globals;
struct BitMap *ami_bitmap_get_native(struct bitmap *bitmap,
int width, int height, struct BitMap *friendbm);
diff --git a/frontends/amiga/corewindow.c b/frontends/amiga/corewindow.c
index 0ed16d1ee..15b0a6e73 100644
--- a/frontends/amiga/corewindow.c
+++ b/frontends/amiga/corewindow.c
@@ -230,7 +230,8 @@ ami_cw_redraw_rect(struct ami_corewindow *ami_cw, struct rect *r)
struct redraw_context ctx = {
.interactive = true,
.background_images = true,
- .plot = &amiplot
+ .plot = &amiplot,
+ .priv = &ami_cw->gg
};
if(ami_gui_get_space_box((Object *)ami_cw->objects[GID_CW_DRAW], &bbox) != NSERROR_OK) {
@@ -240,8 +241,6 @@ ami_cw_redraw_rect(struct ami_corewindow *ami_cw, struct rect *r)
ami_cw_scroller_top(ami_cw, &pos_x, &pos_y);
- glob = &ami_cw->gg;
-
if(x - pos_x + width > bbox->Width) width = bbox->Width - (x - pos_x);
if(y - pos_y + height > bbox->Height) height = bbox->Height - (y - pos_y);
@@ -293,8 +292,7 @@ ami_cw_redraw_rect(struct ami_corewindow *ami_cw, struct rect *r)
}
ami_gui_free_space_box(bbox);
- ami_clearclipreg(glob);
- ami_gui_set_default_gg();
+ ami_clearclipreg(&ami_cw->gg);
}
diff --git a/frontends/amiga/font_diskfont.c b/frontends/amiga/font_diskfont.c
index 8593f81b2..7abc4379b 100644
--- a/frontends/amiga/font_diskfont.c
+++ b/frontends/amiga/font_diskfont.c
@@ -41,6 +41,7 @@
static plot_font_style_t *prev_fstyle = NULL;
static struct TextFont *prev_font = NULL;
+static struct RastPort temp_rp;
static struct TextFont *ami_font_bm_open(struct RastPort *rp, const plot_font_style_t *fstyle)
{
@@ -133,17 +134,16 @@ static nserror amiga_bm_nsfont_width(const plot_font_style_t *fstyle,
{
char *localtext = NULL;
- if((glob == NULL) || (glob->rp == NULL)) return NSERROR_INVALID;
*width = length;
- struct TextFont *bmfont = ami_font_bm_open(glob->rp, fstyle);
+ struct TextFont *bmfont = ami_font_bm_open(&temp_rp, fstyle);
if(bmfont == NULL) return NSERROR_INVALID;
if(utf8_to_local_encoding(string, length, &localtext) != NSERROR_OK) {
return NSERROR_INVALID;
}
- *width = TextLength(glob->rp, localtext, (UWORD)strlen(localtext));
+ *width = TextLength(&temp_rp, localtext, (UWORD)strlen(localtext));
free(localtext);
return NSERROR_OK;
@@ -170,16 +170,14 @@ static nserror amiga_bm_nsfont_position_in_string(const plot_font_style_t *fstyl
char *localtext = NULL;
UWORD co = 0;
- if((glob == NULL) || (glob->rp == NULL)) return NSERROR_INVALID;
-
- bmfont = ami_font_bm_open(glob->rp, fstyle);
+ bmfont = ami_font_bm_open(&temp_rp, fstyle);
if(bmfont == NULL) return NSERROR_INVALID;
if(utf8_to_local_encoding(string, length, &localtext) != NSERROR_OK) {
return NSERROR_INVALID;
}
- co = TextFit(glob->rp, localtext, (UWORD)strlen(localtext),
+ co = TextFit(&temp_rp, localtext, (UWORD)strlen(localtext),
&extent, NULL, 1, x, 32767);
*char_offset = ami_font_bm_convert_local_to_utf8_offset(string, length, co);
*actual_x = extent.te_Extent.MaxX;
@@ -222,16 +220,14 @@ static nserror amiga_bm_nsfont_split(const plot_font_style_t *fstyle,
char *charp;
char *localtext;
- if((glob == NULL) || (glob->rp == NULL)) return NSERROR_INVALID;
-
- struct TextFont *bmfont = ami_font_bm_open(glob->rp, fstyle);
+ struct TextFont *bmfont = ami_font_bm_open(&temp_rp, fstyle);
if(bmfont == NULL) return NSERROR_INVALID;
if(utf8_to_local_encoding(string, length, &localtext) != NSERROR_OK) {
return NSERROR_INVALID;
}
- offset = TextFit(glob->rp, localtext, (UWORD)strlen(localtext),
+ offset = TextFit(&temp_rp, localtext, (UWORD)strlen(localtext),
&extent, NULL, 1, (UWORD)x, 32767);
co = offset;
@@ -253,7 +249,7 @@ static nserror amiga_bm_nsfont_split(const plot_font_style_t *fstyle,
}
if((co > 0) && (co < strlen(localtext))) {
- *actual_x = TextLength(glob->rp, localtext, co);
+ *actual_x = TextLength(&temp_rp, localtext, co);
*char_offset = ami_font_bm_convert_local_to_utf8_offset(string, length, co);
} else {
*actual_x = x;
@@ -298,6 +294,9 @@ void ami_font_diskfont_init(void)
/* Alloc space to hold currently open font - doesn't matter if this fails */
prev_fstyle = calloc(1, sizeof(plot_font_style_t));
+
+ /* Init temp RastPort */
+ InitRastPort(&temp_rp);
}
void ami_font_diskfont_fini(void)
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index b2a489e72..a18d4d5b8 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -993,11 +993,6 @@ static STRPTR ami_gui_read_all_tooltypes(int argc, char **argv)
return current_user;
}
-void ami_gui_set_default_gg(void)
-{
- glob = &browserglob;
-}
-
static void gui_init2(int argc, char** argv)
{
struct Screen *screen;
@@ -1008,9 +1003,6 @@ static void gui_init2(int argc, char** argv)
notalreadyrunning = ami_arexx_init(&rxsig);
- /* Treeview init code ends up calling a font function which needs this */
- ami_gui_set_default_gg();
-
/* ...and this ensures the treeview at least gets the WB colour palette to work with */
if(scrn == NULL) {
if((screen = LockPubScreen("Workbench"))) {
@@ -3529,6 +3521,7 @@ static void ami_do_redraw_tiled(struct gui_window_2 *gwin, bool busy,
int left, int top, int width, int height,
int sx, int sy, struct IBox *bbox, struct redraw_context *ctx)
{
+ struct gui_globals *glob = (struct gui_globals *)ctx->priv;
int x, y;
struct rect clip;
int tile_size_x = glob->width;
@@ -3636,7 +3629,8 @@ static void ami_do_redraw_limits(struct gui_window *g, struct browser_window *bw
struct redraw_context ctx = {
.interactive = true,
.background_images = true,
- .plot = &amiplot
+ .plot = &amiplot,
+ .priv = &browserglob
};
if(!g) return;
@@ -4459,8 +4453,6 @@ gui_window_create(struct browser_window *bw,
ami_gui_win_list_add(g->shared, AMINS_WINDOW, &ami_gui_table);
- ami_gui_set_default_gg();
-
if(locked_screen) {
UnlockPubScreen(NULL,scrn);
locked_screen = FALSE;
@@ -4907,11 +4899,10 @@ static void ami_do_redraw(struct gui_window_2 *gwin)
struct redraw_context ctx = {
.interactive = true,
.background_images = true,
- .plot = &amiplot
+ .plot = &amiplot,
+ .priv = &browserglob
};
- ami_gui_set_default_gg();
-
if(nsoption_bool(direct_render) == false)
{
ami_do_redraw_tiled(gwin, true, hcurrent, vcurrent, width, height, hcurrent, vcurrent, bbox, &ctx);
diff --git a/frontends/amiga/gui.h b/frontends/amiga/gui.h
index 07ff922f7..5cec82d84 100644
--- a/frontends/amiga/gui.h
+++ b/frontends/amiga/gui.h
@@ -259,11 +259,6 @@ uint32 ami_gui_get_app_id(void);
STRPTR ami_gui_get_screen_title(void);
/**
- * Set gui_globals back to the default for the browser context
- */
-void ami_gui_set_default_gg(void);
-
-/**
* Switch to the most-recently-opened tab
*/
void ami_gui_switch_to_new_tab(struct gui_window_2 *gwin);
diff --git a/frontends/amiga/gui_menu.h b/frontends/amiga/gui_menu.h
index 16fc72040..3490fe9c1 100644
--- a/frontends/amiga/gui_menu.h
+++ b/frontends/amiga/gui_menu.h
@@ -108,6 +108,7 @@ enum {
struct gui_window;
struct gui_window_2;
struct hlcache_handle;
+struct Window;
ULONG ami_gui_menu_number(int item);
struct Menu *ami_gui_menu_create(struct gui_window_2 *gwin);
diff --git a/frontends/amiga/history_local.c b/frontends/amiga/history_local.c
index 3d1c6f39b..8cce869c9 100755
--- a/frontends/amiga/history_local.c
+++ b/frontends/amiga/history_local.c
@@ -87,7 +87,8 @@ static void ami_history_redraw(struct history_window *hw)
struct redraw_context ctx = {
.interactive = true,
.background_images = true,
- .plot = &amiplot
+ .plot = &amiplot,
+ .priv = hw->gg
};
GetAttr(SCROLLER_Top,hw->objects[OID_HSCROLL],(ULONG *)&xs);
@@ -97,16 +98,14 @@ static void ami_history_redraw(struct history_window *hw)
return;
}
- glob = hw->gg;
-
+/* core should clear this area for us
SetRPAttrs(glob->rp, RPTAG_APenColor, 0xffffffff, TAG_DONE);
RectFill(glob->rp, 0, 0, bbox->Width - 1, bbox->Height - 1);
+*/
browser_window_history_redraw_rectangle(hw->gw->bw, xs, ys,
bbox->Width + xs, bbox->Height + ys, 0, 0, &ctx);
- ami_gui_set_default_gg();
-
ami_clearclipreg(hw->gg);
ami_history_update_extent(hw);
diff --git a/frontends/amiga/plotters.c b/frontends/amiga/plotters.c
index e87171551..0eea2ed48 100644
--- a/frontends/amiga/plotters.c
+++ b/frontends/amiga/plotters.c
@@ -69,6 +69,7 @@ struct bfbitmap {
int offsetx;
int offsety;
APTR mask;
+ bool palette_mapped;
};
struct ami_plot_pen {
@@ -81,10 +82,9 @@ struct bez_point {
float y;
};
-struct gui_globals *glob;
-
static int init_layers_count = 0;
static APTR pool_pens = NULL;
+static bool palette_mapped = true; /* palette-mapped state for the screen */
#ifndef M_PI /* For some reason we don't always get this from math.h */
#define M_PI 3.14159265358979323846
@@ -117,8 +117,10 @@ void ami_init_layers(struct gui_globals *gg, ULONG width, ULONG height, bool for
#ifdef __amigaos4__
if(depth < 16) {
gg->palette_mapped = true;
+ if(force32bit == false) palette_mapped = true;
} else {
gg->palette_mapped = false;
+ if(force32bit == false) palette_mapped = false;
}
#else
/* Friend BitMaps are weird.
@@ -142,6 +144,7 @@ void ami_init_layers(struct gui_globals *gg, ULONG width, ULONG height, bool for
*/
#warning OS3 locked to palette-mapped modes
gg->palette_mapped = true;
+ palette_mapped = true;
if(depth > 8) depth = 8;
#endif
@@ -207,6 +210,7 @@ void ami_init_layers(struct gui_globals *gg, ULONG width, ULONG height, bool for
gg->open = 0x00000000;
gg->apen_num = -1;
gg->open_num = -1;
+ gg->shared_pens = NULL;
init_layers_count++;
LOG("Layer initialised (total: %d)", init_layers_count);
@@ -289,14 +293,9 @@ void ami_plot_release_pens(struct MinList *shared_pens)
Remove((struct Node *)node);
ami_memory_itempool_free(pool_pens, node, sizeof(struct ami_plot_pen));
} while((node = nnode));
-
- glob->apen = 0x00000000;
- glob->open = 0x00000000;
- glob->apen_num = -1;
- glob->open_num = -1;
}
-static void ami_plot_setapen(struct RastPort *rp, ULONG colr)
+static void ami_plot_setapen(struct gui_globals *glob, struct RastPort *rp, ULONG colr)
{
if(glob->apen == colr) return;
@@ -315,7 +314,7 @@ static void ami_plot_setapen(struct RastPort *rp, ULONG colr)
glob->apen = colr;
}
-static void ami_plot_setopen(struct RastPort *rp, ULONG colr)
+static void ami_plot_setopen(struct gui_globals *glob, struct RastPort *rp, ULONG colr)
{
if(glob->open == colr) return;
@@ -343,7 +342,7 @@ void ami_plot_clear_bbox(struct RastPort *rp, struct IBox *bbox)
}
-static void ami_arc_gfxlib(int x, int y, int radius, int angle1, int angle2)
+static void ami_arc_gfxlib(struct RastPort *rp, int x, int y, int radius, int angle1, int angle2)
{
double angle1_r = (double)(angle1) * (M_PI / 180.0);
double angle2_r = (double)(angle2) * (M_PI / 180.0);
@@ -359,19 +358,19 @@ static void ami_arc_gfxlib(int x, int y, int radius, int angle1, int angle2)
x1 = (int)(cos(b) * (double)radius);
y1 = (int)(sin(b) * (double)radius);
- Move(glob->rp, x0 + x1, y0 - y1);
+ Move(rp, x0 + x1, y0 - y1);
for(angle = (b + step); angle <= c; angle += step) {
x1 = (int)(cos(angle) * (double)radius);
y1 = (int)(sin(angle) * (double)radius);
- Draw(glob->rp, x0 + x1, y0 - y1);
+ Draw(rp, x0 + x1, y0 - y1);
}
}
/**
*/
static nserror
-ami_bitmap(int x, int y, int width, int height, struct bitmap *bitmap)
+ami_bitmap(struct gui_globals *glob, int x, int y, int width, int height, struct bitmap *bitmap)
{
PLOT_LOG("[ami_plotter] Entered ami_bitmap()");
@@ -471,7 +470,7 @@ HOOKF(void, ami_bitmap_tile_hook, struct RastPort *, rp, struct BackFillMessage
for (yf = -bfbm->offsety; yf < msg->Bounds.MaxY; yf += bfbm->height) {
#ifdef __amigaos4__
if(__builtin_expect((GfxBase->LibNode.lib_Version >= 53) &&
- (glob->palette_mapped == false), 1)) {
+ (bfbm->palette_mapped == false), 1)) {
CompositeTags(COMPOSITE_Src_Over_Dest, bfbm->bm, rp->BitMap,
COMPTAG_Flags, COMPFLAG_IgnoreDestAlpha,
COMPTAG_DestX, msg->Bounds.MinX,
@@ -489,7 +488,7 @@ HOOKF(void, ami_bitmap_tile_hook, struct RastPort *, rp, struct BackFillMessage
{
ULONG tag, tag_data, minterm = 0xc0;
- if(glob->palette_mapped == false) {
+ if(bfbm->palette_mapped == false) {
tag = BLITA_UseSrcAlpha;
tag_data = TRUE;
minterm = 0xc0;
@@ -534,7 +533,8 @@ static void ami_bezier(struct bez_point *restrict a, struct bez_point *restrict
bool ami_plot_screen_is_palettemapped(void)
{
- return glob->palette_mapped;
+ /* This may not be entirely correct - previously we returned the state of the current BitMap */
+ return palette_mapped;
}
@@ -549,6 +549,7 @@ bool ami_plot_screen_is_palettemapped(void)
static nserror
ami_clip(const struct redraw_context *ctx, const struct rect *clip)
{
+ struct gui_globals *glob = (struct gui_globals *)ctx->priv;
struct Region *reg = NULL;
PLOT_LOG("[ami_plotter] Entered ami_clip()");
@@ -597,12 +598,14 @@ ami_arc(const struct redraw_context *ctx,
{
PLOT_LOG("[ami_plotter] Entered ami_arc()");
+ struct gui_globals *glob = (struct gui_globals *)ctx->priv;
+
if (angle2 < angle1) {
angle2 += 360;
}
- ami_plot_setapen(glob->rp, style->fill_colour);
- ami_arc_gfxlib(x, y, radius, angle1, angle2);
+ ami_plot_setapen(glob, glob->rp, style->fill_colour);
+ ami_arc_gfxlib(glob->rp, x, y, radius, angle1, angle2);
return NSERROR_OK;
}
@@ -627,14 +630,16 @@ ami_disc(const struct redraw_context *ctx,
{
PLOT_LOG("[ami_plotter] Entered ami_disc()");
+ struct gui_globals *glob = (struct gui_globals *)ctx->priv;
+
if (style->fill_type != PLOT_OP_TYPE_NONE) {
- ami_plot_setapen(glob->rp, style->fill_colour);
+ ami_plot_setapen(glob, glob->rp, style->fill_colour);
AreaCircle(glob->rp,x,y,radius);
AreaEnd(glob->rp);
}
if (style->stroke_type != PLOT_OP_TYPE_NONE) {
- ami_plot_setapen(glob->rp, style->stroke_colour);
+ ami_plot_setapen(glob, glob->rp, style->stroke_colour);
DrawEllipse(glob->rp,x,y,radius,radius);
}
@@ -660,6 +665,8 @@ ami_line(const struct redraw_context *ctx,
{
PLOT_LOG("[ami_plotter] Entered ami_line()");
+ struct gui_globals *glob = (struct gui_globals *)ctx->priv;
+
glob->rp->PenWidth = style->stroke_width;
glob->rp->PenHeight = style->stroke_width;
@@ -678,7 +685,7 @@ ami_line(const struct redraw_context *ctx,
break;
}
- ami_plot_setapen(glob->rp, style->stroke_colour);
+ ami_plot_setapen(glob, glob->rp, style->stroke_colour);
Move(glob->rp, line->x0, line->y0);
Draw(glob->rp, line->x1, line->y1);
@@ -710,8 +717,10 @@ ami_rectangle(const struct redraw_context *ctx,
{
PLOT_LOG("[ami_plotter] Entered ami_rectangle()");
+ struct gui_globals *glob = (struct gui_globals *)ctx->priv;
+
if (style->fill_type != PLOT_OP_TYPE_NONE) {
- ami_plot_setapen(glob->rp, style->fill_colour);
+ ami_plot_setapen(glob, glob->rp, style->fill_colour);
RectFill(glob->rp, rect->x0, rect->y0, rect->x1- 1 , rect->y1 - 1);
}
@@ -734,7 +743,7 @@ ami_rectangle(const struct redraw_context *ctx,
break;
}
- ami_plot_setapen(glob->rp, style->stroke_colour);
+ ami_plot_setapen(glob, glob->rp, style->stroke_colour);
Move(glob->rp, rect->x0, rect->y0);
Draw(glob->rp, rect->x1, rect->y0);
Draw(glob->rp, rect->x1, rect->y1);
@@ -772,7 +781,9 @@ ami_polygon(const struct redraw_context *ctx,
{
PLOT_LOG("[ami_plotter] Entered ami_polygon()");
- ami_plot_setapen(glob->rp, style->fill_colour);
+ struct gui_globals *glob = (struct gui_globals *)ctx->priv;
+
+ ami_plot_setapen(glob, glob->rp, style->fill_colour);
if (AreaMove(glob->rp,p[0],p[1]) == -1) {
LOG("AreaMove: vector list full");
@@ -816,9 +827,11 @@ ami_path(const struct redraw_context *ctx,
{
unsigned int i;
struct bez_point start_p = {0, 0}, cur_p = {0, 0}, p_a, p_b, p_c, p_r;
-
+
PLOT_LOG("[ami_plotter] Entered ami_path()");
+ struct gui_globals *glob = (struct gui_globals *)ctx->priv;
+
if (n == 0) {
return NSERROR_OK;
}
@@ -829,13 +842,13 @@ ami_path(const struct redraw_context *ctx,
}
if (pstyle->fill_colour != NS_TRANSPARENT) {
- ami_plot_setapen(glob->rp, pstyle->fill_colour);
+ ami_plot_setapen(glob, glob->rp, pstyle->fill_colour);
if (pstyle->stroke_colour != NS_TRANSPARENT) {
- ami_plot_setopen(glob->rp, pstyle->stroke_colour);
+ ami_plot_setopen(glob, glob->rp, pstyle->stroke_colour);
}
} else {
if (pstyle->stroke_colour != NS_TRANSPARENT) {
- ami_plot_setapen(glob->rp, pstyle->stroke_colour);
+ ami_plot_setapen(glob, glob->rp, pstyle->stroke_colour);
} else {
return NSERROR_OK; /* wholly transparent */
}
@@ -958,12 +971,14 @@ ami_bitmap_tile(const struct redraw_context *ctx,
PLOT_LOG("[ami_plotter] Entered ami_bitmap_tile()");
+ struct gui_globals *glob = (struct gui_globals *)ctx->priv;
+
if ((width == 0) || (height == 0)) {
return NSERROR_OK;
}
if (!(repeat_x || repeat_y)) {
- return ami_bitmap(x, y, width, height, bitmap);
+ return ami_bitmap(glob, x, y, width, height, bitmap);
}
/* If it is a one pixel transparent image, we are wasting our time */
@@ -973,7 +988,7 @@ ami_bitmap_tile(const struct redraw_context *ctx,
return NSERROR_OK;
}
- tbm = ami_bitmap_get_native(bitmap,width,height,glob->rp->BitMap);
+ tbm = ami_bitmap_get_native(bitmap, width, height, glob->rp->BitMap);
if (!tbm) {
return NSERROR_OK;
}
@@ -1025,6 +1040,7 @@ ami_bitmap_tile(const struct redraw_context *ctx,
bfbm.offsetx = ox;
bfbm.offsety = oy;
bfbm.mask = ami_bitmap_get_mask(bitmap, width, height, tbm);
+ bfbm.palette_mapped = glob->palette_mapped;
bfh = calloc(1, sizeof(struct Hook));
bfh->h_Entry = (HOOKFUNC)ami_bitmap_tile_hook;
bfh->h_SubEntry = 0;
@@ -1072,10 +1088,12 @@ ami_text(const struct redraw_context *ctx,
{
PLOT_LOG("[ami_plotter] Entered ami_text()");
+ struct gui_globals *glob = (struct gui_globals *)ctx->priv;
+
if (__builtin_expect(ami_nsfont == NULL, 0)) {
return NSERROR_OK;
}
- ami_plot_setapen(glob->rp, fstyle->foreground);
+ ami_plot_setapen(glob, glob->rp, fstyle->foreground);
ami_nsfont->text(glob->rp, text, length, fstyle, x, y, nsoption_bool(font_antialiasing));
return NSERROR_OK;
diff --git a/frontends/amiga/plotters.h b/frontends/amiga/plotters.h
index 7cb994f9d..b92cdd4de 100644
--- a/frontends/amiga/plotters.h
+++ b/frontends/amiga/plotters.h
@@ -45,8 +45,6 @@ struct gui_globals
extern const struct plotter_table amiplot;
-extern struct gui_globals *glob;
-
void ami_init_layers(struct gui_globals *gg, ULONG width, ULONG height, bool force32bit);
void ami_free_layers(struct gui_globals *gg);
void ami_clearclipreg(struct gui_globals *gg);
diff --git a/frontends/amiga/print.c b/frontends/amiga/print.c
index 5fab0f968..60a84e1c2 100644
--- a/frontends/amiga/print.c
+++ b/frontends/amiga/print.c
@@ -436,6 +436,7 @@ void ami_print(struct hlcache_handle *c, int copies)
ami_print_info.ps->page_width = ami_print_info.PED->ped_MaxXDots;
ami_print_info.ps->page_height = ami_print_info.PED->ped_MaxYDots;
ami_print_info.ps->scale = scale;
+ ami_print_info.ps->priv = ami_print_info.gg;
if(!print_set_up(c, &amiprinter, ami_print_info.ps, &height))
{
@@ -459,10 +460,8 @@ bool ami_print_cont(void)
if(ami_print_info.page <= ami_print_info.pages)
{
- glob = ami_print_info.gg;
print_draw_next_page(&amiprinter, ami_print_info.ps);
ami_print_dump();
- ami_gui_set_default_gg();
ret = true;
}
else
@@ -525,7 +524,6 @@ void ami_print_end(void)
ami_free_layers(ami_print_info.gg);
free(ami_print_info.gg);
DisposeObject(ami_print_info.objects[OID_MAIN]);
- ami_gui_set_default_gg();
ami_print_close_device();
ami_print_free();