annotate src/pixbuf_util.c @ 2916:ae6cdcd69d9f default tip

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