annotate src/pixbuf_util.c @ 2853:c2c8f0d3183b

Permit icon field in desktop file to be an absolute path
author Colin Clark <colin.clark@cclark.uk>
date Fri, 19 Oct 2018 18:42:55 +0100
parents e88128f85953
children b20a96b979a3
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 },
2812
865f7eab9b6d Additional optional entries for the toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2801
diff changeset
135 { PIXBUF_INLINE_ICON_MOVE, icon_move },
865f7eab9b6d Additional optional entries for the toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2801
diff changeset
136 { PIXBUF_INLINE_ICON_RENAME, icon_rename },
865f7eab9b6d Additional optional entries for the toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2801
diff changeset
137 { PIXBUF_INLINE_ICON_SELECT_ALL, icon_select_all },
865f7eab9b6d Additional optional entries for the toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2801
diff changeset
138 { PIXBUF_INLINE_ICON_SELECT_NONE, icon_select_none },
865f7eab9b6d Additional optional entries for the toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2801
diff changeset
139 { PIXBUF_INLINE_ICON_SELECT_INVERT, icon_select_invert },
865f7eab9b6d Additional optional entries for the toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2801
diff changeset
140 { PIXBUF_INLINE_ICON_SELECT_RECTANGLE, icon_select_rectangle },
2817
e6f95baec8b5 Fix #624: Filter files by shell or regular expression pattern
Colin Clark <colin.clark@cclark.uk>
parents: 2812
diff changeset
141 { PIXBUF_INLINE_ICON_FILE_FILTER, icon_file_filter },
2851
e88128f85953 Permit rotate commands to be on toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2817
diff changeset
142 { PIXBUF_INLINE_ICON_CW, icon_rotate_clockwise },
e88128f85953 Permit rotate commands to be on toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2817
diff changeset
143 { PIXBUF_INLINE_ICON_CCW, icon_rotate_counter_clockwise },
e88128f85953 Permit rotate commands to be on toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2817
diff changeset
144 { PIXBUF_INLINE_ICON_180, icon_rotate_180 },
e88128f85953 Permit rotate commands to be on toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2817
diff changeset
145 { PIXBUF_INLINE_ICON_MIRROR, icon_mirror },
e88128f85953 Permit rotate commands to be on toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2817
diff changeset
146 { PIXBUF_INLINE_ICON_FLIP, icon_flip },
e88128f85953 Permit rotate commands to be on toolbar
Colin Clark <colin.clark@cclark.uk>
parents: 2817
diff changeset
147 { PIXBUF_INLINE_ICON_ORIGINAL, icon_original },
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
148 { NULL, NULL }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
149 };
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 GdkPixbuf *pixbuf_inline(const gchar *key)
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 gint i;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
154
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
155 if (!key) return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
156
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
157 i = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
158 while (inline_pixbuf_data[i].key)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
159 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
160 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
161 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
162 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
163 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
164 i++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
165 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
166
673
c9c2bc042e10 Do not use printf() directly but use new wrapper function log_printf() instead.
Laurent Monin <geeqie@norz.org>
parents: 513
diff changeset
167 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
168
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
169 return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
170 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
171
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
172 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
173 {
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
174 static GtkIconFactory *icon_factory = NULL;
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
175 GtkIconSet *icon_set;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
176
1334
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
177 if (!icon_factory)
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 icon_factory = gtk_icon_factory_new();
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
180 gtk_icon_factory_add_default(icon_factory);
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
181 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
182
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
183 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
184 gtk_icon_factory_add(icon_factory, key, icon_set);
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
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
187
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
188 void pixbuf_inline_register_stock_icons(void)
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
189 {
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
190 gint i;
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
191
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
192 i = 0;
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
193 while (inline_pixbuf_data[i].key)
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
194 {
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
195 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
196 i++;
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
197 }
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
198 }
89c9db0e3258 create toolbar from ui_manager
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1284
diff changeset
199
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
200 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
201 {
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
202 GtkIconTheme *icon_theme;
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
203 GdkPixbuf *pixbuf;
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
204 GError *error = NULL;
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
205
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
206 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
207
1398
303e58e4826f Display icons in edit contextual menu.
Laurent Monin <geeqie@norz.org>
parents: 1345
diff changeset
208 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
209
1345
04048f93175f Prevent Gtk assertion failures when no icon is set.
Laurent Monin <geeqie@norz.org>
parents: 1341
diff changeset
210 pixbuf = gtk_icon_theme_load_icon(icon_theme,
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
211 icon, /* icon name */
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
212 64, /* size */
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
213 0, /* flags */
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
214 &error);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2168
diff changeset
215 if (!pixbuf)
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
216 {
1345
04048f93175f Prevent Gtk assertion failures when no icon is set.
Laurent Monin <geeqie@norz.org>
parents: 1341
diff changeset
217 if (error)
04048f93175f Prevent Gtk assertion failures when no icon is set.
Laurent Monin <geeqie@norz.org>
parents: 1341
diff changeset
218 {
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
219 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
220 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
221 error = NULL;
1345
04048f93175f Prevent Gtk assertion failures when no icon is set.
Laurent Monin <geeqie@norz.org>
parents: 1341
diff changeset
222 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
223
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
224 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
225 {
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 /* 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
227 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
228 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
229 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
230 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
231 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
232 &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
233 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
234 {
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
235 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
236 g_error_free(error);
2853
c2c8f0d3183b Permit icon field in desktop file to be an absolute path
Colin Clark <colin.clark@cclark.uk>
parents: 2851
diff changeset
237 error = NULL;
c2c8f0d3183b Permit icon field in desktop file to be an absolute path
Colin Clark <colin.clark@cclark.uk>
parents: 2851
diff changeset
238
c2c8f0d3183b Permit icon field in desktop file to be an absolute path
Colin Clark <colin.clark@cclark.uk>
parents: 2851
diff changeset
239 /* try as an absolute path */
c2c8f0d3183b Permit icon field in desktop file to be an absolute path
Colin Clark <colin.clark@cclark.uk>
parents: 2851
diff changeset
240 pixbuf = gdk_pixbuf_new_from_file(icon, &error);
c2c8f0d3183b Permit icon field in desktop file to be an absolute path
Colin Clark <colin.clark@cclark.uk>
parents: 2851
diff changeset
241 if (error)
c2c8f0d3183b Permit icon field in desktop file to be an absolute path
Colin Clark <colin.clark@cclark.uk>
parents: 2851
diff changeset
242 {
c2c8f0d3183b Permit icon field in desktop file to be an absolute path
Colin Clark <colin.clark@cclark.uk>
parents: 2851
diff changeset
243 DEBUG_1("Couldn't load icon as absolute path %s: %s", icon, error->message);
c2c8f0d3183b Permit icon field in desktop file to be an absolute path
Colin Clark <colin.clark@cclark.uk>
parents: 2851
diff changeset
244 g_error_free(error);
c2c8f0d3183b Permit icon field in desktop file to be an absolute path
Colin Clark <colin.clark@cclark.uk>
parents: 2851
diff changeset
245 }
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
246 }
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
247 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
248 }
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
249 }
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
250
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
251 if (!pixbuf) return FALSE;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
252
1341
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
253 register_stock_icon(key, pixbuf);
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
254 return TRUE;
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
255 }
75bf2e172da8 load icons for external editors
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1334
diff changeset
256
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
257 gboolean pixbuf_scale_aspect(gint req_w, gint req_h,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
258 gint old_w, gint old_h,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
259 gint *new_w, gint *new_h)
864
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
260 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
261 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
262 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
263 *new_w = req_w;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
264 *new_h = (gdouble)*new_w / old_w * old_h;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
265 if (*new_h < 1) *new_h = 1;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
266 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
267 else
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
268 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
269 *new_h = req_h;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
270 *new_w = (gdouble)*new_h / old_h * old_w;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
271 if (*new_w < 1) *new_w = 1;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
272 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
273
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
274 return (*new_w != old_w || *new_h != old_h);
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
275 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
276
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
277 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
278 {
2597
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
279 GdkPixbuf *pixbuf;
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
280
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
281 switch (fd->format_class)
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
282 {
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
283 case FORMAT_CLASS_UNKNOWN:
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
284 pixbuf = pixbuf_inline(PIXBUF_INLINE_UNKNOWN);
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
285 break;
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
286 case FORMAT_CLASS_META:
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
287 pixbuf = pixbuf_inline(PIXBUF_INLINE_METADATA);
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
288 break;
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
289 case FORMAT_CLASS_VIDEO:
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
290 pixbuf = pixbuf_inline(PIXBUF_INLINE_VIDEO);
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
291 break;
2793
2feed80bcd34 Collections changes
Colin Clark <colin.clark@cclark.uk>
parents: 2597
diff changeset
292 case FORMAT_CLASS_COLLECTION:
2feed80bcd34 Collections changes
Colin Clark <colin.clark@cclark.uk>
parents: 2597
diff changeset
293 pixbuf = pixbuf_inline(PIXBUF_INLINE_COLLECTION);
2feed80bcd34 Collections changes
Colin Clark <colin.clark@cclark.uk>
parents: 2597
diff changeset
294 break;
2799
ea4163f0c769 Ref #332: include pdf-view
Colin Clark <colin.clark@cclark.uk>
parents: 2795
diff changeset
295 case FORMAT_CLASS_PDF:
ea4163f0c769 Ref #332: include pdf-view
Colin Clark <colin.clark@cclark.uk>
parents: 2795
diff changeset
296 pixbuf = pixbuf_inline(PIXBUF_INLINE_ICON_PDF);
ea4163f0c769 Ref #332: include pdf-view
Colin Clark <colin.clark@cclark.uk>
parents: 2795
diff changeset
297 break;
2597
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
298 default:
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
299 pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN);
e65df743a5a1 Ref #510: Rudimentary video support
Colin Clark <colin.clark@cclark.uk>
parents: 2350
diff changeset
300 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
301
864
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
302 if (requested_width && requested_height)
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
303 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
304 gint w = gdk_pixbuf_get_width(pixbuf);
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
305 gint h = gdk_pixbuf_get_height(pixbuf);
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
306
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
307 if (w > requested_width || h > requested_height)
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
308 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
309 gint nw, nh;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
310
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
311 if (pixbuf_scale_aspect(requested_width, requested_height,
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
312 w, h, &nw, &nh))
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
313 {
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
314 GdkPixbuf *tmp;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
315
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
316 tmp = pixbuf;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
317 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
318 g_object_unref(G_OBJECT(tmp));
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
319 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
320 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
321 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
322 return pixbuf;
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
323 }
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
324
83be8234df2d added pixbuf_fallback function
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 839
diff changeset
325
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
326 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
327 *-----------------------------------------------------------------------------
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
328 * misc utils
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
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
332 gboolean util_clip_region(gint x, gint y, gint w, gint h,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
333 gint clip_x, gint clip_y, gint clip_w, gint clip_h,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
334 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
335 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
336 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
337 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
338 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
339 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
340 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
341 return FALSE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
342 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
343
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
344 *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
345 *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
346
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
347 *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
348 *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
349
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
350 return TRUE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
351 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
352
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
353 /*
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
354 *-----------------------------------------------------------------------------
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
355 * pixbuf rotation
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
356 *-----------------------------------------------------------------------------
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
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
359 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
360 guchar *dest, gint dest_row_stride, gint w, gint h,
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
361 gint bytes_per_pixel, gboolean counter_clockwise)
9
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 gint i, j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
364 guchar *sp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
365 guchar *dp;
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 for (i = 0; i < h; i++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
368 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
369 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
370 for (j = 0; j < w; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
371 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
372 if (counter_clockwise)
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 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
375 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
376 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
377 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
378 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
379 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
380 *(dp++) = *(sp++); /* r */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
381 *(dp++) = *(sp++); /* g */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
382 *(dp++) = *(sp++); /* b */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
383 if (bytes_per_pixel == 4) *(dp) = *(sp++); /* a */
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 }
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
386
9
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
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
389 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
390 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
391 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
392 gint i;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
393 guchar *sp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
394 guchar *dp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
395
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
396 for (i = 0; i < h; i++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
397 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
398 sp = src + (i * src_row_stride);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
399 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
400 memcpy(dp, sp, w * bytes_per_pixel);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
401 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
402 }
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 #define ROTATE_BUFFER_WIDTH 48
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
405 #define ROTATE_BUFFER_HEIGHT 48
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
406
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
407 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
408 * 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
409 *
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
410 */
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
411 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
412 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
413 GdkPixbuf *dest;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
414 gboolean has_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
415 gint sw, sh, srs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
416 gint dw, dh, drs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
417 guchar *s_pix;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
418 guchar *d_pix;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
419 gint i, j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
420 gint a;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
421 GdkPixbuf *buffer;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
422 guchar *b_pix;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
423 gint brs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
424 gint w, h;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
425
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
426 if (!src) return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
427
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
428 sw = gdk_pixbuf_get_width(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
429 sh = gdk_pixbuf_get_height(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
430 has_alpha = gdk_pixbuf_get_has_alpha(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
431 srs = gdk_pixbuf_get_rowstride(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
432 s_pix = gdk_pixbuf_get_pixels(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
433
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
434 dw = sh;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
435 dh = sw;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
436 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
437 drs = gdk_pixbuf_get_rowstride(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
438 d_pix = gdk_pixbuf_get_pixels(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
439
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
440 a = (has_alpha ? 4 : 3);
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 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
443 ROTATE_BUFFER_WIDTH, ROTATE_BUFFER_HEIGHT);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
444 b_pix = gdk_pixbuf_get_pixels(buffer);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
445 brs = gdk_pixbuf_get_rowstride(buffer);
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 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
448 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
449 w = MIN(ROTATE_BUFFER_WIDTH, (sh - i));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
450 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
451 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
452 gint x, y;
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 h = MIN(ROTATE_BUFFER_HEIGHT, (sw - j));
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
455 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
456 b_pix, brs, h, w,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
457 a, counter_clockwise);
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 if (counter_clockwise)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
460 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
461 x = i;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
462 y = sw - h - j;
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 else
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 x = sh - w - i;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
467 y = j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
468 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
469 pixbuf_copy_block(b_pix, brs, w, h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
470 d_pix, drs, x, y, a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
471 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
472 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
473
1043
718ab8111f48 Replaced gtk depreceated code.
Petr Ostadal <postadal@suse.cz>
parents: 1001
diff changeset
474 g_object_unref(buffer);
9
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 #if 0
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
477 /* 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
478
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
479 for (i = 0; i < sh; i++)
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 sp = s_pix + (i * srs);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
482 for (j = 0; j < sw; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
483 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
484 if (counter_clockwise)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
485 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
486 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
487 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
488 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
489 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
490 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
491 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
492
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
493 *(dp++) = *(sp++); /* r */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
494 *(dp++) = *(sp++); /* g */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
495 *(dp++) = *(sp++); /* b */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
496 if (has_alpha) *(dp) = *(sp++); /* a */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
497 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
498 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
499 #endif
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
500
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
501 return dest;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
502 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
503
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
504 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
505 * 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
506 * 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
507 * 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
508 */
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
509 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
510 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
511 GdkPixbuf *dest;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
512 gboolean has_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
513 gint w, h, srs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
514 gint drs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
515 guchar *s_pix;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
516 guchar *d_pix;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
517 guchar *sp;
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
518 guchar *dp;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
519 gint i, j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
520 gint a;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
521
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
522 if (!src) return NULL;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
523
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
524 w = gdk_pixbuf_get_width(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
525 h = gdk_pixbuf_get_height(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
526 has_alpha = gdk_pixbuf_get_has_alpha(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
527 srs = gdk_pixbuf_get_rowstride(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
528 s_pix = gdk_pixbuf_get_pixels(src);
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 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
531 drs = gdk_pixbuf_get_rowstride(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
532 d_pix = gdk_pixbuf_get_pixels(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
533
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
534 a = has_alpha ? 4 : 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 for (i = 0; i < h; i++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
537 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
538 sp = s_pix + (i * srs);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
539 if (flip)
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 = d_pix + ((h - i - 1) * drs);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
542 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
543 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
544 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
545 dp = d_pix + (i * drs);
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 if (mirror)
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 dp += (w - 1) * a;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
550 for (j = 0; j < w; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
551 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
552 *(dp++) = *(sp++); /* r */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
553 *(dp++) = *(sp++); /* g */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
554 *(dp++) = *(sp++); /* b */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
555 if (has_alpha) *(dp) = *(sp++); /* a */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
556 dp -= (a + 3);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
557 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
558 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
559 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
560 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
561 for (j = 0; j < w; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
562 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
563 *(dp++) = *(sp++); /* r */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
564 *(dp++) = *(sp++); /* g */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
565 *(dp++) = *(sp++); /* b */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
566 if (has_alpha) *(dp++) = *(sp++); /* a */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
567 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
568 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
569 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
570
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
571 return dest;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
572 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
573
1001
a1f0b2010ca1 Consistency: type * instead of type*.
Laurent Monin <geeqie@norz.org>
parents: 1000
diff changeset
574 GdkPixbuf *pixbuf_apply_orientation(GdkPixbuf *pixbuf, gint orientation)
839
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
575 {
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
576 GdkPixbuf *dest;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
577 GdkPixbuf *tmp = NULL;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
578
839
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
579 switch (orientation)
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
580 {
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
581 case EXIF_ORIENTATION_TOP_LEFT:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
582 dest = gdk_pixbuf_copy(pixbuf);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
583 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
584 case EXIF_ORIENTATION_TOP_RIGHT:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
585 /* mirrored */
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
586 dest = pixbuf_copy_mirror(pixbuf, TRUE, FALSE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
587 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
588 case EXIF_ORIENTATION_BOTTOM_RIGHT:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
589 /* upside down */
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
590 dest = pixbuf_copy_mirror(pixbuf, TRUE, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
591 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
592 case EXIF_ORIENTATION_BOTTOM_LEFT:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
593 /* flipped */
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
594 dest = pixbuf_copy_mirror(pixbuf, FALSE, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
595 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
596 case EXIF_ORIENTATION_LEFT_TOP:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
597 tmp = pixbuf_copy_mirror(pixbuf, FALSE, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
598 dest = pixbuf_copy_rotate_90(tmp, FALSE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
599 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
600 case EXIF_ORIENTATION_RIGHT_TOP:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
601 /* rotated -90 (270) */
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
602 dest = pixbuf_copy_rotate_90(pixbuf, FALSE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
603 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
604 case EXIF_ORIENTATION_RIGHT_BOTTOM:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
605 tmp = pixbuf_copy_mirror(pixbuf, FALSE, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
606 dest = pixbuf_copy_rotate_90(tmp, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
607 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
608 case EXIF_ORIENTATION_LEFT_BOTTOM:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
609 /* rotated 90 */
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
610 dest = pixbuf_copy_rotate_90(pixbuf, TRUE);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
611 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
612 default:
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
613 dest = gdk_pixbuf_copy(pixbuf);
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
614 break;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
615 }
1043
718ab8111f48 Replaced gtk depreceated code.
Petr Ostadal <postadal@suse.cz>
parents: 1001
diff changeset
616 if (tmp) g_object_unref(tmp);
839
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
617 return dest;
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
618
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
619 }
74af80c4c972 rotate thumbnails by exif
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 673
diff changeset
620
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
621
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 *-----------------------------------------------------------------------------
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
624 * pixbuf drawing (rectangles)
9
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 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
627
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
628 /*
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
629 * 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
630 * with colors red (r), green (g), blue (b)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
631 * applying alpha (a), use a=255 for solid.
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
632 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
633 void pixbuf_draw_rect_fill(GdkPixbuf *pb,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
634 gint x, gint y, gint w, gint h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
635 gint r, gint g, gint b, gint a)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
636 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
637 gboolean has_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
638 gint pw, ph, prs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
639 guchar *p_pix;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
640 guchar *pp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
641 gint i, j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
642
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
643 if (!pb) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
644
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
645 pw = gdk_pixbuf_get_width(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
646 ph = gdk_pixbuf_get_height(pb);
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 if (x < 0 || x + w > pw) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
649 if (y < 0 || y + h > ph) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
650
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
651 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
652 prs = gdk_pixbuf_get_rowstride(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
653 p_pix = gdk_pixbuf_get_pixels(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
654
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
655 for (i = 0; i < h; i++)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
656 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
657 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
658 for (j = 0; j < w; j++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
659 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
660 *pp = (r * a + *pp * (256-a)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
661 pp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
662 *pp = (g * a + *pp * (256-a)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
663 pp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
664 *pp = (b * a + *pp * (256-a)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
665 pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
666 if (has_alpha) pp++;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
667 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
668 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
669 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
670
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
671 void pixbuf_draw_rect(GdkPixbuf *pb,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
672 gint x, gint y, gint w, gint h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
673 gint r, gint g, gint b, gint a,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
674 gint left, gint right, gint top, gint bottom)
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 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
677 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
678 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
679 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
680 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
681 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
682 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
683 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
684 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
685
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
686 void pixbuf_set_rect_fill(GdkPixbuf *pb,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
687 gint x, gint y, gint w, gint h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
688 gint r, gint g, gint b, gint a)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
689 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
690 gboolean has_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
691 gint pw, ph, prs;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
692 guchar *p_pix;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
693 guchar *pp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
694 gint i, j;
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 if (!pb) return;
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 pw = gdk_pixbuf_get_width(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
699 ph = gdk_pixbuf_get_height(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
700
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
701 if (x < 0 || x + w > pw) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
702 if (y < 0 || y + h > ph) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
703
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
704 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
705 prs = gdk_pixbuf_get_rowstride(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
706 p_pix = gdk_pixbuf_get_pixels(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
707
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
708 for (i = 0; i < h; i++)
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
709 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
710 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
711 for (j = 0; j < w; j++)
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 *pp = r; pp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
714 *pp = g; pp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
715 *pp = b; pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
716 if (has_alpha) { *pp = a; pp++; }
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
717 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
718 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
719 }
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 void pixbuf_set_rect(GdkPixbuf *pb,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
722 gint x, gint y, gint w, gint h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
723 gint r, gint g, gint b, gint a,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
724 gint left, gint right, gint top, gint bottom)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
725 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
726 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
727 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
728 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
729 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
730 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
731 r, g, b ,a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
732 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
733 r, g, b ,a);
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 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
737 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
738 guchar *buf;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
739 gboolean has_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
740 gint rowstride;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
741 guchar *p;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
742
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
743 if (x < 0 || x >= gdk_pixbuf_get_width(pb) ||
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
744 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
745
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
746 buf = gdk_pixbuf_get_pixels(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
747 has_alpha = gdk_pixbuf_get_has_alpha(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
748 rowstride = gdk_pixbuf_get_rowstride(pb);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
749
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
750 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
751 *p = r; p++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
752 *p = g; p++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
753 *p = b; p++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
754 if (has_alpha) *p = a;
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
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
757
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
758 /*
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 * pixbuf text rendering
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 */
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
763
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
764 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
765 GdkPixbuf *dest, gint dx, gint dy,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
766 gint w, gint h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
767 guint8 r, guint8 g, guint8 b, guint8 a)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
768 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
769 gint sw, sh, srs;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
770 gboolean s_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
771 gint s_step;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
772 guchar *s_pix;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
773 gint dw, dh, drs;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
774 gboolean d_alpha;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
775 gint d_step;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
776 guchar *d_pix;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
777
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
778 guchar *sp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
779 guchar *dp;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
780 gint i, j;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
781
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
782 if (!src || !dest) return;
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 sw = gdk_pixbuf_get_width(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
785 sh = gdk_pixbuf_get_height(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
786
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
787 if (sx < 0 || sx + w > sw) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
788 if (sy < 0 || sy + h > sh) return;
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 dw = gdk_pixbuf_get_width(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
791 dh = gdk_pixbuf_get_height(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
792
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
793 if (dx < 0 || dx + w > dw) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
794 if (dy < 0 || dy + h > dh) return;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
795
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
796 s_alpha = gdk_pixbuf_get_has_alpha(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
797 d_alpha = gdk_pixbuf_get_has_alpha(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
798 srs = gdk_pixbuf_get_rowstride(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
799 drs = gdk_pixbuf_get_rowstride(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
800 s_pix = gdk_pixbuf_get_pixels(src);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
801 d_pix = gdk_pixbuf_get_pixels(dest);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
802
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
803 s_step = (s_alpha) ? 4 : 3;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
804 d_step = (d_alpha) ? 4 : 3;
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 for (i = 0; i < h; i++)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
807 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
808 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
809 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
810 for (j = 0; j < w; j++)
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 if (*sp)
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 guint8 asub;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
815
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
816 asub = a * sp[0] / 255;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
817 *dp = (r * asub + *dp * (256-asub)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
818 dp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
819 asub = a * sp[1] / 255;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
820 *dp = (g * asub + *dp * (256-asub)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
821 dp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
822 asub = a * sp[2] / 255;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
823 *dp = (b * asub + *dp * (256-asub)) >> 8;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
824 dp++;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
825
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
826 if (d_alpha)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
827 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
828 *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
829 dp++;
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 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
832 else
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
833 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
834 dp += d_step;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
835 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
836
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
837 sp += s_step;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
838 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
839 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
840 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
841
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
842 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
843 gint x, gint y,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
844 guint8 r, guint8 g, guint8 b, guint8 a)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
845 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
846 GdkPixbuf *buffer;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
847 gint w, h;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
848 gint sx, sy;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
849 gint dw, dh;
2034
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
850 cairo_surface_t *source;
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
851 cairo_t *cr;
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
852
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
853 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
854 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
855
2034
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
856 source = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, w, h);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
857
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
858 cr = cairo_create (source);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
859 cairo_set_source_rgb(cr, 0, 0, 0);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
860 cairo_rectangle (cr, 0, 0, w, h);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
861 cairo_fill (cr);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
862 cairo_set_source_rgb(cr, 1, 1, 1);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
863 pango_cairo_show_layout (cr, layout);
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
864 cairo_destroy (cr);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
865
2034
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
866 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
867 GDK_COLORSPACE_RGB,
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
868 cairo_image_surface_get_format (source) == CAIRO_FORMAT_ARGB32,
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
869 8,
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
870 cairo_image_surface_get_width (source),
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
871 cairo_image_surface_get_height (source),
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
872 cairo_image_surface_get_stride (source),
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
873 NULL,
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
874 NULL);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
875
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
876 sx = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
877 sy = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
878 dw = gdk_pixbuf_get_width(pixbuf);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
879 dh = gdk_pixbuf_get_height(pixbuf);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
880
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
881 if (x < 0)
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 w += x;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
884 sx = -x;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
885 x = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
886 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
887
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
888 if (y < 0)
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
889 {
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
890 h += y;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
891 sy = -y;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
892 y = 0;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
893 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
894
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
895 if (x + w > dw) w = dw - x;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
896 if (y + h > dh) h = dh - y;
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
897
12
8e6d90233b6d ##### Note: GQview CVS on sourceforge is not always up to date, please use #####
John Ellis <johne@verizon.net>
parents: 9
diff changeset
898 pixbuf_copy_font(buffer, sx, sy,
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
899 pixbuf, x, y, w, h,
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
900 r, g, b, a);
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
901
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
902 g_object_unref(buffer);
2034
9297985567b5 use accessor functions
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
903 cairo_surface_destroy(source);
9
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
904 }
8d9e9edd6fdf Sync to GQview 1.5.9 release.
John Ellis <johne@verizon.net>
parents:
diff changeset
905
33
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
906 /*
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
907 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
908 * 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
909 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
910 */
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
911
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
912 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
913 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
914 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
915 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
916
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
917 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
918 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
919 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
920 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
921 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
922 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
923 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
924 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
925
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
926 *rx = tx;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
927 *ry = ty;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
928 *rw = tw;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
929 *rh = th;
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
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
932 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
933 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
934 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
935 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
936 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
937 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
938 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
939 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
940 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
941 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
942 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
943 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
944 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
945 guchar *pp;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
946 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
947 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
948 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
949 gint y;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
950 gint t;
1437
cc423d10b73e gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1398
diff changeset
951 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
952
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
953 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
954
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
955 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
956 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
957
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
958 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
959 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
960 &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
961
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
962 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
963 &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
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 (!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
966 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
967 &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
968 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
969 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
970
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
971 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
972 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
973 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
974
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
975 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
976
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
977 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
978 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
979 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
980 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
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 (y2 > y3)
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 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
985 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
986 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
987 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
988 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
989 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
990 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
991 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
992
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
993 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
994 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
995 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
996 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
997 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
998 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
999
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1000 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
1001 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1002 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
1003
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1004 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
1005 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1006 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
1007 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
1008 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
1009 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
1010
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1011 middle = TRUE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1012 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1013
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1014 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
1015 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
1016
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1017 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
1018 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1019 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
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 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
1023 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
1024
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1025 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
1026
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1027 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
1028 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1029 *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
1030 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1031 *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
1032 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1033 *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
1034 pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1035 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
1036
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1037 xa++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1038 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1039 }
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 /*
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 * 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
1045 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1046 */
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1047
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1048 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
1049 gdouble x1, gdouble y1, gdouble x2, gdouble y2,
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1050 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
1051 {
1437
cc423d10b73e gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1398
diff changeset
1052 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
1053 gdouble d;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1054
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1055 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
1056 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1057 gdouble t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1058
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1059 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
1060 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
1061 flip = TRUE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1062 }
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 || 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
1065
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1066 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
1067 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1068 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
1069 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1070 else
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1071 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1072 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
1073 }
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 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
1076 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
1077 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1078 gdouble slope;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1079
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1080 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
1081 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
1082 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1083 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
1084 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
1085 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1086 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
1087 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1088 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
1089 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
1090 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1091 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1092
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1093 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
1094 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1095 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
1096 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1097 else
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 gdouble t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1100
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1101 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
1102
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1103 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
1104 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
1105 flip = !flip;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1106 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1107
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1108 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
1109 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
1110 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1111 gdouble slope;
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 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
1114 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
1115 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1116 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
1117 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
1118 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1119 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
1120 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1121 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
1122 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
1123 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1124 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1125
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1126 if (flip)
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1127 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1128 *rx1 = x2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1129 *ry1 = y2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1130 *rx2 = x1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1131 *ry2 = y1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1132 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1133 else
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1134 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1135 *rx1 = x1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1136 *ry1 = y1;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1137 *rx2 = x2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1138 *ry2 = y2;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1139 }
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 return TRUE;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1142 }
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 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
1145 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
1146 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
1147 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
1148 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1149 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
1150 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
1151 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
1152 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
1153 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
1154 guchar *pp;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1155 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
1156 gdouble slope;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1157 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
1158 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
1159 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
1160
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1161 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
1162
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1163 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
1164 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
1165
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1166 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
1167 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
1168 &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
1169 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
1170 (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
1171 &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
1172
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1173 cx1 = rx;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1174 cy1 = ry;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1175 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
1176 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
1177
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1178 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
1179 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
1180 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
1181
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1182 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
1183
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1184 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
1185 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1186 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
1187 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1188 gdouble t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1189 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
1190 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
1191 }
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 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
1194 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
1195 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
1196 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1197 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
1198 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
1199
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1200 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
1201 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1202 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
1203 *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
1204 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1205 *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
1206 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1207 *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
1208 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1209 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1210 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1211 else
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1212 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1213 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
1214 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1215 gdouble t;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1216 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
1217 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
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 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
1221 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
1222 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
1223 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1224 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
1225 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
1226
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1227 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
1228 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1229 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
1230 *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
1231 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1232 *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
1233 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1234 *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
1235 }
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 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1238 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1239
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 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1242 * 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
1243 *-----------------------------------------------------------------------------
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1244 */
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1245
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1246 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
1247 gint s, gboolean vertical, gint border,
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
1248 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
1249 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
1250 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1251 guchar *pp;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1252 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
1253 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
1254 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
1255
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1256 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
1257 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
1258 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1259 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
1260 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
1261 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
1262 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1263 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
1264 *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
1265 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1266 *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
1267 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1268 *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
1269 pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1270 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
1271 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1272 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1273 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1274
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1275 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
1276 gint sx, gint sy, gint border,
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
1277 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
1278 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
1279 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1280 guchar *pp;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1281 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
1282 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
1283
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1284 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
1285 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
1286 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1287 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
1288 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
1289 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1290 guint8 n;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1291 gint r;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1292
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1293 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
1294 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
1295 *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
1296 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1297 *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
1298 pp++;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1299 *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
1300 pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1301 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
1302 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1303 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1304 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1305
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1306 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
1307 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
1308 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
1309 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
1310 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1311 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
1312 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
1313 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
1314 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
1315 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
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 (!pb) return;
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1318
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1319 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
1320 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
1321
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1322 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
1323 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
1324 &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
1325
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1326 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
1327 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
1328 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
1329
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1330 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
1331 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
1332 &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
1333 {
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1334 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
1335 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1336
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1337 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
1338
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1339 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
1340 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
1341 &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
1342 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1343 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
1344 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
1345 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
1346 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
1347 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1348 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
1349 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
1350 &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
1351 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1352 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
1353 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
1354 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
1355 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
1356 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1357 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
1358 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
1359 &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
1360 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1361 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
1362 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
1363 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
1364 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
1365 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1366 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
1367 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
1368 &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
1369 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1370 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
1371 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
1372 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
1373 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
1374 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1375 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
1376 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
1377 &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
1378 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1379 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
1380 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
1381 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
1382 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
1383 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1384 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
1385 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
1386 &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
1387 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1388 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
1389 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
1390 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
1391 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
1392 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1393 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
1394 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
1395 &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
1396 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1397 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
1398 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
1399 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
1400 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
1401 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1402 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
1403 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
1404 &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
1405 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1406 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
1407 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
1408 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
1409 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
1410 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1411 }
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1412
96e4f244caa7 Wed Apr 6 06:41:25 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 12
diff changeset
1413
82
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1414 /*
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1415 *-----------------------------------------------------------------------------
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1416 * 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
1417 *-----------------------------------------------------------------------------
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1418 */
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1419
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1420 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
1421 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
1422 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1423 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
1424 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
1425 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
1426 guchar *pp;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1427 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
1428
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1429 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
1430
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1431 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
1432 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
1433
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1434 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
1435 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
1436
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1437 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
1438 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
1439 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
1440
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 288
diff changeset
1441 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
1442 {
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1443 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
1444 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
1445 {
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1446 guint8 grey;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1447
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1448 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
1449 *pp = grey;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1450 pp++;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1451 *pp = grey;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1452 pp++;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1453 *pp = grey;
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1454 pp++;
1443
e29281a30ed8 gint -> gboolean.
Laurent Monin <geeqie@norz.org>
parents: 1437
diff changeset
1455 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
1456 }
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1457 }
05a6aea69f24 Thu Oct 19 15:20:51 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 41
diff changeset
1458 }
1055
4bbdfab3c89a Adding a vim modeline to all files - patch by Klaus Ethgen
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1043
diff changeset
1459 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */