annotate src/pixbuf_util.c @ 2801:3e9ca298bb1d

Fix #251: Crop simulation Menu option to draw a rectangle. Rectangle co-ordinates can be obtained with the remote command: --remote --get-rectangle
author Colin Clark <colin.clark@cclark.uk>
date Fri, 20 Jul 2018 17:45:10 +0100
parents ea4163f0c769
children 865f7eab9b6d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
1 /*
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
2 * Copyright (C) 2004 John Ellis
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
3 * Copyright (C) 2008 - 2016 The Geeqie Team
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
4 *
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
5 * Author: John Ellis
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
6 *
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
7 * This program is free software; you can redistribute it and/or modify
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
8 * it under the terms of the GNU General Public License as published by
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
10 * (at your option) any later version.
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
11 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
12 * This program is distributed in the hope that it will be useful,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
15 * GNU General Public License for more details.
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
16 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
17 * You should have received a copy of the GNU General Public License along
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
18 * with this program; if not, write to the Free Software Foundation, Inc.,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2185
diff changeset
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
20 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
21
281
b1c2c2cf19d4 gqview.h -> main.h
Laurent Monin <geeqie@norz.org>
parents: 198
diff changeset
22 #include "main.h"
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
23 #include "pixbuf_util.h"
839
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
24 #include "exif.h"
1458
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
25 #include "ui_fileops.h"
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
26
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
27 #include "icons/icons_inline.h"
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
28
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
29 #include <math.h>
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
30
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
31
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
32 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
33 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
34 * png save
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
35 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
36 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
37
1000
07f6093c1c1a For the sake of consistency, use glib basic types everywhere.
Laurent Monin <geeqie@norz.org>
parents: 864
diff changeset
38 gboolean pixbuf_to_file_as_png(GdkPixbuf *pixbuf, const gchar *filename)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
39 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
40 GError *error = NULL;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
41 gboolean ret;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
42
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
43 if (!pixbuf || !filename) return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
44
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
45 ret = gdk_pixbuf_save(pixbuf, filename, "png", &error,
288
e675073bcca0 Replace occurences of Geeqie / geeqie by constants defined in main.h.
Laurent Monin <geeqie@norz.org>
parents: 281
diff changeset
46 "tEXt::Software", GQ_APPNAME " " VERSION, NULL);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
47
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
48 if (error)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
49 {
673
c9c2bc042e10 Do not use printf() directly but use new wrapper function log_printf() instead.
Laurent Monin <geeqie@norz.org>
parents: 513
diff changeset
50 log_printf("Error saving png file: %s\n", error->message);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
51 g_error_free(error);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
52 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
53
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
54 return ret;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
55 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
56
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
57 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
58 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
59 * jpeg save
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
60 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
61 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
62
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
63 gboolean pixbuf_to_file_as_jpg(GdkPixbuf *pixbuf, const gchar *filename, gint quality)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
64 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
65 GError *error = NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
66 gchar *qbuf;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
67 gboolean ret;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
68
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
69 if (!pixbuf || !filename) return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
70
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
71 if (quality == -1) quality = 75;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
72 if (quality < 1 || quality > 100)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
73 {
673
c9c2bc042e10 Do not use printf() directly but use new wrapper function log_printf() instead.
Laurent Monin <geeqie@norz.org>
parents: 513
diff changeset
74 log_printf("Jpeg not saved, invalid quality %d\n", quality);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
75 return FALSE;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
76 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
77
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
78 qbuf = g_strdup_printf("%d", quality);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
79 ret = gdk_pixbuf_save(pixbuf, filename, "jpeg", &error, "quality", qbuf, NULL);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
80 g_free(qbuf);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
81
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
82 if (error)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
83 {
673
c9c2bc042e10 Do not use printf() directly but use new wrapper function log_printf() instead.
Laurent Monin <geeqie@norz.org>
parents: 513
diff changeset
84 log_printf("Error saving jpeg to %s\n%s\n", filename, error->message);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
85 g_error_free(error);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
86 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
87
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
88 return ret;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
89 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
90
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
91 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
92 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
93 * pixbuf from inline
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
94 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
95 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
96
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
97 typedef struct _PixbufInline PixbufInline;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
98 struct _PixbufInline
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
99 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
100 const gchar *key;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
101 const guint8 *data;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
102 };
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
103
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
104 static PixbufInline inline_pixbuf_data[] = {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
105 { PIXBUF_INLINE_FOLDER_CLOSED, folder_closed },
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
106 { PIXBUF_INLINE_FOLDER_LOCKED, folder_locked },
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
107 { PIXBUF_INLINE_FOLDER_OPEN, folder_open },
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
108 { PIXBUF_INLINE_FOLDER_UP, folder_up },
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
109 { PIXBUF_INLINE_SCROLLER, icon_scroller },
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
110 { PIXBUF_INLINE_BROKEN, icon_broken },
2597
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
111 { PIXBUF_INLINE_METADATA, icon_metadata },
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
112 { PIXBUF_INLINE_UNKNOWN, icon_unknown },
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
113 { PIXBUF_INLINE_VIDEO, icon_video },
2793
2feed80bcd34 Collections changes
Colin Clark <colin.clark@cclark.uk>
parents: 2597
diff changeset
114 { PIXBUF_INLINE_COLLECTION, icon_collection },
91
d6b6f5cfa048 Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 82
diff changeset
115 { PIXBUF_INLINE_ICON, gqview_icon },
198
487ad60946b4 changed logo
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 196
diff changeset
116 { PIXBUF_INLINE_LOGO, geeqie_logo },
41
cac3a3efd1fd Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 33
diff changeset
117 { PIXBUF_INLINE_ICON_FLOAT, icon_float },
cac3a3efd1fd Wed Apr 27 15:17:57 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 33
diff changeset
118 { PIXBUF_INLINE_ICON_THUMB, icon_thumb },
91
d6b6f5cfa048 Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 82
diff changeset
119 { PIXBUF_INLINE_ICON_BOOK, icon_book },
d6b6f5cfa048 Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 82
diff changeset
120 { PIXBUF_INLINE_ICON_CONFIG, icon_config },
d6b6f5cfa048 Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 82
diff changeset
121 { PIXBUF_INLINE_ICON_TOOLS, icon_tools },
d6b6f5cfa048 Wed Nov 1 11:39:48 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 82
diff changeset
122 { PIXBUF_INLINE_ICON_VIEW, icon_view },
2794
780a9b685335 Ref #331: Overimposed custom composition rule lines
Colin Clark <colin.clark@cclark.uk>
parents: 2793
diff changeset
123 { PIXBUF_INLINE_ICON_GUIDELINES, icon_guidelines },
2795
684ca84becd2 Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents: 2794
diff changeset
124 { PIXBUF_INLINE_ICON_PANORAMA, icon_panorama },
684ca84becd2 Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents: 2794
diff changeset
125 { PIXBUF_INLINE_ICON_MAINTENANCE, icon_maintenance },
684ca84becd2 Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents: 2794
diff changeset
126 { PIXBUF_INLINE_ICON_ZOOMFILLHOR, icon_zoomfillhor },
684ca84becd2 Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents: 2794
diff changeset
127 { PIXBUF_INLINE_ICON_ZOOMFILLVERT, icon_zoomfillvert },
684ca84becd2 Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents: 2794
diff changeset
128 { PIXBUF_INLINE_ICON_HIDETOOLS, icon_hidetools },
684ca84becd2 Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents: 2794
diff changeset
129 { PIXBUF_INLINE_ICON_EXIF, icon_exif },
684ca84becd2 Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents: 2794
diff changeset
130 { PIXBUF_INLINE_ICON_MARKS, icon_marks },
684ca84becd2 Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents: 2794
diff changeset
131 { PIXBUF_INLINE_ICON_INFO, icon_info },
684ca84becd2 Additional toolbar icons
Colin Clark <colin.clark@cclark.uk>
parents: 2794
diff changeset
132 { PIXBUF_INLINE_ICON_SORT, icon_sort },
2799
ea4163f0c769 Ref #332: include pdf-view
Colin Clark <colin.clark@cclark.uk>
parents: 2795
diff changeset
133 { PIXBUF_INLINE_ICON_PDF, icon_pdf },
2801
3e9ca298bb1d Fix #251: Crop simulation
Colin Clark <colin.clark@cclark.uk>
parents: 2799
diff changeset
134 { PIXBUF_INLINE_ICON_DRAW_RECTANGLE, icon_draw_rectangle },
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
135 { NULL, NULL }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
136 };
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
137
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
138 GdkPixbuf *pixbuf_inline(const gchar *key)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
139 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
140 gint i;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
141
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
142 if (!key) return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
143
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
144 i = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
145 while (inline_pixbuf_data[i].key)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
146 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
147 if (strcmp(inline_pixbuf_data[i].key, key) == 0)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
148 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
149 return gdk_pixbuf_new_from_inline(-1, inline_pixbuf_data[i].data, FALSE, NULL);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
150 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
151 i++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
152 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
153
673
c9c2bc042e10 Do not use printf() directly but use new wrapper function log_printf() instead.
Laurent Monin <geeqie@norz.org>
parents: 513
diff changeset
154 log_printf("warning: inline pixbuf key \"%s\" not found.\n", key);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
155
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
156 return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
157 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
158
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
159 static void register_stock_icon(const gchar *key, GdkPixbuf *pixbuf)
1334
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
160 {
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
161 static GtkIconFactory *icon_factory = NULL;
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
162 GtkIconSet *icon_set;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
163
1334
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
164 if (!icon_factory)
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
165 {
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
166 icon_factory = gtk_icon_factory_new();
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
167 gtk_icon_factory_add_default(icon_factory);
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
168 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
169
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
170 icon_set = gtk_icon_set_new_from_pixbuf(pixbuf);
1334
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
171 gtk_icon_factory_add(icon_factory, key, icon_set);
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
172 }
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
173
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
174
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
175 void pixbuf_inline_register_stock_icons(void)
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
176 {
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
177 gint i;
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
178
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
179 i = 0;
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
180 while (inline_pixbuf_data[i].key)
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
181 {
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
182 register_stock_icon(inline_pixbuf_data[i].key, pixbuf_inline(inline_pixbuf_data[i].key));
1334
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
183 i++;
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
184 }
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
185 }
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
186
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
187 gboolean register_theme_icon_as_stock(const gchar *key, const gchar *icon)
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
188 {
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
189 GtkIconTheme *icon_theme;
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
190 GdkPixbuf *pixbuf;
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
191 GError *error = NULL;
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
192
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
193 icon_theme = gtk_icon_theme_get_default();
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
194
1398
303e58e4826f Display icons in edit contextual menu.
Laurent Monin <geeqie@norz.org>
parents: 1345
diff changeset
195 if (gtk_icon_theme_has_icon(icon_theme, key)) return FALSE;
303e58e4826f Display icons in edit contextual menu.
Laurent Monin <geeqie@norz.org>
parents: 1345
diff changeset
196
1345
04048f93175f Prevent Gtk assertion failures when no icon is set.
Laurent Monin <geeqie@norz.org>
parents: 1341
diff changeset
197 pixbuf = gtk_icon_theme_load_icon(icon_theme,
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
198 icon, /* icon name */
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
199 64, /* size */
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
200 0, /* flags */
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
201 &error);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2168
diff changeset
202 if (!pixbuf)
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
203 {
1345
04048f93175f Prevent Gtk assertion failures when no icon is set.
Laurent Monin <geeqie@norz.org>
parents: 1341
diff changeset
204 if (error)
04048f93175f Prevent Gtk assertion failures when no icon is set.
Laurent Monin <geeqie@norz.org>
parents: 1341
diff changeset
205 {
1458
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
206 DEBUG_1("Couldn't load icon %s: %s", icon, error->message);
1345
04048f93175f Prevent Gtk assertion failures when no icon is set.
Laurent Monin <geeqie@norz.org>
parents: 1341
diff changeset
207 g_error_free(error);
1458
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
208 error = NULL;
1345
04048f93175f Prevent Gtk assertion failures when no icon is set.
Laurent Monin <geeqie@norz.org>
parents: 1341
diff changeset
209 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
210
1458
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
211 if (strchr(icon, '.'))
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
212 {
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
213 /* try again without extension */
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
214 gchar *icon2 = remove_extension_from_path(icon);
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
215 pixbuf = gtk_icon_theme_load_icon(icon_theme,
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
216 icon2, /* icon name */
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
217 64, /* size */
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
218 0, /* flags */
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
219 &error);
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
220 if (error)
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
221 {
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
222 DEBUG_1("Couldn't load icon %s: %s", icon2, error->message);
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
223 g_error_free(error);
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
224 }
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
225 g_free(icon2);
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
226 }
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
227 }
1458
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
228
a08532bb045a fixed loading of desktop file icons, gtk seems to expect an icon name without extension
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1443
diff changeset
229 if (!pixbuf) return FALSE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
230
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
231 register_stock_icon(key, pixbuf);
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
232 return TRUE;
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
233 }
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
234
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
235 gboolean pixbuf_scale_aspect(gint req_w, gint req_h,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
236 gint old_w, gint old_h,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
237 gint *new_w, gint *new_h)
864
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
238 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
239 if (((gdouble)req_w / old_w) < ((gdouble)req_h / old_h))
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
240 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
241 *new_w = req_w;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
242 *new_h = (gdouble)*new_w / old_w * old_h;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
243 if (*new_h < 1) *new_h = 1;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
244 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
245 else
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
246 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
247 *new_h = req_h;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
248 *new_w = (gdouble)*new_h / old_h * old_w;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
249 if (*new_w < 1) *new_w = 1;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
250 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
251
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
252 return (*new_w != old_w || *new_h != old_h);
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
253 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
254
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
255 GdkPixbuf *pixbuf_fallback(FileData *fd, gint requested_width, gint requested_height)
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
256 {
2597
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
257 GdkPixbuf *pixbuf;
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
258
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
259 switch (fd->format_class)
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
260 {
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
261 case FORMAT_CLASS_UNKNOWN:
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
262 pixbuf = pixbuf_inline(PIXBUF_INLINE_UNKNOWN);
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
263 break;
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
264 case FORMAT_CLASS_META:
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
265 pixbuf = pixbuf_inline(PIXBUF_INLINE_METADATA);
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
266 break;
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
267 case FORMAT_CLASS_VIDEO:
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
268 pixbuf = pixbuf_inline(PIXBUF_INLINE_VIDEO);
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
269 break;
2793
2feed80bcd34 Collections changes
Colin Clark <colin.clark@cclark.uk>
parents: 2597
diff changeset
270 case FORMAT_CLASS_COLLECTION:
2feed80bcd34 Collections changes
Colin Clark <colin.clark@cclark.uk>
parents: 2597
diff changeset
271 pixbuf = pixbuf_inline(PIXBUF_INLINE_COLLECTION);
2feed80bcd34 Collections changes
Colin Clark <colin.clark@cclark.uk>
parents: 2597
diff changeset
272 break;
2799
ea4163f0c769 Ref #332: include pdf-view
Colin Clark <colin.clark@cclark.uk>
parents: 2795
diff changeset
273 case FORMAT_CLASS_PDF:
ea4163f0c769 Ref #332: include pdf-view
Colin Clark <colin.clark@cclark.uk>
parents: 2795
diff changeset
274 pixbuf = pixbuf_inline(PIXBUF_INLINE_ICON_PDF);
ea4163f0c769 Ref #332: include pdf-view
Colin Clark <colin.clark@cclark.uk>
parents: 2795
diff changeset
275 break;
2597
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
276 default:
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
277 pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
278 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
279
864
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
280 if (requested_width && requested_height)
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
281 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
282 gint w = gdk_pixbuf_get_width(pixbuf);
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
283 gint h = gdk_pixbuf_get_height(pixbuf);
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
284
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
285 if (w > requested_width || h > requested_height)
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
286 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
287 gint nw, nh;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
288
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
289 if (pixbuf_scale_aspect(requested_width, requested_height,
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
290 w, h, &nw, &nh))
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
291 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
292 GdkPixbuf *tmp;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
293
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
294 tmp = pixbuf;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
295 pixbuf = gdk_pixbuf_scale_simple(tmp, nw, nh, GDK_INTERP_TILES);
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
296 g_object_unref(G_OBJECT(tmp));
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
297 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
298 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
299 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
300 return pixbuf;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
301 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
302
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
303
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
304 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
305 *-----------------------------------------------------------------------------
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
306 * misc utils
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
307 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
308 */
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
309
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
310 gboolean util_clip_region(gint x, gint y, gint w, gint h,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
311 gint clip_x, gint clip_y, gint clip_w, gint clip_h,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
312 gint *rx, gint *ry, gint *rw, gint *rh)
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
313 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
314 if (clip_x + clip_w <= x ||
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
315 clip_x >= x + w ||
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
316 clip_y + clip_h <= y ||
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
317 clip_y >= y + h)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
318 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
319 return FALSE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
320 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
321
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
322 *rx = MAX(x, clip_x);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
323 *rw = MIN((x + w), (clip_x + clip_w)) - *rx;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
324
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
325 *ry = MAX(y, clip_y);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
326 *rh = MIN((y + h), (clip_y + clip_h)) - *ry;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
327
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
328 return TRUE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
329 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
330
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
331 /*
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
332 *-----------------------------------------------------------------------------
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
333 * pixbuf rotation
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
334 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
335 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
336
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
337 static void pixbuf_copy_block_rotate(guchar *src, gint src_row_stride, gint x, gint y,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
338 guchar *dest, gint dest_row_stride, gint w, gint h,
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
339 gint bytes_per_pixel, gboolean counter_clockwise)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
340 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
341 gint i, j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
342 guchar *sp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
343 guchar *dp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
344
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
345 for (i = 0; i < h; i++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
346 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
347 sp = src + ((i + y) * src_row_stride) + (x * bytes_per_pixel);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
348 for (j = 0; j < w; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
349 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
350 if (counter_clockwise)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
351 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
352 dp = dest + ((w - j - 1) * dest_row_stride) + (i * bytes_per_pixel);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
353 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
354 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
355 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
356 dp = dest + (j * dest_row_stride) + ((h - i - 1) * bytes_per_pixel);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
357 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
358 *(dp++) = *(sp++); /* r */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
359 *(dp++) = *(sp++); /* g */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
360 *(dp++) = *(sp++); /* b */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
361 if (bytes_per_pixel == 4) *(dp) = *(sp++); /* a */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
362 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
363 }
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
364
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
365 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
366
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
367 static void pixbuf_copy_block(guchar *src, gint src_row_stride, gint w, gint h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
368 guchar *dest, gint dest_row_stride, gint x, gint y, gint bytes_per_pixel)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
369 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
370 gint i;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
371 guchar *sp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
372 guchar *dp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
373
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
374 for (i = 0; i < h; i++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
375 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
376 sp = src + (i * src_row_stride);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
377 dp = dest + ((y + i) * dest_row_stride) + (x * bytes_per_pixel);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
378 memcpy(dp, sp, w * bytes_per_pixel);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
379 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
380 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
381
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
382 #define ROTATE_BUFFER_WIDTH 48
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
383 #define ROTATE_BUFFER_HEIGHT 48
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
384
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
385 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
386 * Returns a copy of pixbuf src rotated 90 degrees clockwise or 90 counterclockwise
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
387 *
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
388 */
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
389 GdkPixbuf *pixbuf_copy_rotate_90(GdkPixbuf *src, gboolean counter_clockwise)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
390 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
391 GdkPixbuf *dest;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
392 gboolean has_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
393 gint sw, sh, srs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
394 gint dw, dh, drs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
395 guchar *s_pix;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
396 guchar *d_pix;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
397 gint i, j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
398 gint a;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
399 GdkPixbuf *buffer;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
400 guchar *b_pix;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
401 gint brs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
402 gint w, h;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
403
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
404 if (!src) return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
405
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
406 sw = gdk_pixbuf_get_width(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
407 sh = gdk_pixbuf_get_height(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
408 has_alpha = gdk_pixbuf_get_has_alpha(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
409 srs = gdk_pixbuf_get_rowstride(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
410 s_pix = gdk_pixbuf_get_pixels(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
411
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
412 dw = sh;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
413 dh = sw;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
414 dest = gdk_pixbuf_new(GDK_COLORSPACE_RGB, has_alpha, 8, dw, dh);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
415 drs = gdk_pixbuf_get_rowstride(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
416 d_pix = gdk_pixbuf_get_pixels(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
417
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
418 a = (has_alpha ? 4 : 3);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
419
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
420 buffer = gdk_pixbuf_new(GDK_COLORSPACE_RGB, has_alpha, 8,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
421 ROTATE_BUFFER_WIDTH, ROTATE_BUFFER_HEIGHT);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
422 b_pix = gdk_pixbuf_get_pixels(buffer);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
423 brs = gdk_pixbuf_get_rowstride(buffer);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
424
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
425 for (i = 0; i < sh; i+= ROTATE_BUFFER_WIDTH)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
426 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
427 w = MIN(ROTATE_BUFFER_WIDTH, (sh - i));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
428 for (j = 0; j < sw; j += ROTATE_BUFFER_HEIGHT)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
429 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
430 gint x, y;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
431
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
432 h = MIN(ROTATE_BUFFER_HEIGHT, (sw - j));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
433 pixbuf_copy_block_rotate(s_pix, srs, j, i,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
434 b_pix, brs, h, w,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
435 a, counter_clockwise);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
436
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
437 if (counter_clockwise)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
438 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
439 x = i;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
440 y = sw - h - j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
441 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
442 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
443 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
444 x = sh - w - i;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
445 y = j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
446 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
447 pixbuf_copy_block(b_pix, brs, w, h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
448 d_pix, drs, x, y, a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
449 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
450 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
451
1043
718ab8111f48 Replaced gtk depreceated code.
Petr Ostadal <postadal@suse.cz>
parents: 1001
diff changeset
452 g_object_unref(buffer);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
453
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
454 #if 0
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
455 /* this is the simple version of rotation (roughly 2-4x slower) */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
456
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
457 for (i = 0; i < sh; i++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
458 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
459 sp = s_pix + (i * srs);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
460 for (j = 0; j < sw; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
461 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
462 if (counter_clockwise)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
463 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
464 dp = d_pix + ((dh - j - 1) * drs) + (i * a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
465 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
466 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
467 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
468 dp = d_pix + (j * drs) + ((dw - i - 1) * a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
469 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
470
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
471 *(dp++) = *(sp++); /* r */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
472 *(dp++) = *(sp++); /* g */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
473 *(dp++) = *(sp++); /* b */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
474 if (has_alpha) *(dp) = *(sp++); /* a */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
475 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
476 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
477 #endif
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
478
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
479 return dest;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
480 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
481
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
482 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
483 * Returns a copy of pixbuf mirrored and or flipped.
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
484 * TO do a 180 degree rotations set both mirror and flipped TRUE
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
485 * if mirror and flip are FALSE, result is a simple copy.
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
486 */
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
487 GdkPixbuf *pixbuf_copy_mirror(GdkPixbuf *src, gboolean mirror, gboolean flip)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
488 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
489 GdkPixbuf *dest;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
490 gboolean has_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
491 gint w, h, srs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
492 gint drs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
493 guchar *s_pix;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
494 guchar *d_pix;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
495 guchar *sp;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
496 guchar *dp;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
497 gint i, j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
498 gint a;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
499
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
500 if (!src) return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
501
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
502 w = gdk_pixbuf_get_width(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
503 h = gdk_pixbuf_get_height(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
504 has_alpha = gdk_pixbuf_get_has_alpha(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
505 srs = gdk_pixbuf_get_rowstride(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
506 s_pix = gdk_pixbuf_get_pixels(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
507
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
508 dest = gdk_pixbuf_new(GDK_COLORSPACE_RGB, has_alpha, 8, w, h);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
509 drs = gdk_pixbuf_get_rowstride(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
510 d_pix = gdk_pixbuf_get_pixels(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
511
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
512 a = has_alpha ? 4 : 3;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
513
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
514 for (i = 0; i < h; i++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
515 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
516 sp = s_pix + (i * srs);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
517 if (flip)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
518 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
519 dp = d_pix + ((h - i - 1) * drs);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
520 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
521 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
522 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
523 dp = d_pix + (i * drs);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
524 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
525 if (mirror)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
526 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
527 dp += (w - 1) * a;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
528 for (j = 0; j < w; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
529 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
530 *(dp++) = *(sp++); /* r */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
531 *(dp++) = *(sp++); /* g */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
532 *(dp++) = *(sp++); /* b */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
533 if (has_alpha) *(dp) = *(sp++); /* a */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
534 dp -= (a + 3);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
535 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
536 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
537 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
538 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
539 for (j = 0; j < w; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
540 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
541 *(dp++) = *(sp++); /* r */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
542 *(dp++) = *(sp++); /* g */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
543 *(dp++) = *(sp++); /* b */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
544 if (has_alpha) *(dp++) = *(sp++); /* a */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
545 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
546 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
547 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
548
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
549 return dest;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
550 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
551
1001
a1f0b2010ca1 Consistency: type * instead of type*.
Laurent Monin <geeqie@norz.org>
parents: 1000
diff changeset
552 GdkPixbuf *pixbuf_apply_orientation(GdkPixbuf *pixbuf, gint orientation)
839
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
553 {
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
554 GdkPixbuf *dest;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
555 GdkPixbuf *tmp = NULL;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
556
839
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
557 switch (orientation)
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
558 {
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
559 case EXIF_ORIENTATION_TOP_LEFT:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
560 dest = gdk_pixbuf_copy(pixbuf);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
561 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
562 case EXIF_ORIENTATION_TOP_RIGHT:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
563 /* mirrored */
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
564 dest = pixbuf_copy_mirror(pixbuf, TRUE, FALSE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
565 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
566 case EXIF_ORIENTATION_BOTTOM_RIGHT:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
567 /* upside down */
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
568 dest = pixbuf_copy_mirror(pixbuf, TRUE, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
569 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
570 case EXIF_ORIENTATION_BOTTOM_LEFT:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
571 /* flipped */
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
572 dest = pixbuf_copy_mirror(pixbuf, FALSE, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
573 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
574 case EXIF_ORIENTATION_LEFT_TOP:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
575 tmp = pixbuf_copy_mirror(pixbuf, FALSE, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
576 dest = pixbuf_copy_rotate_90(tmp, FALSE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
577 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
578 case EXIF_ORIENTATION_RIGHT_TOP:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
579 /* rotated -90 (270) */
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
580 dest = pixbuf_copy_rotate_90(pixbuf, FALSE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
581 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
582 case EXIF_ORIENTATION_RIGHT_BOTTOM:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
583 tmp = pixbuf_copy_mirror(pixbuf, FALSE, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
584 dest = pixbuf_copy_rotate_90(tmp, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
585 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
586 case EXIF_ORIENTATION_LEFT_BOTTOM:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
587 /* rotated 90 */
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
588 dest = pixbuf_copy_rotate_90(pixbuf, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
589 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
590 default:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
591 dest = gdk_pixbuf_copy(pixbuf);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
592 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
593 }
1043
718ab8111f48 Replaced gtk depreceated code.
Petr Ostadal <postadal@suse.cz>
parents: 1001
diff changeset
594 if (tmp) g_object_unref(tmp);
839
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
595 return dest;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
596
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
597 }
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
598
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
599
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
600 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
601 *-----------------------------------------------------------------------------
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
602 * pixbuf drawing (rectangles)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
603 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
604 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
605
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
606 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
607 * Fills region of pixbuf at x,y over w,h
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
608 * with colors red (r), green (g), blue (b)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
609 * applying alpha (a), use a=255 for solid.
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
610 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
611 void pixbuf_draw_rect_fill(GdkPixbuf *pb,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
612 gint x, gint y, gint w, gint h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
613 gint r, gint g, gint b, gint a)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
614 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
615 gboolean has_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
616 gint pw, ph, prs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
617 guchar *p_pix;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
618 guchar *pp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
619 gint i, j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
620
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
621 if (!pb) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
622
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
623 pw = gdk_pixbuf_get_width(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
624 ph = gdk_pixbuf_get_height(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
625
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
626 if (x < 0 || x + w > pw) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
627 if (y < 0 || y + h > ph) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
628
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
629 has_alpha = gdk_pixbuf_get_has_alpha(pb);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
630 prs = gdk_pixbuf_get_rowstride(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
631 p_pix = gdk_pixbuf_get_pixels(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
632
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
633 for (i = 0; i < h; i++)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
634 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
635 pp = p_pix + (y + i) * prs + (x * (has_alpha ? 4 : 3));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
636 for (j = 0; j < w; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
637 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
638 *pp = (r * a + *pp * (256-a)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
639 pp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
640 *pp = (g * a + *pp * (256-a)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
641 pp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
642 *pp = (b * a + *pp * (256-a)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
643 pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
644 if (has_alpha) pp++;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
645 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
646 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
647 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
648
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
649 void pixbuf_draw_rect(GdkPixbuf *pb,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
650 gint x, gint y, gint w, gint h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
651 gint r, gint g, gint b, gint a,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
652 gint left, gint right, gint top, gint bottom)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
653 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
654 pixbuf_draw_rect_fill(pb, x + left, y, w - left - right, top,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
655 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
656 pixbuf_draw_rect_fill(pb, x + w - right, y, right, h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
657 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
658 pixbuf_draw_rect_fill(pb, x + left, y + h - bottom, w - left - right, bottom,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
659 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
660 pixbuf_draw_rect_fill(pb, x, y, left, h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
661 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
662 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
663
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
664 void pixbuf_set_rect_fill(GdkPixbuf *pb,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
665 gint x, gint y, gint w, gint h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
666 gint r, gint g, gint b, gint a)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
667 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
668 gboolean has_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
669 gint pw, ph, prs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
670 guchar *p_pix;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
671 guchar *pp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
672 gint i, j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
673
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
674 if (!pb) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
675
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
676 pw = gdk_pixbuf_get_width(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
677 ph = gdk_pixbuf_get_height(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
678
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
679 if (x < 0 || x + w > pw) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
680 if (y < 0 || y + h > ph) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
681
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
682 has_alpha = gdk_pixbuf_get_has_alpha(pb);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
683 prs = gdk_pixbuf_get_rowstride(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
684 p_pix = gdk_pixbuf_get_pixels(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
685
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
686 for (i = 0; i < h; i++)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
687 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
688 pp = p_pix + (y + i) * prs + (x * (has_alpha ? 4 : 3));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
689 for (j = 0; j < w; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
690 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
691 *pp = r; pp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
692 *pp = g; pp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
693 *pp = b; pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
694 if (has_alpha) { *pp = a; pp++; }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
695 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
696 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
697 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
698
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
699 void pixbuf_set_rect(GdkPixbuf *pb,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
700 gint x, gint y, gint w, gint h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
701 gint r, gint g, gint b, gint a,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
702 gint left, gint right, gint top, gint bottom)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
703 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
704 pixbuf_set_rect_fill(pb, x + left, y, w - left - right, top,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
705 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
706 pixbuf_set_rect_fill(pb, x + w - right, y, right, h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
707 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
708 pixbuf_set_rect_fill(pb, x + left, y + h - bottom, w - left - right, bottom,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
709 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
710 pixbuf_set_rect_fill(pb, x, y, left, h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
711 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
712 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
713
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
714 void pixbuf_pixel_set(GdkPixbuf *pb, gint x, gint y, gint r, gint g, gint b, gint a)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
715 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
716 guchar *buf;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
717 gboolean has_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
718 gint rowstride;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
719 guchar *p;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
720
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
721 if (x < 0 || x >= gdk_pixbuf_get_width(pb) ||
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
722 y < 0 || y >= gdk_pixbuf_get_height(pb)) return;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
723
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
724 buf = gdk_pixbuf_get_pixels(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
725 has_alpha = gdk_pixbuf_get_has_alpha(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
726 rowstride = gdk_pixbuf_get_rowstride(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
727
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
728 p = buf + (y * rowstride) + (x * (has_alpha ? 4 : 3));
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
729 *p = r; p++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
730 *p = g; p++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
731 *p = b; p++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
732 if (has_alpha) *p = a;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
733 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
734
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
735
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
736 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
737 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
738 * pixbuf text rendering
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
739 *-----------------------------------------------------------------------------
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
740 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
741
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
742 static void pixbuf_copy_font(GdkPixbuf *src, gint sx, gint sy,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
743 GdkPixbuf *dest, gint dx, gint dy,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
744 gint w, gint h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
745 guint8 r, guint8 g, guint8 b, guint8 a)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
746 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
747 gint sw, sh, srs;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
748 gboolean s_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
749 gint s_step;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
750 guchar *s_pix;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
751 gint dw, dh, drs;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
752 gboolean d_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
753 gint d_step;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
754 guchar *d_pix;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
755
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
756 guchar *sp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
757 guchar *dp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
758 gint i, j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
759
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
760 if (!src || !dest) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
761
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
762 sw = gdk_pixbuf_get_width(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
763 sh = gdk_pixbuf_get_height(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
764
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
765 if (sx < 0 || sx + w > sw) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
766 if (sy < 0 || sy + h > sh) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
767
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
768 dw = gdk_pixbuf_get_width(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
769 dh = gdk_pixbuf_get_height(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
770
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
771 if (dx < 0 || dx + w > dw) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
772 if (dy < 0 || dy + h > dh) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
773
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
774 s_alpha = gdk_pixbuf_get_has_alpha(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
775 d_alpha = gdk_pixbuf_get_has_alpha(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
776 srs = gdk_pixbuf_get_rowstride(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
777 drs = gdk_pixbuf_get_rowstride(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
778 s_pix = gdk_pixbuf_get_pixels(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
779 d_pix = gdk_pixbuf_get_pixels(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
780
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
781 s_step = (s_alpha) ? 4 : 3;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
782 d_step = (d_alpha) ? 4 : 3;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
783
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
784 for (i = 0; i < h; i++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
785 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
786 sp = s_pix + (sy + i) * srs + sx * s_step;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
787 dp = d_pix + (dy + i) * drs + dx * d_step;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
788 for (j = 0; j < w; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
789 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
790 if (*sp)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
791 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
792 guint8 asub;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
793
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
794 asub = a * sp[0] / 255;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
795 *dp = (r * asub + *dp * (256-asub)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
796 dp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
797 asub = a * sp[1] / 255;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
798 *dp = (g * asub + *dp * (256-asub)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
799 dp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
800 asub = a * sp[2] / 255;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
801 *dp = (b * asub + *dp * (256-asub)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
802 dp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
803
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
804 if (d_alpha)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
805 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
806 *dp = MAX(*dp, a * ((sp[0] + sp[1] + sp[2]) / 3) / 255);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
807 dp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
808 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
809 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
810 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
811 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
812 dp += d_step;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
813 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
814
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
815 sp += s_step;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
816 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
817 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
818 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
819
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
820 void pixbuf_draw_layout(GdkPixbuf *pixbuf, PangoLayout *layout, GtkWidget *widget,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
821 gint x, gint y,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
822 guint8 r, guint8 g, guint8 b, guint8 a)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
823 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
824 GdkPixbuf *buffer;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
825 gint w, h;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
826 gint sx, sy;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
827 gint dw, dh;
2034
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
828 cairo_surface_t *source;
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
829 cairo_t *cr;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
830
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
831 pango_layout_get_pixel_size(layout, &w, &h);
95
e103e1c85665 Fri Nov 3 11:40:48 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 91
diff changeset
832 if (w < 1 || h < 1) return;
e103e1c85665 Fri Nov 3 11:40:48 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 91
diff changeset
833
2034
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
834 source = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, w, h);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
835
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
836 cr = cairo_create (source);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
837 cairo_set_source_rgb(cr, 0, 0, 0);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
838 cairo_rectangle (cr, 0, 0, w, h);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
839 cairo_fill (cr);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
840 cairo_set_source_rgb(cr, 1, 1, 1);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
841 pango_cairo_show_layout (cr, layout);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
842 cairo_destroy (cr);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
843
2034
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
844 buffer = gdk_pixbuf_new_from_data (cairo_image_surface_get_data (source),
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
845 GDK_COLORSPACE_RGB,
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
846 cairo_image_surface_get_format (source) == CAIRO_FORMAT_ARGB32,
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
847 8,
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
848 cairo_image_surface_get_width (source),
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
849 cairo_image_surface_get_height (source),
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
850 cairo_image_surface_get_stride (source),
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
851 NULL,
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
852 NULL);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
853
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
854 sx = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
855 sy = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
856 dw = gdk_pixbuf_get_width(pixbuf);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
857 dh = gdk_pixbuf_get_height(pixbuf);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
858
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
859 if (x < 0)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
860 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
861 w += x;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
862 sx = -x;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
863 x = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
864 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
865
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
866 if (y < 0)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
867 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
868 h += y;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
869 sy = -y;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
870 y = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
871 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
872
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
873 if (x + w > dw) w = dw - x;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
874 if (y + h > dh) h = dh - y;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
875
12
8e6d90233b6d ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
John Ellis <johne@verizon.net>
parents: 9
diff changeset
876 pixbuf_copy_font(buffer, sx, sy,
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
877 pixbuf, x, y, w, h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
878 r, g, b, a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
879
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
880 g_object_unref(buffer);
2034
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
881 cairo_surface_destroy(source);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
882 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
883
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
884 /*
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
885 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
886 * pixbuf drawing (triangle)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
887 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
888 */
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
889
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
890 void util_clip_triangle(gint x1, gint y1, gint x2, gint y2, gint x3, gint y3,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
891 gint *rx, gint *ry, gint *rw, gint *rh)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
892 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
893 gint tx, ty, tw, th;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
894
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
895 tx = MIN(x1, x2);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
896 tx = MIN(tx, x3);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
897 ty = MIN(y1, y2);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
898 ty = MIN(ty, y3);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
899 tw = MAX(abs(x1 - x2), abs(x2 - x3));
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
900 tw = MAX(tw, abs(x3 - x1));
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
901 th = MAX(abs(y1 - y2), abs(y2 - y3));
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
902 th = MAX(th, abs(y3 - y1));
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
903
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
904 *rx = tx;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
905 *ry = ty;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
906 *rw = tw;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
907 *rh = th;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
908 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
909
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
910 void pixbuf_draw_triangle(GdkPixbuf *pb,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
911 gint clip_x, gint clip_y, gint clip_w, gint clip_h,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
912 gint x1, gint y1, gint x2, gint y2, gint x3, gint y3,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
913 guint8 r, guint8 g, guint8 b, guint8 a)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
914 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
915 gboolean has_alpha;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
916 gint pw, ph, prs;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
917 gint rx, ry, rw, rh;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
918 gint tx, ty, tw, th;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
919 gint fx1, fy1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
920 gint fx2, fy2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
921 gint fw, fh;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
922 guchar *p_pix;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
923 guchar *pp;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
924 gint p_step;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
925 gdouble slope1, slope2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
926 gint slope1_x, slope1_y;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
927 gint y;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
928 gint t;
1437
cc423d10b73e gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1398
diff changeset
929 gboolean middle = FALSE;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
930
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
931 if (!pb) return;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
932
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
933 pw = gdk_pixbuf_get_width(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
934 ph = gdk_pixbuf_get_height(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
935
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
936 if (!util_clip_region(0, 0, pw, ph,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
937 clip_x, clip_y, clip_w, clip_h,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
938 &rx, &ry, &rw, &rh)) return;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
939
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
940 util_clip_triangle(x1, y1, x2, y2, x3, y3,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
941 &tx, &ty, &tw, &th);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
942
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
943 if (!util_clip_region(rx, ry, rw, rh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
944 tx, ty, tw, th,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
945 &fx1, &fy1, &fw, &fh)) return;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
946 fx2 = fx1 + fw;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
947 fy2 = fy1 + fh;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
948
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
949 has_alpha = gdk_pixbuf_get_has_alpha(pb);
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
950 prs = gdk_pixbuf_get_rowstride(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
951 p_pix = gdk_pixbuf_get_pixels(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
952
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
953 p_step = (has_alpha) ? 4 : 3;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
954
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
955 if (y1 > y2)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
956 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
957 t = x1; x1 = x2; x2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
958 t = y1; y1 = y2; y2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
959 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
960 if (y2 > y3)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
961 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
962 t = x2; x2 = x3; x3 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
963 t = y2; y2 = y3; y3 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
964 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
965 if (y1 > y2)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
966 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
967 t = x1; x1 = x2; x2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
968 t = y1; y1 = y2; y2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
969 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
970
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
971 slope1 = (gdouble)(y2 - y1);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
972 if (slope1) slope1 = (gdouble)(x2 - x1) / slope1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
973 slope1_x = x1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
974 slope1_y = y1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
975 slope2 = (gdouble)(y3 - y1);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
976 if (slope2) slope2 = (gdouble)(x3 - x1) / slope2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
977
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
978 for (y = fy1; y < fy2; y++)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
979 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
980 gint xa, xb;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
981
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
982 if (!middle && y > y2)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
983 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
984 slope1 = (gdouble)(y3 - y2);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
985 if (slope1) slope1 = (gdouble)(x3 - x2) / slope1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
986 slope1_x = x2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
987 slope1_y = y2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
988
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
989 middle = TRUE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
990 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
991
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
992 xa = slope1_x + ((gdouble)slope1 * (y - slope1_y) + 0.5);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
993 xb = x1 + ((gdouble)slope2 * (y - y1) + 0.5);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
994
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
995 if (xa > xb)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
996 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
997 t = xa; xa = xb; xb = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
998 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
999
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1000 xa = CLAMP(xa, fx1, fx2);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1001 xb = CLAMP(xb, fx1, fx2);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1002
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1003 pp = p_pix + y * prs + xa * p_step;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1004
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1005 while (xa < xb)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1006 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1007 *pp = (r * a + *pp * (256-a)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1008 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1009 *pp = (g * a + *pp * (256-a)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1010 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1011 *pp = (b * a + *pp * (256-a)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1012 pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1013 if (has_alpha) pp++;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1014
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1015 xa++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1016 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1017 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1018 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1019
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1020 /*
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1021 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1022 * pixbuf drawing (line)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1023 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1024 */
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1025
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1026 static gboolean util_clip_line(gdouble clip_x, gdouble clip_y, gdouble clip_w, gdouble clip_h,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1027 gdouble x1, gdouble y1, gdouble x2, gdouble y2,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1028 gdouble *rx1, gdouble *ry1, gdouble *rx2, gdouble *ry2)
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1029 {
1437
cc423d10b73e gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1398
diff changeset
1030 gboolean flip = FALSE;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1031 gdouble d;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1032
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1033 if (x1 > x2)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1034 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1035 gdouble t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1036
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1037 t = x1; x1 = x2; x2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1038 t = y1; y1 = y2; y2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1039 flip = TRUE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1040 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1041
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1042 if (x2 < clip_x || x1 > clip_x + clip_w) return FALSE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1043
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1044 if (y1 < y2)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1045 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1046 if (y2 < clip_y || y1 > clip_y + clip_h) return FALSE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1047 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1048 else
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1049 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1050 if (y1 < clip_y || y2 > clip_y + clip_h) return FALSE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1051 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1052
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1053 d = x2 - x1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1054 if (d > 0.0)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1055 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1056 gdouble slope;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1057
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1058 slope = (y2 - y1) / d;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1059 if (x1 < clip_x)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1060 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1061 y1 = y1 + slope * (clip_x - x1);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1062 x1 = clip_x;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1063 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1064 if (x2 > clip_x + clip_w)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1065 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1066 y2 = y2 + slope * (clip_x + clip_w - x2);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1067 x2 = clip_x + clip_w;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1068 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1069 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1070
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1071 if (y1 < y2)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1072 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1073 if (y2 < clip_y || y1 > clip_y + clip_h) return FALSE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1074 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1075 else
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1076 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1077 gdouble t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1078
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1079 if (y1 < clip_y || y2 > clip_y + clip_h) return FALSE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1080
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1081 t = x1; x1 = x2; x2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1082 t = y1; y1 = y2; y2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1083 flip = !flip;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1084 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1085
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1086 d = y2 - y1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1087 if (d > 0.0)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1088 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1089 gdouble slope;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1090
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1091 slope = (x2 - x1) / d;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1092 if (y1 < clip_y)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1093 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1094 x1 = x1 + slope * (clip_y - y1);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1095 y1 = clip_y;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1096 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1097 if (y2 > clip_y + clip_h)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1098 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1099 x2 = x2 + slope * (clip_y + clip_h - y2);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1100 y2 = clip_y + clip_h;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1101 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1102 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1103
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1104 if (flip)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1105 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1106 *rx1 = x2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1107 *ry1 = y2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1108 *rx2 = x1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1109 *ry2 = y1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1110 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1111 else
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1112 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1113 *rx1 = x1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1114 *ry1 = y1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1115 *rx2 = x2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1116 *ry2 = y2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1117 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1118
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1119 return TRUE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1120 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1121
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1122 void pixbuf_draw_line(GdkPixbuf *pb,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1123 gint clip_x, gint clip_y, gint clip_w, gint clip_h,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1124 gint x1, gint y1, gint x2, gint y2,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1125 guint8 r, guint8 g, guint8 b, guint8 a)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1126 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1127 gboolean has_alpha;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1128 gint pw, ph, prs;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1129 gint rx, ry, rw, rh;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1130 gdouble rx1, ry1, rx2, ry2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1131 guchar *p_pix;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1132 guchar *pp;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1133 gint p_step;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1134 gdouble slope;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1135 gdouble x, y;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1136 gint px, py;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1137 gint cx1, cy1, cx2, cy2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1138
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1139 if (!pb) return;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1140
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1141 pw = gdk_pixbuf_get_width(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1142 ph = gdk_pixbuf_get_height(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1143
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1144 if (!util_clip_region(0, 0, pw, ph,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1145 clip_x, clip_y, clip_w, clip_h,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1146 &rx, &ry, &rw, &rh)) return;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1147 if (!util_clip_line((gdouble)rx, (gdouble)ry, (gdouble)rw, (gdouble)rh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1148 (gdouble)x1, (gdouble)y1, (gdouble)x2, (gdouble)y2,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1149 &rx1, &ry1, &rx2, &ry2)) return;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1150
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1151 cx1 = rx;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1152 cy1 = ry;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1153 cx2 = rx + rw;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1154 cy2 = ry + rh;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1155
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1156 has_alpha = gdk_pixbuf_get_has_alpha(pb);
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1157 prs = gdk_pixbuf_get_rowstride(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1158 p_pix = gdk_pixbuf_get_pixels(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1159
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1160 p_step = (has_alpha) ? 4 : 3;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1161
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1162 if (fabs(rx2 - rx1) > fabs(ry2 - ry1))
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1163 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1164 if (rx1 > rx2)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1165 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1166 gdouble t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1167 t = rx1; rx1 = rx2; rx2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1168 t = ry1; ry1 = ry2; ry2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1169 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1170
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1171 slope = rx2 - rx1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1172 if (slope != 0.0) slope = (ry2 - ry1) / slope;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1173 for (x = rx1; x < rx2; x += 1.0)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1174 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1175 px = (gint)(x + 0.5);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1176 py = (gint)(ry1 + (x - rx1) * slope + 0.5);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1177
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1178 if (px >= cx1 && px < cx2 && py >= cy1 && py < cy2)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1179 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1180 pp = p_pix + py * prs + px * p_step;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1181 *pp = (r * a + *pp * (256-a)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1182 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1183 *pp = (g * a + *pp * (256-a)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1184 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1185 *pp = (b * a + *pp * (256-a)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1186 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1187 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1188 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1189 else
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1190 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1191 if (ry1 > ry2)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1192 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1193 gdouble t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1194 t = rx1; rx1 = rx2; rx2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1195 t = ry1; ry1 = ry2; ry2 = t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1196 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1197
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1198 slope = ry2 - ry1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1199 if (slope != 0.0) slope = (rx2 - rx1) / slope;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1200 for (y = ry1; y < ry2; y += 1.0)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1201 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1202 px = (gint)(rx1 + (y - ry1) * slope + 0.5);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1203 py = (gint)(y + 0.5);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1204
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1205 if (px >= cx1 && px < cx2 && py >= cy1 && py < cy2)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1206 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1207 pp = p_pix + py * prs + px * p_step;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1208 *pp = (r * a + *pp * (256-a)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1209 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1210 *pp = (g * a + *pp * (256-a)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1211 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1212 *pp = (b * a + *pp * (256-a)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1213 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1214 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1215 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1216 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1217
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1218 /*
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1219 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1220 * pixbuf drawing (fades and shadows)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1221 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1222 */
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1223
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1224 static void pixbuf_draw_fade_linear(guchar *p_pix, gint prs, gboolean has_alpha,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1225 gint s, gboolean vertical, gint border,
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
1226 gint x1, gint y1, gint x2, gint y2,
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1227 guint8 r, guint8 g, guint8 b, guint8 a)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1228 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1229 guchar *pp;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1230 gint p_step;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1231 guint8 n = a;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1232 gint i, j;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1233
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1234 p_step = (has_alpha) ? 4 : 3;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1235 for (j = y1; j < y2; j++)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1236 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1237 pp = p_pix + j * prs + x1 * p_step;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1238 if (!vertical) n = a - a * abs(j - s) / border;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1239 for (i = x1; i < x2; i++)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1240 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1241 if (vertical) n = a - a * abs(i - s) / border;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1242 *pp = (r * n + *pp * (256-n)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1243 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1244 *pp = (g * n + *pp * (256-n)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1245 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1246 *pp = (b * n + *pp * (256-n)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1247 pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1248 if (has_alpha) pp++;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1249 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1250 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1251 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1252
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1253 static void pixbuf_draw_fade_radius(guchar *p_pix, gint prs, gboolean has_alpha,
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1254 gint sx, gint sy, gint border,
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
1255 gint x1, gint y1, gint x2, gint y2,
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1256 guint8 r, guint8 g, guint8 b, guint8 a)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1257 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1258 guchar *pp;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1259 gint p_step;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1260 gint i, j;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1261
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1262 p_step = (has_alpha) ? 4 : 3;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1263 for (j = y1; j < y2; j++)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1264 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1265 pp = p_pix + j * prs + x1 * p_step;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1266 for (i = x1; i < x2; i++)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1267 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1268 guint8 n;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1269 gint r;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1270
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1271 r = MIN(border, (gint)sqrt((i-sx)*(i-sx) + (j-sy)*(j-sy)));
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1272 n = a - a * r / border;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1273 *pp = (r * n + *pp * (256-n)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1274 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1275 *pp = (g * n + *pp * (256-n)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1276 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1277 *pp = (b * n + *pp * (256-n)) >> 8;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1278 pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1279 if (has_alpha) pp++;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1280 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1281 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1282 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1283
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1284 void pixbuf_draw_shadow(GdkPixbuf *pb,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1285 gint clip_x, gint clip_y, gint clip_w, gint clip_h,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1286 gint x, gint y, gint w, gint h, gint border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1287 guint8 r, guint8 g, guint8 b, guint8 a)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1288 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1289 gint has_alpha;
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1290 gint pw, ph, prs;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1291 gint rx, ry, rw, rh;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1292 gint fx, fy, fw, fh;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1293 guchar *p_pix;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1294
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1295 if (!pb) return;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1296
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1297 pw = gdk_pixbuf_get_width(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1298 ph = gdk_pixbuf_get_height(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1299
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1300 if (!util_clip_region(0, 0, pw, ph,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1301 clip_x, clip_y, clip_w, clip_h,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1302 &rx, &ry, &rw, &rh)) return;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1303
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1304 has_alpha = gdk_pixbuf_get_has_alpha(pb);
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1305 prs = gdk_pixbuf_get_rowstride(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1306 p_pix = gdk_pixbuf_get_pixels(pb);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1307
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1308 if (util_clip_region(x + border, y + border, w - border * 2, h - border * 2,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1309 rx, ry, rw, rh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1310 &fx, &fy, &fw, &fh))
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1311 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1312 pixbuf_draw_rect_fill(pb, fx, fy, fw, fh, r, g, b, a);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1313 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1314
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1315 if (border < 1) return;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1316
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1317 if (util_clip_region(x, y + border, border, h - border * 2,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1318 rx, ry, rw, rh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1319 &fx, &fy, &fw, &fh))
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1320 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1321 pixbuf_draw_fade_linear(p_pix, prs, has_alpha,
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1322 x + border, TRUE, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1323 fx, fy, fx + fw, fy + fh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1324 r, g, b, a);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1325 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1326 if (util_clip_region(x + w - border, y + border, border, h - border * 2,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1327 rx, ry, rw, rh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1328 &fx, &fy, &fw, &fh))
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1329 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1330 pixbuf_draw_fade_linear(p_pix, prs, has_alpha,
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1331 x + w - border, TRUE, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1332 fx, fy, fx + fw, fy + fh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1333 r, g, b, a);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1334 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1335 if (util_clip_region(x + border, y, w - border * 2, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1336 rx, ry, rw, rh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1337 &fx, &fy, &fw, &fh))
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1338 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1339 pixbuf_draw_fade_linear(p_pix, prs, has_alpha,
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1340 y + border, FALSE, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1341 fx, fy, fx + fw, fy + fh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1342 r, g, b, a);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1343 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1344 if (util_clip_region(x + border, y + h - border, w - border * 2, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1345 rx, ry, rw, rh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1346 &fx, &fy, &fw, &fh))
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1347 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1348 pixbuf_draw_fade_linear(p_pix, prs, has_alpha,
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1349 y + h - border, FALSE, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1350 fx, fy, fx + fw, fy + fh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1351 r, g, b, a);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1352 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1353 if (util_clip_region(x, y, border, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1354 rx, ry, rw, rh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1355 &fx, &fy, &fw, &fh))
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1356 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1357 pixbuf_draw_fade_radius(p_pix, prs, has_alpha,
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1358 x + border, y + border, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1359 fx, fy, fx + fw, fy + fh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1360 r, g, b, a);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1361 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1362 if (util_clip_region(x + w - border, y, border, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1363 rx, ry, rw, rh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1364 &fx, &fy, &fw, &fh))
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1365 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1366 pixbuf_draw_fade_radius(p_pix, prs, has_alpha,
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1367 x + w - border, y + border, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1368 fx, fy, fx + fw, fy + fh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1369 r, g, b, a);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1370 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1371 if (util_clip_region(x, y + h - border, border, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1372 rx, ry, rw, rh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1373 &fx, &fy, &fw, &fh))
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1374 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1375 pixbuf_draw_fade_radius(p_pix, prs, has_alpha,
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1376 x + border, y + h - border, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1377 fx, fy, fx + fw, fy + fh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1378 r, g, b, a);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1379 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1380 if (util_clip_region(x + w - border, y + h - border, border, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1381 rx, ry, rw, rh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1382 &fx, &fy, &fw, &fh))
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1383 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1384 pixbuf_draw_fade_radius(p_pix, prs, has_alpha,
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1385 x + w - border, y + h - border, border,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1386 fx, fy, fx + fw, fy + fh,
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1387 r, g, b, a);
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1388 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1389 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1390
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1391
82
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1392 /*
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1393 *-----------------------------------------------------------------------------
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1394 * pixbuf color alterations
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1395 *-----------------------------------------------------------------------------
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1396 */
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1397
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1398 void pixbuf_desaturate_rect(GdkPixbuf *pb,
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1399 gint x, gint y, gint w, gint h)
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1400 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1401 gboolean has_alpha;
82
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1402 gint pw, ph, prs;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1403 guchar *p_pix;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1404 guchar *pp;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1405 gint i, j;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1406
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1407 if (!pb) return;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1408
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1409 pw = gdk_pixbuf_get_width(pb);
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1410 ph = gdk_pixbuf_get_height(pb);
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1411
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1412 if (x < 0 || x + w > pw) return;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1413 if (y < 0 || y + h > ph) return;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1414
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1415 has_alpha = gdk_pixbuf_get_has_alpha(pb);
82
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1416 prs = gdk_pixbuf_get_rowstride(pb);
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1417 p_pix = gdk_pixbuf_get_pixels(pb);
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1418
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
1419 for (i = 0; i < h; i++)
82
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1420 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1421 pp = p_pix + (y + i) * prs + (x * (has_alpha ? 4 : 3));
82
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1422 for (j = 0; j < w; j++)
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1423 {
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1424 guint8 grey;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1425
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1426 grey = (pp[0] + pp[1] + pp[2]) / 3;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1427 *pp = grey;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1428 pp++;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1429 *pp = grey;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1430 pp++;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1431 *pp = grey;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1432 pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1433 if (has_alpha) pp++;
82
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1434 }
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1435 }
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1436 }
1055
4bbdfab3c89a Adding a vim modeline to all files - patch by Klaus Ethgen
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1043
diff changeset
1437 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */