gst/games/gstpuzzle.c: fix edges when image sizes aren't multiples of tile sizes

Original commit message from CVS:
* gst/games/gstpuzzle.c: (draw_puzzle):
fix edges when image sizes aren't multiples of tile sizes
This commit is contained in:
Benjamin Otte 2005-01-06 16:37:30 +00:00
parent 6a0908113e
commit 2ed845fcad
2 changed files with 21 additions and 12 deletions

View file

@ -1,3 +1,8 @@
2005-01-06 Benjamin Otte <otte@gnome.org>
* gst/games/gstpuzzle.c: (draw_puzzle):
fix edges when image sizes aren't multiples of tile sizes
2005-01-06 Benjamin Otte <otte@gnome.org>
* gst/games/gstpuzzle.c: (gst_puzzle_base_init):

View file

@ -463,21 +463,25 @@ draw_puzzle (GstVideofilter * videofilter, void *destp, void *srcp)
height = gst_videofilter_get_input_height (videofilter);
gst_video_image_setup (&dest, puzzle->format, destp, width, height);
gst_video_image_setup (&src, puzzle->format, srcp, width, height);
if (width % puzzle->columns != 0) {
guint w = width % puzzle->columns;
gst_video_image_copy_area (&dest, width - w, 0, &src, width - w, 0, w,
height);
}
if (height % puzzle->rows != 0) {
guint h = height % puzzle->rows;
gst_video_image_copy_area (&dest, 0, height - h, &src, 0, height - h, width,
h);
}
/* use multiples of 4 here to get around drawing problems with YUV colorspaces */
width = (width / puzzle->columns) & ~3;
height = (height / puzzle->rows) & ~3;
if (width * puzzle->columns != gst_videofilter_get_input_width (videofilter)) {
guint w =
gst_videofilter_get_input_width (videofilter) - width * puzzle->columns;
gst_video_image_copy_area (&dest, width * puzzle->columns, 0, &src,
width * puzzle->columns, 0, w,
gst_videofilter_get_input_height (videofilter));
}
if (height * puzzle->rows != gst_videofilter_get_input_height (videofilter)) {
guint h =
gst_videofilter_get_input_width (videofilter) - height * puzzle->rows;
gst_video_image_copy_area (&dest, 0, height * puzzle->rows, &src, 0,
height * puzzle->rows, gst_videofilter_get_input_width (videofilter),
h);
}
for (i = 0; i < puzzle->tiles; i++) {
if (!puzzle->solved && i == puzzle->position) {