Added line drawing with clipping.

Same as _draw_line but with extra parameters for the clipping region.

Tested and seems to work well. Will check further tomorrow when I convert
geist to use this instead of doing it internally.

Imlib_Updates
imlib_image_draw_line_clipped(int x1, int y1, int x2, int y2,
                 int clip_xmin, int clip_xmax, int clip_ymin,
                 int clip_ymax, char make_updates);


SVN revision: 3273
This commit is contained in:
Tom Gilbert 2000-08-29 21:09:49 +00:00
parent f16c92658f
commit 4f72d15e1e
6 changed files with 1404 additions and 1205 deletions

View File

@ -229,6 +229,9 @@ void imlib_apply_color_modifier(void);
void imlib_apply_color_modifier_to_rectangle(int x, int y, int width, int height);
Imlib_Updates imlib_image_draw_line(int x1, int y1, int x2, int y2, char make_updates);
/* draw line clipped into rectangle - results in no draw if line is not inside
* rectangle */
Imlib_Updates imlib_image_draw_line_clipped(int x1, int y1, int x2, int y2, int clip_xmin, int clip_xmax, int clip_ymin, int clip_ymax, char make_updates);
void imlib_image_draw_rectangle(int x, int y, int width, int height);
void imlib_image_fill_rectangle(int x, int y, int width, int height);
void imlib_image_copy_alpha_to_image(Imlib_Image image_source, int x, int y);

View File

@ -2004,6 +2004,30 @@ imlib_image_draw_line(int x1, int y1, int x2, int y2, char make_updates)
(char)make_updates);
}
Imlib_Updates
imlib_image_draw_line_clipped(int x1, int y1, int x2, int y2, int clip_xmin, int clip_xmax, int clip_ymin, int clip_ymax, char make_updates)
{
ImlibImage *im;
CHECK_PARAM_POINTER_RETURN("imlib_image_draw_line_clipped", "image", ctxt_image, NULL);
CAST_IMAGE(im, ctxt_image);
if ((!(im->data)) && (im->loader) && (im->loader->load))
im->loader->load(im, NULL, 0, 1);
if (!(im->data))
return NULL;
__imlib_DirtyImage(im);
__imlib_DirtyPixmapsForImage(im);
return (Imlib_Updates)__imlib_draw_line_clipped(im, x1, y1, x2, y2,
clip_xmin, clip_xmax, clip_ymin, clip_ymax,
(DATA8)ctxt_color.red,
(DATA8)ctxt_color.green,
(DATA8)ctxt_color.blue,
(DATA8)ctxt_color.alpha,
ctxt_operation,
(char)make_updates);
}
void
imlib_image_draw_rectangle(int x, int y, int width, int height)
{

View File

@ -89,7 +89,7 @@ __imlib_FileIsFile(const char *s)
buf = malloc(strlen(s));
if (!buf) return 0;
strcpy(buf, s);
strcpy(buf, s);
p = strrchr(buf, ':');
if (p) *p = 0;
s = buf;
@ -100,10 +100,10 @@ __imlib_FileIsFile(const char *s)
return(0);
}
if (S_ISREG(st.st_mode))
{
{
if (buf) free(buf);
return(1);
}
}
if (buf) free(buf);
return(0);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,13 @@
#ifndef __RGBADRAW
#define __RGBADRAW 1
typedef unsigned int ImlibOutCode;
enum
{ TOP = 0x1, BOTTOM = 0x2, RIGHT = 0x4, LEFT = 0x8 };
#define TRUE 1
#define FALSE 0
void __imlib_FlipImageHoriz(ImlibImage *im);
void __imlib_FlipImageVert(ImlibImage *im);
void __imlib_FlipImageBoth(ImlibImage *im);
@ -15,4 +22,15 @@ void __imlib_draw_filled_box(ImlibImage *im, int x, int y, int w, int h, DATA8 r
void __imlib_draw_filled_box(ImlibImage *im, int x, int y, int w, int h, DATA8 r, DATA8 g, DATA8 b, DATA8 a, ImlibOp op);
void __imlib_copy_image_data(ImlibImage *im, int x, int y, int w, int h, int nx, int ny);
void __imlib_copy_alpha_data(ImlibImage *src, ImlibImage *dst, int x, int y, int w, int h, int nx, int ny);
ImlibOutCode __imlib_comp_outcode(double x, double y, double xmin, double xmax,
double ymin, double ymax);
int
__imlib_clip_line(int x0, int y0, int x1, int y1, int xmin, int xmax, int ymin,
int ymax, int *clip_x0, int *clip_y0, int *clip_x1,
int *clip_y1);
ImlibUpdate *
__imlib_draw_line_clipped(ImlibImage * im, int x1, int y1, int x2, int y2,
int clip_xmin, int clip_xmax, int clip_ymin,
int clip_ymax, DATA8 r, DATA8 g, DATA8 b, DATA8 a,
ImlibOp op, char make_updates);
#endif

View File

@ -761,6 +761,8 @@ int main (int argc, char **argv)
imlib_context_set_color(255, 255, 255, 255);
uu = imlib_image_draw_line(200, 200, x, y, 1);
up = imlib_updates_append_updates(up, uu);
uu = imlib_image_draw_line_clipped(200, 0, 0, 200, 50, 100, 0, 300, 1);
up = imlib_updates_append_updates(up, uu);
}
{
static Imlib_Color_Range rg = NULL;