On Wed, 21 May 2014 at 13:05:02 +0800, David Maciejak wrote:
> This patch adds RVerticalFlipImage and RHorizontalFlipImage functions.

You forgot to write the patch inline to ease review. I'm doing that
now. Btw, checkpatch detected this:

WARNING: braces {} are not necessary for single statement blocks
#74: FILE: wrlib/flip.c:42:
+       if (!img) {
+               return NULL;
+       }

WARNING: braces {} are not necessary for single statement blocks
#129: FILE: wrlib/flip.c:97:
+       if (!img) {
+               return NULL;
+       }

total: 2 errors, 2 warnings, 159 lines checked

0001-wrlib-add-image-flip-functions.patch has style problems, please review.

and it would be better to remove the braces (even though that's just a
warning, it's a style I've been trying to enforce and many parts of
the code follow it).

>From a89de98dce68e4ed256cb00c8a6b78815d5b1cd5 Mon Sep 17 00:00:00 2001
From: David Maciejak <david.macie...@gmail.com>
Date: Wed, 21 May 2014 11:59:48 +0700
Subject: [PATCH] wrlib: add image flip functions

This patch adds RVerticalFlipImage and RHorizontalFlipImage functions.
---
 wrlib/Makefile.am    |   1 +
 wrlib/flip.c         | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++
 wrlib/libwraster.map |   2 +
 wrlib/wraster.h      |   3 ++
 4 files changed, 141 insertions(+)
 create mode 100644 wrlib/flip.c

diff --git a/wrlib/Makefile.am b/wrlib/Makefile.am
index 3f229c5..489b4a4 100644
--- a/wrlib/Makefile.am
+++ b/wrlib/Makefile.am
@@ -34,6 +34,7 @@ libwraster_la_SOURCES =       \
        misc.c          \
        scale.c         \
        rotate.c        \
+       flip.c          \
        convolve.c      \
        save_xpm.c      \
        xutil.c         \
diff --git a/wrlib/flip.c b/wrlib/flip.c
new file mode 100644
index 0000000..e0aeb5c
--- /dev/null
+++ b/wrlib/flip.c
@@ -0,0 +1,135 @@
+/* flip.c - image flip
+ *
+ * Raster graphics library
+ *
+ * Copyright (c) 2014 Window Maker Team
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Library General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ *  MA 02110-1301, USA.
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <X11/Xlib.h>
+#include "wraster.h"
+
+RImage *RVerticalFlipImage(RImage *image)
+{
+       RImage *img;
+       int nwidth, nheight;
+       int x, y;
+       int bpp = image->format == RRGBAFormat ? 4 : 3;
+
+       nwidth = image->width;
+       nheight = image->height;
+
+       img = RCreateImage(nwidth, nheight, True);
+       if (!img) {
+               return NULL;
+       }
+
+       if (bpp == 3) {
+                       unsigned char *optr, *nptr;
+
+                       optr = image->data;
+                       nptr = img->data + 4 * (nwidth * nheight - nwidth - 1);
+
+                       for (y = 0; y < nheight; y++) {
+                               for (x = 0; x < nwidth; x++) {
+                                       nptr[0] = optr[0];
+                                       nptr[1] = optr[1];
+                                       nptr[2] = optr[2];
+                                       nptr[3] = 255;
+
+                                       optr += 3;
+                                       nptr += 4;
+                               }
+                               nptr -= nwidth*8;
+                       }
+               } else {
+                       unsigned char *optr, *nptr;
+
+                       optr = image->data;
+                       nptr = img->data + 4 * (nwidth * nheight - nwidth - 1);
+
+                       for (y = 0; y < nheight; y++) {
+                               for (x = 0; x < nwidth; x++) {
+                                       nptr[0] = optr[0];
+                                       nptr[1] = optr[1];
+                                       nptr[2] = optr[2];
+                                       nptr[3] = optr[3];
+
+                                       optr += 4;
+                                       nptr += 4;
+                               }
+                               nptr -= nwidth*8;
+                       }
+               }
+       return img;
+}
+
+RImage *RHorizontalFlipImage(RImage *image)
+{
+       RImage *img;
+       int nwidth, nheight;
+       int x, y;
+       int bpp = image->format == RRGBAFormat ? 4 : 3;
+
+       nwidth = image->width;
+       nheight = image->height;
+
+       img = RCreateImage(nwidth, nheight, True);
+       if (!img) {
+               return NULL;
+       }
+
+       if (bpp == 3) {
+                       unsigned char *optr, *nptr;
+
+                       nptr = img->data + nwidth * nheight * 4 - 4;
+                       for (y = nheight; y; y--) {
+                               for (x = 0; x < nwidth; x++) {
+                                       optr = image->data + (y*nwidth + x) * 3;
+
+                                       nptr[0] = optr[0];
+                                       nptr[1] = optr[1];
+                                       nptr[2] = optr[2];
+                                       nptr[3] = 255;
+
+                                       nptr -= 4;
+                               }
+                       }
+               } else {
+                       unsigned char *optr, *nptr;
+
+                       nptr = img->data + nwidth * nheight * 4 - 4;
+                       for (y = nheight; y; y--) {
+                               for (x = 0; x < nwidth; x++) {
+                                       optr = image->data + (y*nwidth + x) * 4;
+
+                                       nptr[0] = optr[0];
+                                       nptr[1] = optr[1];
+                                       nptr[2] = optr[2];
+                                       nptr[3] = optr[3];
+
+                                       nptr -= 4;
+                               }
+                       }
+               }
+       return img;
+}
diff --git a/wrlib/libwraster.map b/wrlib/libwraster.map
index 062dcd9..cf36401 100644
--- a/wrlib/libwraster.map
+++ b/wrlib/libwraster.map
@@ -72,6 +72,8 @@ LIBWRASTER3
     RRetainImage;
     RRGBtoHSV;
     RRotateImage;
+    RVerticalFlipImage;
+    RHorizontalFlipImage;
     RSaveImage;
     RScaleImage;
     RShutdown;
diff --git a/wrlib/wraster.h b/wrlib/wraster.h
index 2003869..45cbcc6 100644
--- a/wrlib/wraster.h
+++ b/wrlib/wraster.h
@@ -371,6 +371,9 @@ RImage *RSmoothScaleImage(RImage *src, unsigned new_width,
 
 RImage *RRotateImage(RImage *image, float angle);
 
+RImage *RVerticalFlipImage(RImage *image);
+
+RImage *RHorizontalFlipImage(RImage *image);
 
 RImage *RMakeTiledImage(RImage *tile, unsigned width, unsigned height);
 
-- 
1.8.3.2




-- 
To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.

Reply via email to