Pass clip rect to clip plotters as struct. Simplify clip rect handling in debug window code. Pass clip rect to select menu as struct.
svn path=/trunk/netsurf/; revision=11683
This commit is contained in:
parent
3ce0613193
commit
94e7b44ebc
|
@ -400,7 +400,7 @@ bool ami_polygon(const int *p, unsigned int n, const plot_style_t *style)
|
|||
}
|
||||
|
||||
|
||||
bool ami_clip(int x0, int y0, int x1, int y1)
|
||||
bool ami_clip(const struct rect *clip)
|
||||
{
|
||||
#ifdef AMI_PLOTTER_DEBUG
|
||||
LOG(("[ami_plotter] Entered ami_clip()"));
|
||||
|
@ -412,10 +412,10 @@ bool ami_clip(int x0, int y0, int x1, int y1)
|
|||
{
|
||||
reg = NewRegion();
|
||||
|
||||
glob->rect.MinX = x0;
|
||||
glob->rect.MinY = y0;
|
||||
glob->rect.MaxX = x1-1;
|
||||
glob->rect.MaxY = y1-1;
|
||||
glob->rect.MinX = clip->x0;
|
||||
glob->rect.MinY = clip->y0;
|
||||
glob->rect.MaxX = clip->x1-1;
|
||||
glob->rect.MaxY = clip->y1-1;
|
||||
|
||||
OrRectRegion(reg,&glob->rect);
|
||||
|
||||
|
@ -426,7 +426,8 @@ bool ami_clip(int x0, int y0, int x1, int y1)
|
|||
|
||||
#ifdef NS_AMIGA_CAIRO_ALL
|
||||
cairo_reset_clip(glob->cr);
|
||||
cairo_rectangle(glob->cr, x0, y0, x1 - x0, y1 - y0);
|
||||
cairo_rectangle(glob->cr, clip->x0, clip->y0,
|
||||
clip->x1 - clip->x0, clip->y1 - clip->y0);
|
||||
cairo_clip(glob->cr);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ bool ami_clg(colour c);
|
|||
bool ami_rectangle(int x0, int y0, int x1, int y1, const plot_style_t *style);
|
||||
bool ami_line(int x0, int y0, int x1, int y1, const plot_style_t *style);
|
||||
bool ami_polygon(const int *p, unsigned int n, const plot_style_t *style);
|
||||
bool ami_clip(int x0, int y0, int x1, int y1);
|
||||
bool ami_clip(const struct rect *clip);
|
||||
bool ami_text(int x, int y, const char *text, size_t length,
|
||||
const plot_font_style_t *fstyle);
|
||||
bool ami_disc(int x, int y, int radius, const plot_style_t *style);
|
||||
|
|
|
@ -873,9 +873,7 @@ static void browser_redraw_content( struct gui_window * gw, int xoff, int yoff )
|
|||
clip.x1 = b->redraw.area.x1 + b->scroll.current.x;
|
||||
clip.y1 = b->redraw.area.y1 + b->scroll.current.y;
|
||||
/* must clear the surface: */
|
||||
plot.clip( b->redraw.area.x0, b->redraw.area.y0,
|
||||
b->redraw.area.x1, b->redraw.area.y1
|
||||
);
|
||||
plot.clip(&clip);
|
||||
plot.rectangle( b->redraw.area.x0,
|
||||
b->redraw.area.y0,
|
||||
b->redraw.area.x1,
|
||||
|
@ -911,16 +909,24 @@ void browser_redraw_caret( struct gui_window * gw, GRECT * area )
|
|||
caret.g_x -= gw->browser->scroll.current.x;
|
||||
caret.g_y -= gw->browser->scroll.current.y;
|
||||
struct s_clipping oldclip;
|
||||
struct rect old_clip;
|
||||
struct rect clip;
|
||||
clip.x0 = caret.g_x - 1;
|
||||
clip.y0 = caret.g_y - 1;
|
||||
clip.x1 = caret.g_x + caret.g_w + 1;
|
||||
clip.y1 = caret.g_y + caret.g_h + 1;
|
||||
plot_get_clip( &oldclip );
|
||||
/* clip to cursor: */
|
||||
plot_clip( caret.g_x-1, caret.g_y -1,
|
||||
caret.g_x + caret.g_w + 1, caret.g_y + caret.g_h + 1
|
||||
);
|
||||
plot_clip( &clip );
|
||||
plot_rectangle( caret.g_x, caret.g_y,
|
||||
caret.g_x+caret.g_w, caret.g_y+caret.g_h,
|
||||
plot_style_caret );
|
||||
/* restore clip area: */
|
||||
plot_clip( oldclip.x0, oldclip.y0, oldclip.x1,oldclip.y1);
|
||||
old_clip.x0 = old_clip.x0;
|
||||
old_clip.y0 = old_clip.y0;
|
||||
old_clip.x1 = old_clip.x1;
|
||||
old_clip.y1 = old_clip.y1;
|
||||
plot_clip( &old_clip );
|
||||
b->caret.current.g_x = caret.g_x + gw->browser->scroll.current.x;
|
||||
b->caret.current.g_y = caret.g_y + gw->browser->scroll.current.y;
|
||||
b->caret.current.g_w = caret.g_w;
|
||||
|
|
|
@ -110,9 +110,9 @@ static bool plot_polygon(const int *p, unsigned int n,
|
|||
return ( true );
|
||||
}
|
||||
|
||||
bool plot_clip(int x0, int y0, int x1, int y1)
|
||||
bool plot_clip(const struct rect *clip)
|
||||
{
|
||||
plotter->clip( plotter, x0, y0, x1, y1 );
|
||||
plotter->clip( plotter, clip->x0, clip->y0, clip->x1, clip->y1 );
|
||||
return ( true );
|
||||
}
|
||||
|
||||
|
|
|
@ -22,11 +22,13 @@
|
|||
#include "desktop/plotters.h"
|
||||
#include "atari/plot/plotter.h"
|
||||
|
||||
struct rect;
|
||||
|
||||
int atari_plotter_init( char*, char * );
|
||||
int atari_plotter_finalise( void );
|
||||
|
||||
bool plot_get_clip(struct s_clipping * out);
|
||||
bool plot_clip(int x0, int y0, int x1, int y1);
|
||||
bool plot_clip(const struct rect *clip);
|
||||
bool plot_rectangle( int x0, int y0, int x1, int y1,const plot_style_t *style );
|
||||
|
||||
#endif
|
||||
|
|
|
@ -66,8 +66,7 @@ static bool nsbeos_plot_line(int x0, int y0, int x1, int y1, const plot_style_t
|
|||
static bool nsbeos_plot_polygon(const int *p, unsigned int n, const plot_style_t *style);
|
||||
static bool nsbeos_plot_path(const float *p, unsigned int n, colour fill, float width,
|
||||
colour c, const float transform[6]);
|
||||
static bool nsbeos_plot_clip(int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1);
|
||||
static bool nsbeos_plot_clip(const struct clip *rect);
|
||||
static bool nsbeos_plot_text(int x, int y, const char *text, size_t length,
|
||||
const plot_font_style_t *fstyle);
|
||||
static bool nsbeos_plot_disc(int x, int y, int radius, const plot_style_t *style);
|
||||
|
@ -316,8 +315,7 @@ bool nsbeos_plot_polygon(const int *p, unsigned int n, const plot_style_t *style
|
|||
|
||||
|
||||
|
||||
bool nsbeos_plot_clip(int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1)
|
||||
bool nsbeos_plot_clip(const struct rect *ns_clip)
|
||||
{
|
||||
BView *view;
|
||||
//fprintf(stderr, "%s(%d, %d, %d, %d)\n", __FUNCTION__, clip_x0, clip_y0, clip_x1, clip_y1);
|
||||
|
@ -328,7 +326,8 @@ bool nsbeos_plot_clip(int clip_x0, int clip_y0,
|
|||
return false;
|
||||
}
|
||||
|
||||
BRect rect(clip_x0, clip_y0, clip_x1 - 1, clip_y1 - 1);
|
||||
BRect rect(ns_clip->x0, ns_clip->y0, ns_clip->x1 - 1,
|
||||
ns_clip->y1 - 1);
|
||||
BRegion clip(rect);
|
||||
view->ConstrainClippingRegion(NULL);
|
||||
if (view->Bounds() != rect)
|
||||
|
@ -341,15 +340,15 @@ bool nsbeos_plot_clip(int clip_x0, int clip_y0,
|
|||
#ifdef CAIRO_VERSION
|
||||
if (option_render_cairo) {
|
||||
cairo_reset_clip(current_cr);
|
||||
cairo_rectangle(current_cr, clip_x0, clip_y0,
|
||||
clip_x1 - clip_x0, clip_y1 - clip_y0);
|
||||
cairo_rectangle(current_cr, clip->x0, clip->y0,
|
||||
clip->x1 - clip->x0, clip->y1 - clip->y0);
|
||||
cairo_clip(current_cr);
|
||||
}
|
||||
#endif
|
||||
cliprect.x = clip_x0;
|
||||
cliprect.y = clip_y0;
|
||||
cliprect.width = clip_x1 - clip_x0;
|
||||
cliprect.height = clip_y1 - clip_y0;
|
||||
cliprect.x = clip->x0;
|
||||
cliprect.y = clip->y0;
|
||||
cliprect.width = clip->x1 - clip->x0;
|
||||
cliprect.height = clip->y1 - clip->y0;
|
||||
gdk_gc_set_clip_rectangle(current_gc, &cliprect);
|
||||
#endif
|
||||
return true;
|
||||
|
@ -835,6 +834,7 @@ static void test_plotters(void)
|
|||
{
|
||||
int x0, y0;
|
||||
int x1, y1;
|
||||
struct rect r;
|
||||
|
||||
x0 = 5;
|
||||
y0 = 5;
|
||||
|
@ -853,10 +853,21 @@ static void test_plotters(void)
|
|||
plot.fill(x0, y0, x1, y1, 0x00ff0000);
|
||||
plot.rectangle(x0+10, y0+10, x1-x0+1, y1-y0+1, 2, 0x00ffff00, true, false);
|
||||
y0+=30; y1+=30;
|
||||
plot.clip(x0 + 2, y0 + 2, x1 - 2, y1 - 2);
|
||||
|
||||
r.x0 = x0 + 2;
|
||||
r.y0 = y0 + 2;
|
||||
r.x1 = x1 - 2;
|
||||
r.y1 = y1 - 2;
|
||||
plot.clip(&r);
|
||||
|
||||
plot.fill(x0, y0, x1, y1, 0x00000000);
|
||||
plot.disc(x1, y1, 8, 0x000000ff, false);
|
||||
plot.clip(0, 0, 300, 300);
|
||||
|
||||
r.x0 = 0;
|
||||
r.y0 = 0;
|
||||
r.x1 = 300;
|
||||
r.y1 = 300;
|
||||
plot.clip(&r);
|
||||
|
||||
y0+=30; y1+=30;
|
||||
|
||||
|
|
|
@ -124,9 +124,9 @@ void cocoa_set_clip( NSRect rect )
|
|||
cocoa_plot_clip_rect = rect;
|
||||
}
|
||||
|
||||
static bool plot_clip(int x0, int y0, int x1, int y1)
|
||||
static bool plot_clip(const struct rect *clip)
|
||||
{
|
||||
cocoa_plot_clip_rect = cocoa_rect( x0, y0, x1, y1 );
|
||||
cocoa_plot_clip_rect = cocoa_rect( clip->x0, clip->y0, clip->x1, clip->y1 );
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -329,4 +329,4 @@ static inline void cocoa_center_pixel( bool x, bool y )
|
|||
NSAffineTransform *transform = [NSAffineTransform transform];
|
||||
[transform translateXBy: x ? cocoa_half_pixel : 0.0 yBy: y ? cocoa_half_pixel : 0.0];
|
||||
[transform concat];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -100,7 +100,7 @@ bool browser_window_redraw(struct browser_window *bw, int x, int y,
|
|||
return false;
|
||||
}
|
||||
|
||||
plot.clip(clip->x0, clip->y0, clip->x1, clip->y1);
|
||||
plot.clip(clip);
|
||||
|
||||
if (bw->current_content == NULL) {
|
||||
return plot.rectangle(clip->x0, clip->y0, clip->x1, clip->y1,
|
||||
|
|
|
@ -628,7 +628,12 @@ bool history_redraw_entry(struct history *history,
|
|||
plot_font_style_t fstyle = *plot_style_font;
|
||||
|
||||
if (clip) {
|
||||
if(!plot.clip(x0 + xoffset, y0 + yoffset, x1 + xoffset, y1 + yoffset))
|
||||
struct rect rect;
|
||||
rect.x0 = x0 + xoffset;
|
||||
rect.y0 = y0 + yoffset;
|
||||
rect.x1 = x1 + xoffset;
|
||||
rect.y1 = y1 + yoffset;
|
||||
if(!plot.clip(&rect))
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -88,8 +88,7 @@ static bool knockout_plot_bitmap_recursive(struct knockout_box *box,
|
|||
static bool knockout_plot_line(int x0, int y0, int x1, int y1, const plot_style_t *pstyle);
|
||||
static bool knockout_plot_polygon(const int *p, unsigned int n, const plot_style_t *pstyle);
|
||||
static bool knockout_plot_rectangle(int x0, int y0, int x1, int y1, const plot_style_t *plot_style);
|
||||
static bool knockout_plot_clip(int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1);
|
||||
static bool knockout_plot_clip(const struct rect *clip);
|
||||
static bool knockout_plot_text(int x, int y, const char *text, size_t length,
|
||||
const plot_font_style_t *fstyle);
|
||||
static bool knockout_plot_disc(int x, int y, int radius, const plot_style_t *pstyle);
|
||||
|
@ -137,12 +136,7 @@ typedef enum {
|
|||
|
||||
|
||||
struct knockout_box {
|
||||
struct {
|
||||
int x0;
|
||||
int y0;
|
||||
int x1;
|
||||
int y1;
|
||||
} bbox;
|
||||
struct rect bbox;
|
||||
bool deleted; /* box has been deleted, ignore */
|
||||
struct knockout_box *child;
|
||||
struct knockout_box *next;
|
||||
|
@ -179,12 +173,7 @@ struct knockout_entry {
|
|||
int y1;
|
||||
plot_style_t plot_style;
|
||||
} fill;
|
||||
struct {
|
||||
int x0;
|
||||
int y0;
|
||||
int x1;
|
||||
int y1;
|
||||
} clip;
|
||||
struct rect clip;
|
||||
struct {
|
||||
int x;
|
||||
int y;
|
||||
|
@ -232,10 +221,7 @@ static struct knockout_box *knockout_list = NULL;
|
|||
|
||||
static struct plotter_table real_plot;
|
||||
|
||||
static int clip_x0_cur;
|
||||
static int clip_y0_cur;
|
||||
static int clip_x1_cur;
|
||||
static int clip_y1_cur;
|
||||
static struct rect clip_cur;
|
||||
static int nested_depth = 0;
|
||||
|
||||
/**
|
||||
|
@ -339,10 +325,7 @@ bool knockout_plot_flush(void)
|
|||
break;
|
||||
case KNOCKOUT_PLOT_CLIP:
|
||||
success &= plot.clip(
|
||||
knockout_entries[i].data.clip.x0,
|
||||
knockout_entries[i].data.clip.y0,
|
||||
knockout_entries[i].data.clip.x1,
|
||||
knockout_entries[i].data.clip.y1);
|
||||
&knockout_entries[i].data.clip);
|
||||
break;
|
||||
case KNOCKOUT_PLOT_TEXT:
|
||||
success &= plot.text(
|
||||
|
@ -584,10 +567,7 @@ bool knockout_plot_bitmap_recursive(struct knockout_box *box,
|
|||
if (parent->child)
|
||||
knockout_plot_bitmap_recursive(parent->child, entry);
|
||||
else {
|
||||
success &= plot.clip(parent->bbox.x0,
|
||||
parent->bbox.y0,
|
||||
parent->bbox.x1,
|
||||
parent->bbox.y1);
|
||||
success &= plot.clip(&parent->bbox);
|
||||
success &= plot.bitmap(entry->data.bitmap.x,
|
||||
entry->data.bitmap.y,
|
||||
entry->data.bitmap.width,
|
||||
|
@ -608,12 +588,12 @@ bool knockout_plot_rectangle(int x0, int y0, int x1, int y1, const plot_style_t
|
|||
/* filled draw */
|
||||
|
||||
/* get our bounds */
|
||||
kx0 = (x0 > clip_x0_cur) ? x0 : clip_x0_cur;
|
||||
ky0 = (y0 > clip_y0_cur) ? y0 : clip_y0_cur;
|
||||
kx1 = (x1 < clip_x1_cur) ? x1 : clip_x1_cur;
|
||||
ky1 = (y1 < clip_y1_cur) ? y1 : clip_y1_cur;
|
||||
if ((kx0 > clip_x1_cur) || (kx1 < clip_x0_cur) ||
|
||||
(ky0 > clip_y1_cur) || (ky1 < clip_y0_cur))
|
||||
kx0 = (x0 > clip_cur.x0) ? x0 : clip_cur.x0;
|
||||
ky0 = (y0 > clip_cur.y0) ? y0 : clip_cur.y0;
|
||||
kx1 = (x1 < clip_cur.x1) ? x1 : clip_cur.x1;
|
||||
ky1 = (y1 < clip_cur.y1) ? y1 : clip_cur.y1;
|
||||
if ((kx0 > clip_cur.x1) || (kx1 < clip_cur.x0) ||
|
||||
(ky0 > clip_cur.y1) || (ky1 < clip_cur.y0))
|
||||
return true;
|
||||
|
||||
/* fills both knock out and get knocked out */
|
||||
|
@ -707,25 +687,18 @@ bool knockout_plot_path(const float *p, unsigned int n, colour fill,
|
|||
}
|
||||
|
||||
|
||||
bool knockout_plot_clip(int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1)
|
||||
bool knockout_plot_clip(const struct rect *clip)
|
||||
{
|
||||
if (clip_x1 < clip_x0 || clip_y0 > clip_y1) {
|
||||
if (clip->x1 < clip->x0 || clip->y0 > clip->y1) {
|
||||
LOG(("bad clip rectangle %i %i %i %i",
|
||||
clip_x0, clip_y0, clip_x1, clip_y1));
|
||||
clip->x0, clip->y0, clip->x1, clip->y1));
|
||||
return false;
|
||||
}
|
||||
|
||||
/* memorise clip for bitmap tiling */
|
||||
clip_x0_cur = clip_x0;
|
||||
clip_y0_cur = clip_y0;
|
||||
clip_x1_cur = clip_x1;
|
||||
clip_y1_cur = clip_y1;
|
||||
clip_cur = *clip;
|
||||
|
||||
knockout_entries[knockout_entry_cur].data.clip.x0 = clip_x0;
|
||||
knockout_entries[knockout_entry_cur].data.clip.y0 = clip_y0;
|
||||
knockout_entries[knockout_entry_cur].data.clip.x1 = clip_x1;
|
||||
knockout_entries[knockout_entry_cur].data.clip.y1 = clip_y1;
|
||||
knockout_entries[knockout_entry_cur].data.clip = *clip;
|
||||
knockout_entries[knockout_entry_cur].type = KNOCKOUT_PLOT_CLIP;
|
||||
if (++knockout_entry_cur >= KNOCKOUT_ENTRIES)
|
||||
knockout_plot_flush();
|
||||
|
@ -783,16 +756,16 @@ bool knockout_plot_bitmap(int x, int y, int width, int height,
|
|||
int kx0, ky0, kx1, ky1;
|
||||
|
||||
/* get our bounds */
|
||||
kx0 = clip_x0_cur;
|
||||
ky0 = clip_y0_cur;
|
||||
kx1 = clip_x1_cur;
|
||||
ky1 = clip_y1_cur;
|
||||
kx0 = clip_cur.x0;
|
||||
ky0 = clip_cur.y0;
|
||||
kx1 = clip_cur.x1;
|
||||
ky1 = clip_cur.y1;
|
||||
if (!(flags & BITMAPF_REPEAT_X)) {
|
||||
if (x > kx0)
|
||||
kx0 = x;
|
||||
if (x + width < kx1)
|
||||
kx1 = x + width;
|
||||
if ((kx0 > clip_x1_cur) || (kx1 < clip_x0_cur))
|
||||
if ((kx0 > clip_cur.x1) || (kx1 < clip_cur.x0))
|
||||
return true;
|
||||
}
|
||||
if (!(flags & BITMAPF_REPEAT_Y)) {
|
||||
|
@ -800,7 +773,7 @@ bool knockout_plot_bitmap(int x, int y, int width, int height,
|
|||
ky0 = y;
|
||||
if (y + height < ky1)
|
||||
ky1 = y + height;
|
||||
if ((ky0 > clip_y1_cur) || (ky1 < clip_y0_cur))
|
||||
if ((ky0 > clip_cur.y1) || (ky1 < clip_cur.y0))
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -827,7 +800,7 @@ bool knockout_plot_bitmap(int x, int y, int width, int height,
|
|||
if ((++knockout_entry_cur >= KNOCKOUT_ENTRIES) ||
|
||||
(++knockout_box_cur >= KNOCKOUT_BOXES))
|
||||
knockout_plot_flush();
|
||||
return knockout_plot_clip(clip_x0_cur, clip_y0_cur, clip_x1_cur, clip_y1_cur);
|
||||
return knockout_plot_clip(&clip_cur);
|
||||
}
|
||||
|
||||
bool knockout_plot_group_start(const char *name)
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "css/css.h"
|
||||
#include "content/content.h"
|
||||
#include "desktop/plot_style.h"
|
||||
#include "desktop/shape.h"
|
||||
|
||||
struct bitmap;
|
||||
|
||||
|
@ -96,7 +97,7 @@ typedef unsigned long bitmap_flags_t;
|
|||
*/
|
||||
struct plotter_table {
|
||||
/* clipping operations */
|
||||
bool (*clip)(int x0, int y0, int x1, int y1);
|
||||
bool (*clip)(const struct rect *clip);
|
||||
|
||||
/* shape primatives */
|
||||
bool (*arc)(int x, int y, int radius, int angle1, int angle2, const plot_style_t *pstyle);
|
||||
|
|
|
@ -49,8 +49,7 @@
|
|||
static bool pdf_plot_rectangle(int x0, int y0, int x1, int y1, const plot_style_t *style);
|
||||
static bool pdf_plot_line(int x0, int y0, int x1, int y1, const plot_style_t *pstyle);
|
||||
static bool pdf_plot_polygon(const int *p, unsigned int n, const plot_style_t *style);
|
||||
static bool pdf_plot_clip(int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1);
|
||||
static bool pdf_plot_clip(const struct rect *clip);
|
||||
static bool pdf_plot_text(int x, int y, const char *text, size_t length,
|
||||
const plot_font_style_t *fstyle);
|
||||
static bool pdf_plot_disc(int x, int y, int radius, const plot_style_t *style);
|
||||
|
@ -267,19 +266,19 @@ bool pdf_plot_polygon(const int *p, unsigned int n, const plot_style_t *style)
|
|||
|
||||
|
||||
/**here the clip is only queried */
|
||||
bool pdf_plot_clip(int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
||||
bool pdf_plot_clip(const struct rect *clip)
|
||||
{
|
||||
#ifdef PDF_DEBUG
|
||||
LOG(("%d %d %d %d", clip_x0, clip_y0, clip_x1, clip_y1));
|
||||
LOG(("%d %d %d %d", clip->x0, clip->y0, clip->x1, clip->y1));
|
||||
#endif
|
||||
|
||||
/*Normalize cllipping area - to prevent overflows.
|
||||
See comment in pdf_plot_fill.
|
||||
*/
|
||||
last_clip_x0 = min(max(clip_x0, 0), page_width);
|
||||
last_clip_y0 = min(max(clip_y0, 0), page_height);
|
||||
last_clip_x1 = min(max(clip_x1, 0), page_width);
|
||||
last_clip_y1 = min(max(clip_y1, 0), page_height);
|
||||
last_clip_x0 = min(max(clip->x0, 0), page_width);
|
||||
last_clip_y0 = min(max(clip->y0, 0), page_height);
|
||||
last_clip_x1 = min(max(clip->x1, 0), page_width);
|
||||
last_clip_y1 = min(max(clip->y1, 0), page_height);
|
||||
|
||||
clip_update_needed = true;
|
||||
|
||||
|
|
|
@ -777,7 +777,7 @@ void textarea_redraw(struct text_area *ta, int x, int y,
|
|||
if (r.y1 > y + ta->vis_height)
|
||||
r.y1 = y + ta->vis_height;
|
||||
|
||||
plot.clip(r.x0, r.y0, r.x1, r.y1);
|
||||
plot.clip(&r);
|
||||
plot.rectangle(r.x0, r.y0, r.x1, r.y1, &plot_style_fill_bg);
|
||||
plot.rectangle(x, y,
|
||||
x + ta->vis_width - 1, y + ta->vis_height - 1,
|
||||
|
@ -787,7 +787,7 @@ void textarea_redraw(struct text_area *ta, int x, int y,
|
|||
r.x0 = x + MARGIN_LEFT;
|
||||
if (r.x1 > x + ta->vis_width - MARGIN_RIGHT)
|
||||
r.x1 = x + ta->vis_width - MARGIN_RIGHT;
|
||||
plot.clip(r.x0, r.y0, r.x1, r.y1);
|
||||
plot.clip(&r);
|
||||
|
||||
if (line0 > 0)
|
||||
c_pos = utf8_bounded_length(ta->text,
|
||||
|
|
|
@ -1577,7 +1577,7 @@ static void tree_draw_node_expansion_toggle(struct tree *tree,
|
|||
*/
|
||||
static void tree_draw_node_element(struct tree *tree,
|
||||
struct node_element *element, int tree_x, int tree_y,
|
||||
struct rect clip)
|
||||
const struct rect *clip)
|
||||
{
|
||||
|
||||
struct bitmap *bitmap = NULL;
|
||||
|
@ -1605,28 +1605,28 @@ static void tree_draw_node_element(struct tree *tree,
|
|||
CONTENT_STATUS_READY ||
|
||||
content_get_status(icon) ==
|
||||
CONTENT_STATUS_DONE) &&
|
||||
x + TREE_ICON_SIZE > clip.x0 &&
|
||||
x < clip.x1) {
|
||||
x + TREE_ICON_SIZE > clip->x0 &&
|
||||
x < clip->x1) {
|
||||
struct rect c;
|
||||
/* Clip to image area */
|
||||
c.x0 = x;
|
||||
c.y0 = y + icon_inset;
|
||||
c.x1 = x + TREE_ICON_SIZE;
|
||||
c.y1 = y + icon_inset + TREE_ICON_SIZE;
|
||||
if (c.x0 < clip.x0) c.x0 = clip.x0;
|
||||
if (c.y0 < clip.y0) c.y0 = clip.y0;
|
||||
if (c.x1 > clip.x1) c.x1 = clip.x1;
|
||||
if (c.y1 > clip.y1) c.y1 = clip.y1;
|
||||
if (c.x0 < clip->x0) c.x0 = clip->x0;
|
||||
if (c.y0 < clip->y0) c.y0 = clip->y0;
|
||||
if (c.x1 > clip->x1) c.x1 = clip->x1;
|
||||
if (c.y1 > clip->y1) c.y1 = clip->y1;
|
||||
|
||||
if (c.x1 > c.x0 && c.y1 > c.y0) {
|
||||
/* Valid clip rectangles only */
|
||||
plot.clip(c.x0, c.y0, c.x1, c.y1);
|
||||
plot.clip(&c);
|
||||
content_redraw(icon , x, y + icon_inset,
|
||||
TREE_ICON_SIZE, TREE_ICON_SIZE,
|
||||
&c, 1, 0);
|
||||
|
||||
/* Restore previous clipping area */
|
||||
plot.clip(clip.x0, clip.y0, clip.x1, clip.y1);
|
||||
plot.clip(clip);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1635,7 +1635,7 @@ static void tree_draw_node_element(struct tree *tree,
|
|||
|
||||
/* fall through */
|
||||
case NODE_ELEMENT_TEXT:
|
||||
if (element->text == NULL || clip.x1 < x)
|
||||
if (element->text == NULL || clip->x1 < x)
|
||||
break;
|
||||
|
||||
if (element == tree->editing)
|
||||
|
@ -1720,7 +1720,7 @@ static void tree_draw_node(struct tree *tree, struct node *node,
|
|||
}
|
||||
|
||||
/* Set up the clipping area */
|
||||
plot.clip(clip.x0, clip.y0, clip.x1, clip.y1);
|
||||
plot.clip(&clip);
|
||||
|
||||
/* Draw node's furniture */
|
||||
if (!(tree->flags & TREE_NO_FURNITURE)) {
|
||||
|
@ -1772,11 +1772,12 @@ static void tree_draw_node(struct tree *tree, struct node *node,
|
|||
element = element->next) {
|
||||
/* Draw each element of expanded node */
|
||||
tree_draw_node_element(tree, element, tree_x, tree_y,
|
||||
clip);
|
||||
&clip);
|
||||
}
|
||||
} else {
|
||||
/* Draw main title element of node */
|
||||
tree_draw_node_element(tree, &node->data, tree_x, tree_y, clip);
|
||||
tree_draw_node_element(tree, &node->data, tree_x, tree_y,
|
||||
&clip);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1849,7 +1850,7 @@ void tree_draw(struct tree *tree, int x, int y,
|
|||
clip.y0 = y + clip_y;
|
||||
clip.x1 = clip.x0 + clip_width;
|
||||
clip.y1 = clip.y0 + clip_height;
|
||||
plot.clip(clip.x0, clip.y0, clip.x1, clip.y1);
|
||||
plot.clip(&clip);
|
||||
|
||||
/* Flat fill extents of clipping area */
|
||||
plot.rectangle(clip.x0, clip.y0, clip.x1, clip.y1,
|
||||
|
|
|
@ -331,15 +331,15 @@ framebuffer_plot_path(const float *p,
|
|||
}
|
||||
|
||||
static bool
|
||||
framebuffer_plot_clip(int x0, int y0, int x1, int y1)
|
||||
framebuffer_plot_clip(const struct rect *clip)
|
||||
{
|
||||
nsfb_bbox_t clip;
|
||||
clip.x0 = x0;
|
||||
clip.y0 = y0;
|
||||
clip.x1 = x1;
|
||||
clip.y1 = y1;
|
||||
nsfb_bbox_t nsfb_clip;
|
||||
nsfb_clip.x0 = clip->x0;
|
||||
nsfb_clip.y0 = clip->y0;
|
||||
nsfb_clip.x1 = clip->x1;
|
||||
nsfb_clip.y1 = clip->y1;
|
||||
|
||||
return nsfb_plot_set_clip(nsfb, &clip);
|
||||
return nsfb_plot_set_clip(nsfb, &nsfb_clip);
|
||||
}
|
||||
|
||||
struct plotter_table plot = {
|
||||
|
|
|
@ -133,17 +133,17 @@ static inline void nsgtk_set_dashed(void)
|
|||
}
|
||||
|
||||
/** Set clipping area for subsequent plot operations. */
|
||||
static bool nsgtk_plot_clip(int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
||||
static bool nsgtk_plot_clip(const struct rect *clip)
|
||||
{
|
||||
cairo_reset_clip(current_cr);
|
||||
cairo_rectangle(current_cr, clip_x0, clip_y0,
|
||||
clip_x1 - clip_x0, clip_y1 - clip_y0);
|
||||
cairo_rectangle(current_cr, clip->x0, clip->y0,
|
||||
clip->x1 - clip->x0, clip->y1 - clip->y0);
|
||||
cairo_clip(current_cr);
|
||||
|
||||
cliprect.x = clip_x0;
|
||||
cliprect.y = clip_y0;
|
||||
cliprect.width = clip_x1 - clip_x0;
|
||||
cliprect.height = clip_y1 - clip_y0;
|
||||
cliprect.x = clip->x0;
|
||||
cliprect.y = clip->y0;
|
||||
cliprect.width = clip->x1 - clip->x0;
|
||||
cliprect.height = clip->y1 - clip->y0;
|
||||
gdk_gc_set_clip_rectangle(current_gc, &cliprect);
|
||||
|
||||
return true;
|
||||
|
|
12
gtk/print.c
12
gtk/print.c
|
@ -169,17 +169,17 @@ static inline void nsgtk_print_set_dashed(void)
|
|||
}
|
||||
|
||||
/** Set clipping area for subsequent plot operations. */
|
||||
static bool nsgtk_print_plot_clip(int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
||||
static bool nsgtk_print_plot_clip(struct rect *clip)
|
||||
{
|
||||
LOG(("Clipping. x0: %i ;\t y0: %i ;\t x1: %i ;\t y1: %i",
|
||||
clip_x0,clip_y0,clip_x1,clip_y1));
|
||||
clip->x0, clip->y0, clip->x1, clip->y1));
|
||||
|
||||
/* Normalize cllipping area - to prevent overflows.
|
||||
* See comment in pdf_plot_fill. */
|
||||
clip_x0 = min(max(clip_x0, 0), settings->page_width);
|
||||
clip_y0 = min(max(clip_y0, 0), settings->page_height);
|
||||
clip_x1 = min(max(clip_x1, 0), settings->page_width);
|
||||
clip_y1 = min(max(clip_y1, 0), settings->page_height);
|
||||
int clip_x0 = min(max(clip->x0, 0), settings->page_width);
|
||||
int clip_y0 = min(max(clip->y0, 0), settings->page_height);
|
||||
int clip_x1 = min(max(clip->x1, 0), settings->page_width);
|
||||
int clip_y1 = min(max(clip->y1, 0), settings->page_height);
|
||||
|
||||
cairo_reset_clip(gtk_print_current_cr);
|
||||
cairo_rectangle(gtk_print_current_cr, clip_x0, clip_y0,
|
||||
|
|
|
@ -1486,6 +1486,7 @@ BUTTONHANDLER(history)
|
|||
static gboolean nsgtk_history_expose_event(GtkWidget *widget,
|
||||
GdkEventExpose *event, gpointer g)
|
||||
{
|
||||
struct rect clip;
|
||||
struct gtk_history_window *hw = (struct gtk_history_window *)g;
|
||||
struct browser_window *bw =
|
||||
gui_window_get_browser_window(hw->g->top_level);
|
||||
|
@ -1499,10 +1500,11 @@ static gboolean nsgtk_history_expose_event(GtkWidget *widget,
|
|||
plot = nsgtk_plotters;
|
||||
nsgtk_plot_set_scale(1.0);
|
||||
|
||||
plot.clip(event->area.x,
|
||||
event->area.y,
|
||||
event->area.x + event->area.width,
|
||||
event->area.y + event->area.height);
|
||||
clip.x0 = event->area.x;
|
||||
clip.y0 = event->area.y;
|
||||
clip.x1 = event->area.x + event->area.width;
|
||||
clip.y1 = event->area.y + event->area.height;
|
||||
plot.clip(&clip);
|
||||
|
||||
history_redraw(bw->history);
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ bool thumbnail_create(hlcache_handle *content, struct bitmap *bitmap,
|
|||
#endif
|
||||
plot.rectangle(0, 0, cwidth, cwidth, plot_style_fill_white);
|
||||
|
||||
plot.clip(clip.x0, clip.y0, clip.x1, clip.y1);
|
||||
plot.clip(&clip);
|
||||
|
||||
/* render the content */
|
||||
content_redraw(content, 0, 0, content_get_width(content),
|
||||
|
|
|
@ -975,7 +975,7 @@ void form_free_select_menu(struct form_control *control)
|
|||
* \return true on success, false otherwise
|
||||
*/
|
||||
bool form_redraw_select_menu(struct form_control *control, int x, int y,
|
||||
float scale, int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
||||
float scale, const struct rect *clip)
|
||||
{
|
||||
struct box *box;
|
||||
struct form_select_menu *menu = control->data.select.menu;
|
||||
|
@ -989,11 +989,7 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y,
|
|||
int i;
|
||||
int scroll;
|
||||
int x_cp, y_cp;
|
||||
struct rect clip;
|
||||
clip.x0 = clip_x0;
|
||||
clip.y0 = clip_y0;
|
||||
clip.x1 = clip_x1;
|
||||
clip.y1 = clip_y1;
|
||||
struct rect r;
|
||||
|
||||
box = control->box;
|
||||
|
||||
|
@ -1028,8 +1024,12 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y,
|
|||
x1 = x + width - 1;
|
||||
y1 = y + height - 1;
|
||||
scrollbar_x = x1 - scrollbar_width;
|
||||
|
||||
if (!plot.clip(x0, y0, x1 + 1, y1 + 1))
|
||||
|
||||
r.x0 = x0;
|
||||
r.y0 = y0;
|
||||
r.x1 = x1 + 1;
|
||||
r.y1 = y1 + 1;
|
||||
if (!plot.clip(&r))
|
||||
return false;
|
||||
if (!plot.rectangle(x0, y0, x1, y1 ,plot_style_stroke_darkwbasec))
|
||||
return false;
|
||||
|
@ -1041,7 +1041,11 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y,
|
|||
y1 = y1 - SELECT_BORDER_WIDTH;
|
||||
height = height - 2 * SELECT_BORDER_WIDTH;
|
||||
|
||||
if (!plot.clip(x0, y0, x1 + 1, y1 + 1))
|
||||
r.x0 = x0;
|
||||
r.y0 = y0;
|
||||
r.x1 = x1 + 1;
|
||||
r.y1 = y1 + 1;
|
||||
if (!plot.clip(&r))
|
||||
return false;
|
||||
if (!plot.rectangle(x0, y0, x1 + 1, y1 + 1,
|
||||
plot_style_fill_lightwbasec))
|
||||
|
@ -1084,7 +1088,7 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y,
|
|||
if (!scroll_redraw(menu->scroll,
|
||||
x_cp + menu->width - SCROLLBAR_WIDTH,
|
||||
y_cp,
|
||||
&clip, scale))
|
||||
clip, scale))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
@ -1103,7 +1107,7 @@ bool form_redraw_select_menu(struct form_control *control, int x, int y,
|
|||
* \return true if inside false otherwise
|
||||
*/
|
||||
bool form_clip_inside_select_menu(struct form_control *control, float scale,
|
||||
int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
||||
const struct rect *clip)
|
||||
{
|
||||
struct form_select_menu *menu = control->data.select.menu;
|
||||
int width, height;
|
||||
|
@ -1117,8 +1121,8 @@ bool form_clip_inside_select_menu(struct form_control *control, float scale,
|
|||
height *= scale;
|
||||
}
|
||||
|
||||
if (clip_x0 >= 0 && clip_x1 <= width &&
|
||||
clip_y0 >= 0 && clip_y1 <= height)
|
||||
if (clip->x0 >= 0 && clip->x1 <= width &&
|
||||
clip->y0 >= 0 && clip->y1 <= height)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
|
|
@ -161,10 +161,9 @@ void form_select_menu_callback(void *client_data,
|
|||
int x, int y, int width, int height);
|
||||
void form_free_select_menu(struct form_control *control);
|
||||
bool form_redraw_select_menu(struct form_control *control, int x, int y,
|
||||
float scale,
|
||||
int clip_x0, int clip_y0, int clip_x1, int clip_y1);
|
||||
float scale, const struct rect *clip);
|
||||
bool form_clip_inside_select_menu(struct form_control *control, float scale,
|
||||
int clip_x0, int clip_y0, int clip_x1, int clip_y1);
|
||||
const struct rect *clip);
|
||||
const char *form_select_mouse_action(struct form_control *control,
|
||||
browser_mouse_state mouse, int x, int y);
|
||||
void form_select_mouse_drag_end(struct form_control *control,
|
||||
|
|
|
@ -141,12 +141,12 @@ bool html_redraw(struct content *c, int x, int y,
|
|||
/* check if the redraw rectangle is completely inside of the
|
||||
select menu */
|
||||
select_only = form_clip_inside_select_menu(control, scale,
|
||||
clip->x0, clip->y0, clip->x1, clip->y1);
|
||||
clip);
|
||||
}
|
||||
|
||||
if (!select_only) {
|
||||
/* clear to background colour */
|
||||
result = plot.clip(clip->x0, clip->y0, clip->x1, clip->y1);
|
||||
result = plot.clip(clip);
|
||||
|
||||
if (c->data.html.background_colour != NS_TRANSPARENT)
|
||||
pstyle_fill_bg.fill_colour =
|
||||
|
@ -170,8 +170,7 @@ bool html_redraw(struct content *c, int x, int y,
|
|||
result &= form_redraw_select_menu(
|
||||
current_redraw_browser->visible_select_menu,
|
||||
x + menu_x, y + menu_y,
|
||||
current_redraw_browser->scale,
|
||||
clip->x0, clip->y0, clip->x1, clip->y1);
|
||||
current_redraw_browser->scale, clip);
|
||||
}
|
||||
|
||||
if (want_knockout)
|
||||
|
@ -412,7 +411,7 @@ bool html_redraw_box(struct box *box, int x_parent, int y_parent,
|
|||
/* not an error */
|
||||
return ((!plot.group_end) || (plot.group_end()));
|
||||
/* clip to it */
|
||||
if (!plot.clip(r.x0, r.y0, r.x1, r.y1))
|
||||
if (!plot.clip(&r))
|
||||
return false;
|
||||
} else {
|
||||
/* clip box unchanged */
|
||||
|
@ -470,7 +469,7 @@ bool html_redraw_box(struct box *box, int x_parent, int y_parent,
|
|||
¤t_background_color, bg_box))
|
||||
return false;
|
||||
/* restore previous graphics window */
|
||||
if (!plot.clip(r.x0, r.y0, r.x1, r.y1))
|
||||
if (!plot.clip(&r))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -544,7 +543,7 @@ bool html_redraw_box(struct box *box, int x_parent, int y_parent,
|
|||
¤t_background_color))
|
||||
return false;
|
||||
/* restore previous graphics window */
|
||||
if (!plot.clip(r.x0, r.y0, r.x1, r.y1))
|
||||
if (!plot.clip(&r))
|
||||
return false;
|
||||
if (!html_redraw_inline_borders(box, b, r,
|
||||
scale, first, false))
|
||||
|
@ -576,7 +575,7 @@ bool html_redraw_box(struct box *box, int x_parent, int y_parent,
|
|||
first, true, ¤t_background_color))
|
||||
return false;
|
||||
/* restore previous graphics window */
|
||||
if (!plot.clip(r.x0, r.y0, r.x1, r.y1))
|
||||
if (!plot.clip(&r))
|
||||
return false;
|
||||
if (!html_redraw_inline_borders(box, b, r, scale, first, true))
|
||||
return false;
|
||||
|
@ -639,7 +638,7 @@ bool html_redraw_box(struct box *box, int x_parent, int y_parent,
|
|||
return ((!plot.group_end) || (plot.group_end()));
|
||||
if (box->type == BOX_BLOCK || box->type == BOX_INLINE_BLOCK ||
|
||||
box->type == BOX_TABLE_CELL || box->object) {
|
||||
if (!plot.clip(r.x0, r.y0, r.x1, r.y1))
|
||||
if (!plot.clip(&r))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -734,7 +733,7 @@ bool html_redraw_box(struct box *box, int x_parent, int y_parent,
|
|||
|
||||
if (box->type == BOX_BLOCK || box->type == BOX_INLINE_BLOCK ||
|
||||
box->type == BOX_TABLE_CELL || box->object)
|
||||
if (!plot.clip(clip.x0, clip.y0, clip.x1, clip.y1))
|
||||
if (!plot.clip(&clip))
|
||||
return false;
|
||||
|
||||
return ((!plot.group_end) || (plot.group_end()));
|
||||
|
@ -875,6 +874,7 @@ bool text_redraw(const char *utf8_text, size_t utf8_len,
|
|||
|
||||
/* \todo make search terms visible within selected text */
|
||||
if (highlighted) {
|
||||
struct rect r;
|
||||
unsigned endtxt_idx = end_idx;
|
||||
bool clip_changed = false;
|
||||
bool text_visible = true;
|
||||
|
@ -936,8 +936,11 @@ bool text_redraw(const char *utf8_text, size_t utf8_len,
|
|||
int px1 = min(x + endx, clip->x1);
|
||||
|
||||
if (px0 < px1) {
|
||||
if (!plot.clip(px0, clip->y0, px1,
|
||||
clip->y1))
|
||||
r.x0 = px0;
|
||||
r.y0 = clip->y0;
|
||||
r.x1 = px1;
|
||||
r.y1 = clip->y1;
|
||||
if (!plot.clip(&r))
|
||||
return false;
|
||||
clip_changed = true;
|
||||
} else {
|
||||
|
@ -961,8 +964,11 @@ bool text_redraw(const char *utf8_text, size_t utf8_len,
|
|||
int px0 = max(x + endx, clip->x0);
|
||||
if (px0 < clip->x1) {
|
||||
|
||||
if (!plot.clip(px0, clip->y0,
|
||||
clip->x1, clip->y1))
|
||||
r.x0 = px0;
|
||||
r.y0 = clip->y0;
|
||||
r.x1 = clip->x1;
|
||||
r.y1 = clip->y1;
|
||||
if (!plot.clip(&r))
|
||||
return false;
|
||||
|
||||
clip_changed = true;
|
||||
|
@ -976,8 +982,7 @@ bool text_redraw(const char *utf8_text, size_t utf8_len,
|
|||
}
|
||||
|
||||
if (clip_changed &&
|
||||
!plot.clip(clip->x0, clip->y0,
|
||||
clip->x1, clip->y1))
|
||||
!plot.clip(clip))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -2172,8 +2177,7 @@ bool html_redraw_background(int x, int y, struct box *box, float scale,
|
|||
}
|
||||
/* valid clipping rectangles only */
|
||||
if ((clip.x0 < clip.x1) && (clip.y0 < clip.y1)) {
|
||||
if (!plot.clip(clip.x0, clip.y0,
|
||||
clip.x1, clip.y1))
|
||||
if (!plot.clip(&clip))
|
||||
return false;
|
||||
if (!content_redraw_tiled(
|
||||
background->background, x, y,
|
||||
|
@ -2314,8 +2318,7 @@ bool html_redraw_inline_background(int x, int y, struct box *box, float scale,
|
|||
}
|
||||
/* valid clipping rectangles only */
|
||||
if ((clip.x0 < clip.x1) && (clip.y0 < clip.y1)) {
|
||||
if (!plot.clip(clip.x0, clip.y0,
|
||||
clip.x1, clip.y1))
|
||||
if (!plot.clip(&clip))
|
||||
return false;
|
||||
if (!content_redraw_tiled(box->background, x, y,
|
||||
ceilf(width * scale),
|
||||
|
|
|
@ -61,11 +61,10 @@ enum align {
|
|||
static plot_font_style_t fstyle;
|
||||
static plot_style_t style;
|
||||
|
||||
static void debugwin_redraw(int clip_x0, int clip_y0, int clip_x1, int clip_y1);
|
||||
static void debugwin_redraw(const struct rect *clip);
|
||||
static void debugwin_get_size(int *width, int *height);
|
||||
static bool debugwin_render_cell(int x, int y, int width, int height,
|
||||
const char *text, enum align align, int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1);
|
||||
const char *text, enum align align, const struct rect *clip);
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -152,21 +151,21 @@ void ro_gui_debugwin_redraw(wimp_draw *redraw)
|
|||
return;
|
||||
}
|
||||
while (more) {
|
||||
int clip_x0, clip_y0, clip_x1, clip_y1;
|
||||
struct rect clip;
|
||||
|
||||
/* Sep plot origin */
|
||||
ro_plot_origin_x = redraw->box.x0 - redraw->xscroll;
|
||||
ro_plot_origin_y = redraw->box.y1 - redraw->yscroll;
|
||||
|
||||
/* Set clip rectangle */
|
||||
clip_x0 = (redraw->clip.x0 - ro_plot_origin_x) / 2; /* left */
|
||||
clip_y0 = (ro_plot_origin_y - redraw->clip.y1) / 2; /* top */
|
||||
clip_x1 = (redraw->clip.x1 - ro_plot_origin_x) / 2; /* right */
|
||||
clip_y1 = (ro_plot_origin_y - redraw->clip.y0) / 2; /* bottom */
|
||||
plot.clip(clip_x0, clip_y0, clip_x1, clip_y1);
|
||||
clip.x0 = (redraw->clip.x0 - ro_plot_origin_x) / 2; /* left */
|
||||
clip.y0 = (ro_plot_origin_y - redraw->clip.y1) / 2; /* top */
|
||||
clip.x1 = (redraw->clip.x1 - ro_plot_origin_x) / 2; /* right */
|
||||
clip.y1 = (ro_plot_origin_y - redraw->clip.y0) / 2; /* bottom */
|
||||
plot.clip(&clip);
|
||||
|
||||
/* Render the content debug table */
|
||||
debugwin_redraw(clip_x0, clip_y0, clip_x1, clip_y1);
|
||||
debugwin_redraw(&clip);
|
||||
|
||||
error = xwimp_get_rectangle(redraw, &more);
|
||||
if (error) {
|
||||
|
@ -179,7 +178,7 @@ void ro_gui_debugwin_redraw(wimp_draw *redraw)
|
|||
}
|
||||
|
||||
|
||||
void debugwin_redraw(int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
||||
void debugwin_redraw(const struct rect *clip)
|
||||
{
|
||||
char s[40];
|
||||
int y, x, w;
|
||||
|
@ -225,38 +224,31 @@ void debugwin_redraw(int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
|||
x = 0;
|
||||
w = w_url;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
"url", DEBUGWIN_CENTRE, clip_x0, clip_y0,
|
||||
clip_x1, clip_y1);
|
||||
"url", DEBUGWIN_CENTRE, clip);
|
||||
x += w + 1;
|
||||
w = w_type;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
"type", DEBUGWIN_CENTRE, clip_x0, clip_y0,
|
||||
clip_x1, clip_y1);
|
||||
"type", DEBUGWIN_CENTRE, clip);
|
||||
x += w + 1;
|
||||
w = w_fresh;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
"fresh", DEBUGWIN_CENTRE, clip_x0, clip_y0,
|
||||
clip_x1, clip_y1);
|
||||
"fresh", DEBUGWIN_CENTRE, clip);
|
||||
x += w + 1;
|
||||
w = w_mime_type;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
"mime-type", DEBUGWIN_CENTRE, clip_x0, clip_y0,
|
||||
clip_x1, clip_y1);
|
||||
"mime-type", DEBUGWIN_CENTRE, clip);
|
||||
x += w + 1;
|
||||
w = w_users;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
"users", DEBUGWIN_CENTRE, clip_x0, clip_y0,
|
||||
clip_x1, clip_y1);
|
||||
"users", DEBUGWIN_CENTRE, clip);
|
||||
x += w + 1;
|
||||
w = w_status;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
"status", DEBUGWIN_CENTRE, clip_x0, clip_y0,
|
||||
clip_x1, clip_y1);
|
||||
"status", DEBUGWIN_CENTRE, clip);
|
||||
x += w + 1;
|
||||
w = w_size;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
"size", DEBUGWIN_CENTRE, clip_x0, clip_y0,
|
||||
clip_x1, clip_y1);
|
||||
"size", DEBUGWIN_CENTRE, clip);
|
||||
|
||||
/* Move down to next row */
|
||||
y += DEBUGWIN_TEXT_HEIGHT + 2 * DEBUGWIN_CELL_PADDING + 1;
|
||||
|
@ -273,20 +265,19 @@ void debugwin_redraw(int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
|||
x = 0;
|
||||
w = w_url;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
content->url, DEBUGWIN_RIGHT, clip_x0, clip_y0,
|
||||
clip_x1, clip_y1);
|
||||
content->url, DEBUGWIN_RIGHT, clip);
|
||||
/* Create Type cell */
|
||||
x += w + 1;
|
||||
w = w_type;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
content_type_name[content->type], DEBUGWIN_LEFT,
|
||||
clip_x0, clip_y0, clip_x1, clip_y1);
|
||||
clip);
|
||||
/* Create cell for showing wheher content is fresh */
|
||||
x += w + 1;
|
||||
w = w_fresh;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
content->fresh ? "yes" : "no", DEBUGWIN_LEFT,
|
||||
clip_x0, clip_y0, clip_x1, clip_y1);
|
||||
clip);
|
||||
/* Create Mime-type cell */
|
||||
x += w + 1;
|
||||
w = w_mime_type;
|
||||
|
@ -302,15 +293,13 @@ void debugwin_redraw(int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
|||
x += w + 1;
|
||||
w = w_users;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
s, DEBUGWIN_RIGHT, clip_x0, clip_y0,
|
||||
clip_x1, clip_y1);
|
||||
s, DEBUGWIN_RIGHT, clip);
|
||||
/* Create Status cell */
|
||||
x += w + 1;
|
||||
w = w_status;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
content_status_name[content->status],
|
||||
DEBUGWIN_LEFT, clip_x0, clip_y0,
|
||||
clip_x1, clip_y1);
|
||||
DEBUGWIN_LEFT, clip);
|
||||
/* Create Size cell */
|
||||
talloc_size = talloc_total_size(content);
|
||||
snprintf(s, sizeof s, "%u+%u= %u", content->size, talloc_size,
|
||||
|
@ -318,8 +307,7 @@ void debugwin_redraw(int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
|||
x += w + 1;
|
||||
w = w_size;
|
||||
debugwin_render_cell(x, y, w, DEBUGWIN_TEXT_HEIGHT,
|
||||
s, DEBUGWIN_RIGHT, clip_x0, clip_y0,
|
||||
clip_x1, clip_y1);
|
||||
s, DEBUGWIN_RIGHT, clip);
|
||||
|
||||
/* Keep running total of size used */
|
||||
size += content->size + talloc_size;
|
||||
|
@ -332,7 +320,7 @@ void debugwin_redraw(int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
|||
/* Show total size */
|
||||
debugwin_render_cell(DEBUGWIN_WINDOW_WIDTH - w_size, y,
|
||||
w_size, DEBUGWIN_TEXT_HEIGHT, s, DEBUGWIN_RIGHT,
|
||||
clip_x0, clip_y0, clip_x1, clip_y1);
|
||||
clip);
|
||||
|
||||
/* Heading cell for total size */
|
||||
fstyle.weight = 900;
|
||||
|
@ -342,7 +330,7 @@ void debugwin_redraw(int clip_x0, int clip_y0, int clip_x1, int clip_y1)
|
|||
debugwin_render_cell(0, y,
|
||||
DEBUGWIN_WINDOW_WIDTH - w_size - 1,
|
||||
DEBUGWIN_TEXT_HEIGHT, "total size:", DEBUGWIN_RIGHT,
|
||||
clip_x0, clip_y0, clip_x1, clip_y1);
|
||||
clip);
|
||||
|
||||
// if (want_knockout)
|
||||
// knockout_plot_end();
|
||||
|
@ -369,24 +357,25 @@ void debugwin_get_size(int *width, int *height)
|
|||
|
||||
|
||||
bool debugwin_render_cell(int x, int y, int width, int height,
|
||||
const char *text, enum align align, int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1)
|
||||
const char *text, enum align align, const struct rect *clip)
|
||||
{
|
||||
int text_width;
|
||||
size_t length;
|
||||
struct rect r;
|
||||
|
||||
height += 2 * DEBUGWIN_CELL_PADDING;
|
||||
|
||||
/* Return if the rectangle is completely outside the clip rectangle */
|
||||
if (clip_y1 < y || y + height < clip_y0 ||
|
||||
clip_x1 < x || x + width < clip_x0)
|
||||
if (clip->y1 < y || y + height < clip->y0 ||
|
||||
clip->x1 < x || x + width < clip->x0)
|
||||
return true;
|
||||
|
||||
/* Clip to intersection of clip rectangle and cell */
|
||||
if (!plot.clip( (x < clip_x0) ? clip_x0 : x,
|
||||
(y < clip_y0) ? clip_y0 : y,
|
||||
(clip_x1 < x + width) ? clip_x1 : x + width,
|
||||
(clip_y1 < y + height) ? clip_y1 : y + height))
|
||||
r.x0 = (x < clip->x0) ? clip->x0 : x;
|
||||
r.y0 = (y < clip->y0) ? clip->y0 : y;
|
||||
r.x1 = (clip->x1 < x + width) ? clip->x1 : x + width;
|
||||
r.y1 = (clip->y1 < y + height) ? clip->y1 : y + height);
|
||||
if (!plot.clip(&r))
|
||||
return false;
|
||||
|
||||
/* Plot cell background */
|
||||
|
@ -425,7 +414,7 @@ bool debugwin_render_cell(int x, int y, int width, int height,
|
|||
return false;
|
||||
|
||||
/* Restore previous clip rectangle */
|
||||
if (!plot.clip(clip_x0, clip_y0, clip_x1, clip_y1))
|
||||
if (!plot.clip(clip))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
|
@ -468,7 +468,7 @@ void ro_gui_progress_bar_redraw_window(wimp_draw *redraw,
|
|||
{
|
||||
os_error *error;
|
||||
osbool more = true;
|
||||
int clip_x0 = 0, clip_y0 = 0, clip_x1 = 0, clip_y1 = 0;
|
||||
struct rect clip;
|
||||
int progress_ymid;
|
||||
|
||||
/* initialise the plotters */
|
||||
|
@ -492,25 +492,25 @@ void ro_gui_progress_bar_redraw_window(wimp_draw *redraw,
|
|||
redraw->box.y0 + pb->icon_y0,
|
||||
tinct_ERROR_DIFFUSE);
|
||||
if (!pb->icon_obscured) {
|
||||
clip_x0 = max(redraw->clip.x0,
|
||||
clip.x0 = max(redraw->clip.x0,
|
||||
redraw->box.x0 + pb->visible.x0) >> 1;
|
||||
clip_y0 = -min(redraw->clip.y1,
|
||||
clip.y0 = -min(redraw->clip.y1,
|
||||
redraw->box.y0 + pb->visible.y1) >> 1;
|
||||
clip_x1 = min(redraw->clip.x1,
|
||||
clip.x1 = min(redraw->clip.x1,
|
||||
redraw->box.x0 + pb->visible.x1) >> 1;
|
||||
clip_y1 = -max(redraw->clip.y0,
|
||||
clip.y1 = -max(redraw->clip.y0,
|
||||
redraw->box.y0 + pb->visible.y0) >> 1;
|
||||
if ((clip_x0 < clip_x1) && (clip_y0 < clip_y1)) {
|
||||
if ((clip.x0 < clip.x1) && (clip.y0 < clip.y1)) {
|
||||
if (progress_icon) {
|
||||
plot.clip(clip_x0, clip_y0, clip_x1, clip_y1);
|
||||
plot.clip(&clip);
|
||||
_swix(Tinct_Plot, _IN(2) | _IN(3) | _IN(4) | _IN(7),
|
||||
progress_icon,
|
||||
redraw->box.x0 - pb->offset,
|
||||
progress_ymid - progress_height,
|
||||
tinct_FILL_HORIZONTALLY);
|
||||
} else {
|
||||
plot.rectangle(clip_x0, clip_y0,
|
||||
clip_x1, clip_y1,
|
||||
plot.rectangle(clip.x0, clip.y0,
|
||||
clip.x1, clip.y1,
|
||||
plot_style_fill_red);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,8 +41,7 @@ static bool ro_plot_draw_path(const draw_path * const path, int width,
|
|||
static bool ro_plot_polygon(const int *p, unsigned int n, const plot_style_t *style);
|
||||
static bool ro_plot_path(const float *p, unsigned int n, colour fill, float width,
|
||||
colour c, const float transform[6]);
|
||||
static bool ro_plot_clip(int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1);
|
||||
static bool ro_plot_clip(const struct rect *clip);
|
||||
static bool ro_plot_text(int x, int y, const char *text, size_t length,
|
||||
const plot_font_style_t *fstyle);
|
||||
static bool ro_plot_disc(int x, int y, int radius, const plot_style_t *style);
|
||||
|
@ -356,16 +355,15 @@ error:
|
|||
|
||||
|
||||
|
||||
bool ro_plot_clip(int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1)
|
||||
bool ro_plot_clip(const struct rect *clip)
|
||||
{
|
||||
os_error *error;
|
||||
char buf[12];
|
||||
|
||||
clip_x0 = ro_plot_origin_x + clip_x0 * 2;
|
||||
clip_y0 = ro_plot_origin_y - clip_y0 * 2 - 1;
|
||||
clip_x1 = ro_plot_origin_x + clip_x1 * 2 - 1;
|
||||
clip_y1 = ro_plot_origin_y - clip_y1 * 2;
|
||||
int clip_x0 = ro_plot_origin_x + clip->x0 * 2;
|
||||
int clip_y0 = ro_plot_origin_y - clip->y0 * 2 - 1;
|
||||
int clip_x1 = ro_plot_origin_x + clip->x1 * 2 - 1;
|
||||
int clip_y1 = ro_plot_origin_y - clip->y1 * 2;
|
||||
|
||||
if (clip_x1 < clip_x0 || clip_y0 < clip_y1) {
|
||||
LOG(("bad clip rectangle %i %i %i %i",
|
||||
|
|
|
@ -103,8 +103,7 @@ static const char *print_declare_fonts(hlcache_handle *h);
|
|||
static bool print_fonts_plot_rectangle(int x0, int y0, int x1, int y1, const plot_style_t *style);
|
||||
static bool print_fonts_plot_line(int x0, int y0, int x1, int y1, const plot_style_t *style);
|
||||
static bool print_fonts_plot_polygon(const int *p, unsigned int n, const plot_style_t *style);
|
||||
static bool print_fonts_plot_clip(int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1);
|
||||
static bool print_fonts_plot_clip(const struct rect *clip);
|
||||
static bool print_fonts_plot_text(int x, int y, const char *text, size_t length,
|
||||
const plot_font_style_t *fstyle);
|
||||
static bool print_fonts_plot_disc(int x, int y, int radius, const plot_style_t *style);
|
||||
|
@ -872,8 +871,7 @@ bool print_fonts_plot_polygon(const int *p, unsigned int n, const plot_style_t *
|
|||
}
|
||||
|
||||
|
||||
bool print_fonts_plot_clip(int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1)
|
||||
bool print_fonts_plot_clip(const struct rect *clip)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -44,8 +44,7 @@ static bool ro_save_draw_line(int x0, int y0, int x1, int y1, const plot_style_t
|
|||
static bool ro_save_draw_polygon(const int *p, unsigned int n, const plot_style_t *style);
|
||||
static bool ro_save_draw_path(const float *p, unsigned int n, colour fill,
|
||||
float width, colour c, const float transform[6]);
|
||||
static bool ro_save_draw_clip(int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1);
|
||||
static bool ro_save_draw_clip(const struct rect *clip);
|
||||
static bool ro_save_draw_text(int x, int y, const char *text, size_t length,
|
||||
const plot_font_style_t *fstyle);
|
||||
static bool ro_save_draw_disc(int x, int y, int radius, const plot_style_t *style);
|
||||
|
@ -347,8 +346,7 @@ bool ro_save_draw_path(const float *p, unsigned int n, colour fill,
|
|||
|
||||
|
||||
|
||||
bool ro_save_draw_clip(int clip_x0, int clip_y0,
|
||||
int clip_x1, int clip_y1)
|
||||
bool ro_save_draw_clip(const struct rect *clip)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -358,6 +358,7 @@ void ro_treeview_redraw_loop(wimp_draw *redraw, ro_treeview *tv, osbool more)
|
|||
ro_plot_origin_y = redraw->box.y1 - redraw->yscroll;
|
||||
|
||||
if (tv != NULL && tv->tree != NULL) {
|
||||
struct rect clip;
|
||||
tree_draw(tv->tree, tv->origin.x/2, -(tv->origin.y/2),
|
||||
(redraw->clip.x0
|
||||
-(ro_plot_origin_x+tv->origin.x))/2,
|
||||
|
@ -367,11 +368,11 @@ void ro_treeview_redraw_loop(wimp_draw *redraw, ro_treeview *tv, osbool more)
|
|||
(redraw->clip.y1 - redraw->clip.y0)/2);
|
||||
|
||||
/* Put the graphcis window back how the Wimp set it. */
|
||||
|
||||
plot.clip((redraw->clip.x0 - ro_plot_origin_x)/2,
|
||||
(ro_plot_origin_y - redraw->clip.y1)/2,
|
||||
(redraw->clip.x1 - ro_plot_origin_x)/2,
|
||||
(ro_plot_origin_y - redraw->clip.y0)/2);
|
||||
clip.x0 = (redraw->clip.x0 - ro_plot_origin_x) / 2;
|
||||
clip.y0 = (ro_plot_origin_y - redraw->clip.y1) / 2;
|
||||
clip.x1 = (redraw->clip.x1 - ro_plot_origin_x) / 2;
|
||||
clip.y1 = (ro_plot_origin_y - redraw->clip.y0) / 2;
|
||||
plot.clip(&clip);
|
||||
}
|
||||
|
||||
error = xwimp_get_rectangle(redraw, &more);
|
||||
|
|
|
@ -52,17 +52,16 @@ static float nsws_plot_scale = 1.0;
|
|||
|
||||
static RECT plot_clip; /* currently set clipping rectangle */
|
||||
|
||||
static bool clip(int x0, int y0, int x1, int y1)
|
||||
static bool clip(const struct rect *clip)
|
||||
{
|
||||
|
||||
#if NSWS_PLOT_DEBUG
|
||||
LOG(("clip %d,%d to %d,%d", x0, y0, x1, y1));
|
||||
LOG(("clip %d,%d to %d,%d", clip->x0, clip->y0, clip->x1, clip->y1));
|
||||
#endif
|
||||
|
||||
plot_clip.left = x0;
|
||||
plot_clip.top = y0;
|
||||
plot_clip.right = x1 + 1; /* rectangle co-ordinates are exclusive */
|
||||
plot_clip.bottom = y1 + 1; /* rectangle co-ordinates are exclusive */
|
||||
plot_clip.left = clip->x0;
|
||||
plot_clip.top = clip->y0;
|
||||
plot_clip.right = clip->x1 + 1; /* co-ordinates are exclusive */
|
||||
plot_clip.bottom = clip->y1 + 1; /* co-ordinates are exclusive */
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue