annotate src/renderer-tiles.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 e0251a8eba95
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1 /*
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2251
diff changeset
2 * Copyright (C) 2006 John Ellis
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2251
diff changeset
3 * Copyright (C) 2008 - 2016 The Geeqie Team
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
4 *
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
5 * Author: John Ellis
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2251
diff changeset
6 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2251
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: 2251
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: 2251
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: 2251
diff changeset
10 * (at your option) any later version.
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
11 *
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2251
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: 2251
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: 2251
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2251
diff changeset
15 * GNU General Public License for more details.
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2251
diff changeset
16 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2251
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: 2251
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: 2251
diff changeset
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
20 */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
21
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
22 #include <stdio.h>
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
23 #include <stdlib.h>
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
24 #include <string.h>
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
25 #include <math.h>
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
26
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
27 #include "main.h"
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
28 #include "pixbuf-renderer.h"
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
29 #include "renderer-tiles.h"
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
30
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
31 #include "intl.h"
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
32 #include "layout.h"
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
33
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
34 #include <gtk/gtk.h>
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
35
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
36
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
37 /* comment this out if not using this from within Geeqie
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
38 * defining GQ_BUILD does these things:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
39 * - Sets the shift-click scroller pixbuf to a nice icon instead of a black box
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
40 */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
41 #define GQ_BUILD 1
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
42
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
43 #ifdef GQ_BUILD
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
44 #include "main.h"
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
45 #include "pixbuf_util.h"
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
46 #include "exif.h"
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
47 #else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
48 typedef enum {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
49 EXIF_ORIENTATION_UNKNOWN = 0,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
50 EXIF_ORIENTATION_TOP_LEFT = 1,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
51 EXIF_ORIENTATION_TOP_RIGHT = 2,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
52 EXIF_ORIENTATION_BOTTOM_RIGHT = 3,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
53 EXIF_ORIENTATION_BOTTOM_LEFT = 4,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
54 EXIF_ORIENTATION_LEFT_TOP = 5,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
55 EXIF_ORIENTATION_RIGHT_TOP = 6,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
56 EXIF_ORIENTATION_RIGHT_BOTTOM = 7,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
57 EXIF_ORIENTATION_LEFT_BOTTOM = 8
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
58 } ExifOrientationType;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
59 #endif
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
60
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
61
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
62 /* size to use when breaking up image pane for rendering */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
63 #define PR_TILE_SIZE 128
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
64
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
65 typedef struct _ImageTile ImageTile;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
66 typedef struct _QueueData QueueData;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
67
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
68 struct _ImageTile
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
69 {
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
70 cairo_surface_t *surface; /* off screen buffer */
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
71 GdkPixbuf *pixbuf; /* pixbuf area for zooming */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
72 gint x; /* x offset into image */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
73 gint y; /* y offset into image */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
74 gint w; /* width that is visible (may be less if at edge of image) */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
75 gint h; /* height '' */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
76
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
77 gboolean blank;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
78
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
79 /* render_todo: (explanation)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
80 NONE do nothing
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
81 AREA render area of tile, usually only used when loading an image
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
82 note: will jump to an ALL if render_done is not ALL.
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
83 ALL render entire tile, if never done before w/ ALL, for expose events *only*
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
84 */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
85
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
86 ImageRenderType render_todo; /* what to do (see above) */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
87 ImageRenderType render_done; /* highest that has been done before on tile */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
88
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
89 QueueData *qd;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
90 QueueData *qd2;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
91
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
92 guint size; /* est. memory used by pixmap and pixbuf */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
93 };
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
94
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
95 struct _QueueData
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
96 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
97 ImageTile *it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
98 gint x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
99 gint y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
100 gint w;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
101 gint h;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
102 gboolean new_data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
103 };
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
104
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
105 typedef struct _OverlayData OverlayData;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
106 struct _OverlayData
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
107 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
108 gint id;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
109
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
110 GdkPixbuf *pixbuf;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
111 GdkWindow *window;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
112
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
113 gint x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
114 gint y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
115
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
116 OverlayRendererFlags flags;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
117 };
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
118
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
119 typedef struct _RendererTiles RendererTiles;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
120
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
121 struct _RendererTiles
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
122 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
123 RendererFuncs f;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
124 PixbufRenderer *pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
125
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
126 gint tile_cache_max; /* max mb to use for offscreen buffer */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
127
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
128 gint tile_width;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
129 gint tile_height;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
130 gint tile_cols; /* count of tile columns */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
131 GList *tiles; /* list of buffer tiles */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
132 gint tile_cache_size; /* allocated size of pixmaps/pixbufs */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
133 GList *draw_queue; /* list of areas to redraw */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
134 GList *draw_queue_2pass;/* list when 2 pass is enabled */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
135
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
136 GList *overlay_list;
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
137 cairo_surface_t *overlay_buffer;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
138
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
139 guint draw_idle_id; /* event source id */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
140
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
141 GdkPixbuf *spare_tile;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
142
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
143 gint stereo_mode;
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
144 gint stereo_off_x;
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
145 gint stereo_off_y;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
146
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
147 gint x_scroll; /* allow local adjustment and mirroring */
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
148 gint y_scroll;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
149
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
150 gint hidpi_scale;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
151 };
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
152
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
153
1885
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
154
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
155 static void rt_border_draw(RendererTiles *rt, gint x, gint y, gint w, gint h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
156 static void rt_overlay_draw(RendererTiles *rt, gint x, gint y, gint w, gint h, ImageTile *it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
157
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
158
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
159 static void rt_tile_free_all(RendererTiles *rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
160 static void rt_tile_invalidate_region(RendererTiles *rt, gint x, gint y, gint w, gint h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
161 static gboolean rt_tile_is_visible(RendererTiles *rt, ImageTile *it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
162 static void rt_queue_clear(RendererTiles *rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
163 static void rt_queue_merge(QueueData *parent, QueueData *qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
164 static void rt_queue(RendererTiles *rt, gint x, gint y, gint w, gint h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
165 gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
166
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
167 static void rt_hierarchy_changed_cb(GtkWidget *widget, GtkWidget *previous_toplevel, gpointer data);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
168 static gint rt_queue_draw_idle_cb(gpointer data);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
169
1885
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
170 #define GET_RIGHT_PIXBUF_OFFSET(rt) \
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
171 (( (rt->stereo_mode & PR_STEREO_RIGHT) && !(rt->stereo_mode & PR_STEREO_SWAP)) || \
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
172 (!(rt->stereo_mode & PR_STEREO_RIGHT) && (rt->stereo_mode & PR_STEREO_SWAP)) ? \
1888
039d5c8864a0 type of source stereo image made adjustable from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1886
diff changeset
173 rt->pr->stereo_pixbuf_offset_right : rt->pr->stereo_pixbuf_offset_left )
1885
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
174
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
175 #define GET_LEFT_PIXBUF_OFFSET(rt) \
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
176 ((!(rt->stereo_mode & PR_STEREO_RIGHT) && !(rt->stereo_mode & PR_STEREO_SWAP)) || \
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
177 ( (rt->stereo_mode & PR_STEREO_RIGHT) && (rt->stereo_mode & PR_STEREO_SWAP)) ? \
1888
039d5c8864a0 type of source stereo image made adjustable from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1886
diff changeset
178 rt->pr->stereo_pixbuf_offset_right : rt->pr->stereo_pixbuf_offset_left )
1885
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
179
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
180
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
181 static void rt_sync_scroll(RendererTiles *rt)
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
182 {
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
183 PixbufRenderer *pr = rt->pr;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
184
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
185 rt->x_scroll = (rt->stereo_mode & PR_STEREO_MIRROR) ?
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
186 pr->width - pr->vis_width - pr->x_scroll
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
187 : pr->x_scroll;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
188
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
189 rt->y_scroll = (rt->stereo_mode & PR_STEREO_FLIP) ?
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
190 pr->height - pr->vis_height - pr->y_scroll
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
191 : pr->y_scroll;
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
192 }
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
193
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
194 /*
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
195 *-------------------------------------------------------------------
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
196 * borders
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
197 *-------------------------------------------------------------------
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
198 */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
199
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
200 static void rt_border_draw(RendererTiles *rt, gint x, gint y, gint w, gint h)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
201 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
202 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
203 GtkWidget *box;
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
204 GdkWindow *window;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
205 gint rx, ry, rw, rh;
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
206 cairo_t *cr;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
207
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
208 box = GTK_WIDGET(pr);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
209 window = gtk_widget_get_window(box);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
210
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
211 if (!window) return;
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
212
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
213 cr = gdk_cairo_create(window);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
214
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
215
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
216 if (!pr->pixbuf && !pr->source_tiles_enabled)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
217 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
218 if (pr_clip_region(x, y, w, h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
219 0, 0,
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
220 pr->viewport_width, pr->viewport_height,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
221 &rx, &ry, &rw, &rh))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
222 {
2379
5ddb29034ae2 Bug Fix #233 Custom Border
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
223 cairo_set_source_rgb(cr, (double)pr->color.red/65535, (double)pr->color.green/65535, (double)pr->color.blue/65535);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
224 cairo_rectangle(cr, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
225 cairo_fill(cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
226 rt_overlay_draw(rt, rx, ry, rw, rh, NULL);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
227 }
2381
7d4ec77aca61 Fix memory leak
Michael Cross <mc@xi2.org>
parents: 2379
diff changeset
228 cairo_destroy(cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
229 return;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
230 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
231
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
232 if (pr->vis_width < pr->viewport_width)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
233 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
234 if (pr->x_offset > 0 &&
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
235 pr_clip_region(x, y, w, h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
236 0, 0,
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
237 pr->x_offset, pr->viewport_height,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
238 &rx, &ry, &rw, &rh))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
239 {
2379
5ddb29034ae2 Bug Fix #233 Custom Border
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
240 cairo_set_source_rgb(cr, (double)pr->color.red/65535, (double)pr->color.green/65535, (double)pr->color.blue/65535);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
241 cairo_rectangle(cr, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
242 cairo_fill(cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
243 rt_overlay_draw(rt, rx, ry, rw, rh, NULL);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
244 }
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
245 if (pr->viewport_width - pr->vis_width - pr->x_offset > 0 &&
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
246 pr_clip_region(x, y, w, h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
247 pr->x_offset + pr->vis_width, 0,
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
248 pr->viewport_width - pr->vis_width - pr->x_offset, pr->viewport_height,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
249 &rx, &ry, &rw, &rh))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
250 {
2379
5ddb29034ae2 Bug Fix #233 Custom Border
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
251 cairo_set_source_rgb(cr, (double)pr->color.red/65535, (double)pr->color.green/65535, (double)pr->color.blue/65535);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
252 cairo_rectangle(cr, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
253 cairo_fill(cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
254 rt_overlay_draw(rt, rx, ry, rw, rh, NULL);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
255 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
256 }
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
257 if (pr->vis_height < pr->viewport_height)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
258 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
259 if (pr->y_offset > 0 &&
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
260 pr_clip_region(x, y, w, h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
261 pr->x_offset, 0,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
262 pr->vis_width, pr->y_offset,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
263 &rx, &ry, &rw, &rh))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
264 {
2379
5ddb29034ae2 Bug Fix #233 Custom Border
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
265 cairo_set_source_rgb(cr, (double)pr->color.red/65535, (double)pr->color.green/65535, (double)pr->color.blue/65535);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
266 cairo_rectangle(cr, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
267 cairo_fill(cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
268 rt_overlay_draw(rt, rx, ry, rw, rh, NULL);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
269 }
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
270 if (pr->viewport_height - pr->vis_height - pr->y_offset > 0 &&
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
271 pr_clip_region(x, y, w, h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
272 pr->x_offset, pr->y_offset + pr->vis_height,
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
273 pr->vis_width, pr->viewport_height - pr->vis_height - pr->y_offset,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
274 &rx, &ry, &rw, &rh))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
275 {
2379
5ddb29034ae2 Bug Fix #233 Custom Border
Colin Clark <cclark@mcb.net>
parents: 2350
diff changeset
276 cairo_set_source_rgb(cr, (double)pr->color.red/65535, (double)pr->color.green/65535, (double)pr->color.blue/65535);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
277 cairo_rectangle(cr, rx + rt->stereo_off_x, ry + rt->stereo_off_y, rw, rh);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
278 cairo_fill(cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
279 rt_overlay_draw(rt, rx, ry, rw, rh, NULL);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
280 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
281 }
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
282 cairo_destroy(cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
283 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
284
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
285 static void rt_border_clear(RendererTiles *rt)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
286 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
287 PixbufRenderer *pr = rt->pr;
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
288 rt_border_draw(rt, 0, 0, pr->viewport_width, pr->viewport_height);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
289 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
290
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
291
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
292 /*
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
293 *-------------------------------------------------------------------
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
294 * display tiles
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
295 *-------------------------------------------------------------------
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
296 */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
297
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
298 static ImageTile *rt_tile_new(gint x, gint y, gint width, gint height)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
299 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
300 ImageTile *it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
301
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
302 it = g_new0(ImageTile, 1);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
303
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
304 it->x = x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
305 it->y = y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
306 it->w = width;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
307 it->h = height;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
308
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
309 it->render_done = TILE_RENDER_NONE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
310
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
311 return it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
312 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
313
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
314 static void rt_tile_free(ImageTile *it)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
315 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
316 if (!it) return;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
317
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
318 if (it->pixbuf) g_object_unref(it->pixbuf);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
319 if (it->surface) cairo_surface_destroy(it->surface);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
320
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
321 g_free(it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
322 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
323
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
324 static void rt_tile_free_all(RendererTiles *rt)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
325 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
326 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
327
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
328 work = rt->tiles;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
329 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
330 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
331 ImageTile *it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
332
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
333 it = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
334 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
335
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
336 rt_tile_free(it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
337 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
338
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
339 g_list_free(rt->tiles);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
340 rt->tiles = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
341 rt->tile_cache_size = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
342 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
343
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
344 static ImageTile *rt_tile_add(RendererTiles *rt, gint x, gint y)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
345 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
346 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
347 ImageTile *it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
348
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
349 it = rt_tile_new(x, y, rt->tile_width, rt->tile_height);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
350
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
351 if (it->x + it->w > pr->width) it->w = pr->width - it->x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
352 if (it->y + it->h > pr->height) it->h = pr->height - it->y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
353
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
354 rt->tiles = g_list_prepend(rt->tiles, it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
355 rt->tile_cache_size += it->size;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
356
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
357 return it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
358 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
359
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
360 static void rt_tile_remove(RendererTiles *rt, ImageTile *it)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
361 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
362 if (it->qd)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
363 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
364 QueueData *qd = it->qd;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
365
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
366 it->qd = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
367 rt->draw_queue = g_list_remove(rt->draw_queue, qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
368 g_free(qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
369 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
370
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
371 if (it->qd2)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
372 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
373 QueueData *qd = it->qd2;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
374
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
375 it->qd2 = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
376 rt->draw_queue_2pass = g_list_remove(rt->draw_queue_2pass, qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
377 g_free(qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
378 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
379
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
380 rt->tiles = g_list_remove(rt->tiles, it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
381 rt->tile_cache_size -= it->size;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
382
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
383 rt_tile_free(it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
384 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
385
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
386 static void rt_tile_free_space(RendererTiles *rt, guint space, ImageTile *it)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
387 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
388 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
389 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
390 guint tile_max;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
391
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
392 work = g_list_last(rt->tiles);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
393
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
394 if (pr->source_tiles_enabled && pr->scale < 1.0)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
395 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
396 gint tiles;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
397
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
398 tiles = (pr->vis_width / rt->tile_width + 1) * (pr->vis_height / rt->tile_height + 1);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
399 tile_max = MAX(tiles * rt->tile_width * rt->tile_height * 3,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
400 (gint)((gdouble)rt->tile_cache_max * 1048576.0 * pr->scale));
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
401 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
402 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
403 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
404 tile_max = rt->tile_cache_max * 1048576;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
405 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
406
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
407 while (work && rt->tile_cache_size + space > tile_max)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
408 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
409 ImageTile *needle;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
410
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
411 needle = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
412 work = work->prev;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
413 if (needle != it &&
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
414 ((!needle->qd && !needle->qd2) || !rt_tile_is_visible(rt, needle))) rt_tile_remove(rt, needle);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
415 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
416 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
417
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
418 static void rt_tile_invalidate_all(RendererTiles *rt)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
419 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
420 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
421 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
422
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
423 work = rt->tiles;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
424 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
425 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
426 ImageTile *it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
427
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
428 it = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
429 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
430
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
431 it->render_done = TILE_RENDER_NONE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
432 it->render_todo = TILE_RENDER_ALL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
433 it->blank = FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
434
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
435 it->w = MIN(rt->tile_width, pr->width - it->x);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
436 it->h = MIN(rt->tile_height, pr->height - it->y);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
437 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
438 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
439
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
440 static void rt_tile_invalidate_region(RendererTiles *rt, gint x, gint y, gint w, gint h)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
441 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
442 gint x1, x2;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
443 gint y1, y2;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
444 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
445
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
446 x1 = ROUND_DOWN(x, rt->tile_width);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
447 x2 = ROUND_UP(x + w, rt->tile_width);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
448
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
449 y1 = ROUND_DOWN(y, rt->tile_height);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
450 y2 = ROUND_UP(y + h, rt->tile_height);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
451
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
452 work = rt->tiles;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
453 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
454 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
455 ImageTile *it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
456
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
457 it = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
458 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
459
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
460 if (it->x < x2 && it->x + it->w > x1 &&
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
461 it->y < y2 && it->y + it->h > y1)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
462 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
463 it->render_done = TILE_RENDER_NONE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
464 it->render_todo = TILE_RENDER_ALL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
465 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
466 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
467 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
468
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
469 static ImageTile *rt_tile_get(RendererTiles *rt, gint x, gint y, gboolean only_existing)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
470 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
471 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
472
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
473 work = rt->tiles;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
474 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
475 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
476 ImageTile *it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
477
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
478 it = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
479 if (it->x == x && it->y == y)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
480 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
481 rt->tiles = g_list_delete_link(rt->tiles, work);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
482 rt->tiles = g_list_prepend(rt->tiles, it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
483 return it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
484 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
485
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
486 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
487 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
488
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
489 if (only_existing) return NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
490
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
491 return rt_tile_add(rt, x, y);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
492 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
493
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
494 static gint pixmap_calc_size(cairo_surface_t *surface)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
495 {
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
496 // gint w, h, d;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
497
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
498 // d = gdk_drawable_get_depth(pixmap);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
499 // gdk_drawable_get_size(pixmap, &w, &h);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
500 return PR_TILE_SIZE * PR_TILE_SIZE * 4 / 8;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
501 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
502
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
503 static void rt_hidpi_aware_draw(
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
504 RendererTiles *rt,
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
505 cairo_t *cr,
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
506 GdkPixbuf *pixbuf,
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
507 double x,
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
508 double y)
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
509 {
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
510 #if GTK_CHECK_VERSION(3, 10, 0)
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
511 cairo_surface_t *surface;
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
512 surface = gdk_cairo_surface_create_from_pixbuf(pixbuf, rt->hidpi_scale, NULL);
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
513 cairo_set_source_surface(cr, surface, x, y);
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
514 cairo_fill(cr);
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
515 cairo_surface_destroy(surface);
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
516 #else
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
517 gdk_cairo_set_source_pixbuf(cr, pixbuf, x, y);
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
518 cairo_fill(cr);
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
519 #endif
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
520 }
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
521
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
522 static void rt_tile_prepare(RendererTiles *rt, ImageTile *it)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
523 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
524 PixbufRenderer *pr = rt->pr;
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
525 if (!it->surface)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
526 {
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
527 cairo_surface_t *surface;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
528 guint size;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
529
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
530 surface = gdk_window_create_similar_surface(gtk_widget_get_window((GtkWidget *)pr),
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
531 CAIRO_CONTENT_COLOR,
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
532 rt->tile_width, rt->tile_height);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
533
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
534 size = pixmap_calc_size(surface) * rt->hidpi_scale * rt->hidpi_scale;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
535 rt_tile_free_space(rt, size, it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
536
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
537 it->surface = surface;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
538 it->size += size;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
539 rt->tile_cache_size += size;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
540 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
541
1910
3f0837f71acc allocate tile pixbuf allways
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1909
diff changeset
542 if (!it->pixbuf)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
543 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
544 GdkPixbuf *pixbuf;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
545 guint size;
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
546 pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, rt->hidpi_scale * rt->tile_width, rt->hidpi_scale * rt->tile_height);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
547
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
548 size = gdk_pixbuf_get_rowstride(pixbuf) * rt->tile_height * rt->hidpi_scale;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
549 rt_tile_free_space(rt, size, it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
550
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
551 it->pixbuf = pixbuf;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
552 it->size += size;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
553 rt->tile_cache_size += size;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
554 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
555 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
556
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
557 /*
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
558 *-------------------------------------------------------------------
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
559 * overlays
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
560 *-------------------------------------------------------------------
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
561 */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
562
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
563 static void rt_overlay_get_position(RendererTiles *rt, OverlayData *od,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
564 gint *x, gint *y, gint *w, gint *h)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
565 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
566 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
567 gint px, py, pw, ph;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
568
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
569 pw = gdk_pixbuf_get_width(od->pixbuf);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
570 ph = gdk_pixbuf_get_height(od->pixbuf);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
571 px = od->x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
572 py = od->y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
573
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
574 if (od->flags & OVL_RELATIVE)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
575 {
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
576 if (px < 0) px = pr->viewport_width - pw + px;
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
577 if (py < 0) py = pr->viewport_height - ph + py;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
578 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
579
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
580 if (x) *x = px;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
581 if (y) *y = py;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
582 if (w) *w = pw;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
583 if (h) *h = ph;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
584 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
585
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
586 static void rt_overlay_init_window(RendererTiles *rt, OverlayData *od)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
587 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
588 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
589 gint px, py, pw, ph;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
590 GdkWindowAttr attributes;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
591 gint attributes_mask;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
592
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
593 rt_overlay_get_position(rt, od, &px, &py, &pw, &ph);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
594
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
595 attributes.window_type = GDK_WINDOW_CHILD;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
596 attributes.wclass = GDK_INPUT_OUTPUT;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
597 attributes.width = pw;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
598 attributes.height = ph;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
599 attributes.event_mask = GDK_EXPOSURE_MASK;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
600 attributes_mask = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
601
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
602 od->window = gdk_window_new(gtk_widget_get_window(GTK_WIDGET(pr)), &attributes, attributes_mask);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
603 gdk_window_set_user_data(od->window, pr);
1882
c08048ea65f6 fixed overlay position
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1881
diff changeset
604 gdk_window_move(od->window, px + rt->stereo_off_x, py + rt->stereo_off_y);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
605 gdk_window_show(od->window);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
606 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
607
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
608 static void rt_overlay_draw(RendererTiles *rt, gint x, gint y, gint w, gint h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
609 ImageTile *it)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
610 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
611 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
612 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
613
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
614 work = rt->overlay_list;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
615 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
616 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
617 OverlayData *od;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
618 gint px, py, pw, ph;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
619 gint rx, ry, rw, rh;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
620
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
621 od = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
622 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
623
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
624 if (!od->window) rt_overlay_init_window(rt, od);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
625
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
626 rt_overlay_get_position(rt, od, &px, &py, &pw, &ph);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
627 if (pr_clip_region(x, y, w, h, px, py, pw, ph, &rx, &ry, &rw, &rh))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
628 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
629 if (!rt->overlay_buffer)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
630 {
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
631 rt->overlay_buffer = gdk_window_create_similar_surface(gtk_widget_get_window((GtkWidget *)pr),
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
632 CAIRO_CONTENT_COLOR,
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
633 rt->tile_width, rt->tile_height);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
634 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
635
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
636 if (it)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
637 {
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
638 cairo_t *cr;
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
639
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
640 cr = cairo_create(rt->overlay_buffer);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
641 cairo_set_source_surface(cr, it->surface, (pr->x_offset + (it->x - rt->x_scroll)) - rx, (pr->y_offset + (it->y - rt->y_scroll)) - ry);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
642 cairo_rectangle(cr, 0, 0, rw, rh);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
643 cairo_fill_preserve(cr);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
644
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
645 gdk_cairo_set_source_pixbuf(cr, od->pixbuf, px - rx, py - ry);
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
646 cairo_fill(cr);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
647 cairo_destroy (cr);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
648
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
649 cr = gdk_cairo_create(od->window);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
650 cairo_set_source_surface(cr, rt->overlay_buffer, rx - px, ry - py);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
651 cairo_rectangle (cr, rx - px, ry - py, rw, rh);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
652 cairo_fill (cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
653 cairo_destroy (cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
654 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
655 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
656 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
657 /* no ImageTile means region may be larger than our scratch buffer */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
658 gint sx, sy;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
659
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
660 for (sx = rx; sx < rx + rw; sx += rt->tile_width)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
661 for (sy = ry; sy < ry + rh; sy += rt->tile_height)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
662 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
663 gint sw, sh;
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
664 cairo_t *cr;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
665
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
666 sw = MIN(rx + rw - sx, rt->tile_width);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
667 sh = MIN(ry + rh - sy, rt->tile_height);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
668
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
669 cr = cairo_create(rt->overlay_buffer);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
670 cairo_set_source_rgb(cr, 0, 0, 0);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
671 cairo_rectangle(cr, 0, 0, sw, sh);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
672 cairo_fill_preserve(cr);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
673
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
674 gdk_cairo_set_source_pixbuf(cr, od->pixbuf, px - sx, py - sy);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
675 cairo_fill (cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
676 cairo_destroy (cr);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
677
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
678 cr = gdk_cairo_create(od->window);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
679 cairo_set_source_surface(cr, rt->overlay_buffer, sx - px, sy - py);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
680 cairo_rectangle (cr, sx - px, sy - py, sw, sh);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
681 cairo_fill(cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
682 cairo_destroy(cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
683 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
684 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
685 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
686 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
687 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
688
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
689 static void rt_overlay_queue_draw(RendererTiles *rt, OverlayData *od, gint x1, gint y1, gint x2, gint y2)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
690 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
691 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
692 gint x, y, w, h;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
693
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
694 rt_overlay_get_position(rt, od, &x, &y, &w, &h);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
695
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
696 /* add borders */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
697 x -= x1;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
698 y -= y1;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
699 w += x1 + x2;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
700 h += y1 + y2;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
701
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
702 rt_queue(rt, rt->x_scroll - pr->x_offset + x,
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
703 rt->y_scroll - pr->y_offset + y,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
704 w, h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
705 FALSE, TILE_RENDER_ALL, FALSE, FALSE);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
706
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
707 rt_border_draw(rt, x, y, w, h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
708 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
709
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
710 static void rt_overlay_queue_all(RendererTiles *rt, gint x1, gint y1, gint x2, gint y2)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
711 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
712 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
713
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
714 work = rt->overlay_list;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
715 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
716 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
717 OverlayData *od = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
718 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
719
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
720 rt_overlay_queue_draw(rt, od, x1, y1, x2, y2);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
721 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
722 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
723
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
724 static void rt_overlay_update_sizes(RendererTiles *rt)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
725 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
726 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
727
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
728 work = rt->overlay_list;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
729 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
730 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
731 OverlayData *od = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
732 work = work->next;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
733
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
734 if (!od->window) rt_overlay_init_window(rt, od);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
735
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
736 if (od->flags & OVL_RELATIVE)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
737 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
738 gint x, y, w, h;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
739
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
740 rt_overlay_get_position(rt, od, &x, &y, &w, &h);
1883
1232f787c7ed fixed overlay position - part2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1882
diff changeset
741 gdk_window_move_resize(od->window, x + rt->stereo_off_x, y + rt->stereo_off_y, w, h);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
742 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
743 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
744 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
745
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
746 static OverlayData *rt_overlay_find(RendererTiles *rt, gint id)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
747 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
748 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
749
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
750 work = rt->overlay_list;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
751 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
752 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
753 OverlayData *od = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
754 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
755
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
756 if (od->id == id) return od;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
757 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
758
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
759 return NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
760 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
761
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
762
2070
9ffd4d0e2d12 Fix 4 warnings due to function prototype mismatches.
Laurent Monin <zas@norz.org>
parents: 2043
diff changeset
763 gint renderer_tiles_overlay_add(void *renderer, GdkPixbuf *pixbuf, gint x, gint y,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
764 OverlayRendererFlags flags)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
765 {
2070
9ffd4d0e2d12 Fix 4 warnings due to function prototype mismatches.
Laurent Monin <zas@norz.org>
parents: 2043
diff changeset
766 RendererTiles *rt = (RendererTiles *) renderer;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
767 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
768 OverlayData *od;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
769 gint id;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
770
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
771 g_return_val_if_fail(IS_PIXBUF_RENDERER(pr), -1);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
772 g_return_val_if_fail(pixbuf != NULL, -1);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
773
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
774 id = 1;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
775 while (rt_overlay_find(rt, id)) id++;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
776
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
777 od = g_new0(OverlayData, 1);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
778 od->id = id;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
779 od->pixbuf = pixbuf;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
780 g_object_ref(G_OBJECT(od->pixbuf));
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
781 od->x = x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
782 od->y = y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
783 od->flags = flags;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
784
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
785 rt_overlay_init_window(rt, od);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
786
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
787 rt->overlay_list = g_list_append(rt->overlay_list, od);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
788
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
789 rt_overlay_queue_draw(rt, od, 0, 0, 0, 0);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
790
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
791 return od->id;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
792 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
793
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
794 static void rt_overlay_free(RendererTiles *rt, OverlayData *od)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
795 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
796 rt->overlay_list = g_list_remove(rt->overlay_list, od);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
797
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
798 if (od->pixbuf) g_object_unref(G_OBJECT(od->pixbuf));
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
799 if (od->window) gdk_window_destroy(od->window);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
800 g_free(od);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
801
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
802 if (!rt->overlay_list && rt->overlay_buffer)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
803 {
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
804 cairo_surface_destroy(rt->overlay_buffer);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
805 rt->overlay_buffer = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
806 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
807 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
808
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
809 static void rt_overlay_list_clear(RendererTiles *rt)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
810 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
811 while (rt->overlay_list)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
812 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
813 OverlayData *od;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
814
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
815 od = rt->overlay_list->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
816 rt_overlay_free(rt, od);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
817 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
818 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
819
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
820 static void rt_overlay_list_reset_window(RendererTiles *rt)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
821 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
822 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
823
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
824 if (rt->overlay_buffer) cairo_surface_destroy(rt->overlay_buffer);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
825 rt->overlay_buffer = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
826
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
827 work = rt->overlay_list;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
828 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
829 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
830 OverlayData *od = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
831 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
832 if (od->window) gdk_window_destroy(od->window);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
833 od->window = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
834 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
835 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
836
2070
9ffd4d0e2d12 Fix 4 warnings due to function prototype mismatches.
Laurent Monin <zas@norz.org>
parents: 2043
diff changeset
837 void renderer_tiles_overlay_set(void *renderer, gint id, GdkPixbuf *pixbuf, gint x, gint y)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
838 {
2070
9ffd4d0e2d12 Fix 4 warnings due to function prototype mismatches.
Laurent Monin <zas@norz.org>
parents: 2043
diff changeset
839 RendererTiles *rt = (RendererTiles *) renderer;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
840 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
841 OverlayData *od;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
842
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
843 g_return_if_fail(IS_PIXBUF_RENDERER(pr));
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
844
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
845 od = rt_overlay_find(rt, id);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
846 if (!od) return;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
847
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
848 if (pixbuf)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
849 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
850 gint px, py, pw, ph;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
851
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
852 g_object_ref(G_OBJECT(pixbuf));
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
853 g_object_unref(G_OBJECT(od->pixbuf));
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
854 od->pixbuf = pixbuf;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
855
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
856 od->x = x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
857 od->y = y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
858
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
859 if (!od->window) rt_overlay_init_window(rt, od);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
860
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
861 rt_overlay_queue_draw(rt, od, 0, 0, 0, 0);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
862 rt_overlay_get_position(rt, od, &px, &py, &pw, &ph);
1883
1232f787c7ed fixed overlay position - part2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1882
diff changeset
863 gdk_window_move_resize(od->window, px + rt->stereo_off_x, py + rt->stereo_off_y, pw, ph);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
864 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
865 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
866 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
867 rt_overlay_queue_draw(rt, od, 0, 0, 0, 0);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
868 rt_overlay_free(rt, od);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
869 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
870 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
871
2070
9ffd4d0e2d12 Fix 4 warnings due to function prototype mismatches.
Laurent Monin <zas@norz.org>
parents: 2043
diff changeset
872 gboolean renderer_tiles_overlay_get(void *renderer, gint id, GdkPixbuf **pixbuf, gint *x, gint *y)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
873 {
2070
9ffd4d0e2d12 Fix 4 warnings due to function prototype mismatches.
Laurent Monin <zas@norz.org>
parents: 2043
diff changeset
874 RendererTiles *rt = (RendererTiles *) renderer;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
875 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
876 OverlayData *od;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
877
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
878 g_return_val_if_fail(IS_PIXBUF_RENDERER(pr), FALSE);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
879
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
880 od = rt_overlay_find(rt, id);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
881 if (!od) return FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
882
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
883 if (pixbuf) *pixbuf = od->pixbuf;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
884 if (x) *x = od->x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
885 if (y) *y = od->y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
886
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
887 return TRUE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
888 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
889
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
890 static void rt_hierarchy_changed_cb(GtkWidget *widget, GtkWidget *previous_toplevel, gpointer data)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
891 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
892 RendererTiles *rt = data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
893 rt_overlay_list_reset_window(rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
894 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
895
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
896 /*
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
897 *-------------------------------------------------------------------
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
898 * drawing
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
899 *-------------------------------------------------------------------
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
900 */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
901
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
902 static GdkPixbuf *rt_get_spare_tile(RendererTiles *rt)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
903 {
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
904 if (!rt->spare_tile) rt->spare_tile = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, rt->tile_width * rt->hidpi_scale, rt->tile_height * rt->hidpi_scale);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
905 return rt->spare_tile;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
906 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
907
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
908 #define COLOR_BYTES 3 /* rgb */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
909
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
910 static void rt_tile_rotate_90_clockwise(RendererTiles *rt, GdkPixbuf **tile, gint x, gint y, gint w, gint h)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
911 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
912 GdkPixbuf *src = *tile;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
913 GdkPixbuf *dest;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
914 gint srs, drs;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
915 guchar *s_pix, *d_pix;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
916 guchar *sp, *dp;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
917 guchar *ip, *spi, *dpi;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
918 gint i, j;
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
919 gint tw = rt->tile_width * rt->hidpi_scale;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
920
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
921 srs = gdk_pixbuf_get_rowstride(src);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
922 s_pix = gdk_pixbuf_get_pixels(src);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
923 spi = s_pix + (x * COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
924
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
925 dest = rt_get_spare_tile(rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
926 drs = gdk_pixbuf_get_rowstride(dest);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
927 d_pix = gdk_pixbuf_get_pixels(dest);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
928 dpi = d_pix + (tw - 1) * COLOR_BYTES;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
929
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
930 for (i = y; i < y + h; i++)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
931 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
932 sp = spi + (i * srs);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
933 ip = dpi - (i * COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
934 for (j = x; j < x + w; j++)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
935 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
936 dp = ip + (j * drs);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
937 memcpy(dp, sp, COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
938 sp += COLOR_BYTES;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
939 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
940 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
941
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
942 rt->spare_tile = src;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
943 *tile = dest;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
944 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
945
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
946 static void rt_tile_rotate_90_counter_clockwise(RendererTiles *rt, GdkPixbuf **tile, gint x, gint y, gint w, gint h)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
947 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
948 GdkPixbuf *src = *tile;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
949 GdkPixbuf *dest;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
950 gint srs, drs;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
951 guchar *s_pix, *d_pix;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
952 guchar *sp, *dp;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
953 guchar *ip, *spi, *dpi;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
954 gint i, j;
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
955 gint th = rt->tile_height * rt->hidpi_scale;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
956
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
957 srs = gdk_pixbuf_get_rowstride(src);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
958 s_pix = gdk_pixbuf_get_pixels(src);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
959 spi = s_pix + (x * COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
960
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
961 dest = rt_get_spare_tile(rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
962 drs = gdk_pixbuf_get_rowstride(dest);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
963 d_pix = gdk_pixbuf_get_pixels(dest);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
964 dpi = d_pix + (th - 1) * drs;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
965
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
966 for (i = y; i < y + h; i++)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
967 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
968 sp = spi + (i * srs);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
969 ip = dpi + (i * COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
970 for (j = x; j < x + w; j++)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
971 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
972 dp = ip - (j * drs);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
973 memcpy(dp, sp, COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
974 sp += COLOR_BYTES;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
975 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
976 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
977
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
978 rt->spare_tile = src;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
979 *tile = dest;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
980 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
981
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
982 static void rt_tile_mirror_only(RendererTiles *rt, GdkPixbuf **tile, gint x, gint y, gint w, gint h)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
983 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
984 GdkPixbuf *src = *tile;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
985 GdkPixbuf *dest;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
986 gint srs, drs;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
987 guchar *s_pix, *d_pix;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
988 guchar *sp, *dp;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
989 guchar *spi, *dpi;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
990 gint i, j;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
991
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
992 gint tw = rt->tile_width * rt->hidpi_scale;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
993
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
994 srs = gdk_pixbuf_get_rowstride(src);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
995 s_pix = gdk_pixbuf_get_pixels(src);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
996 spi = s_pix + (x * COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
997
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
998 dest = rt_get_spare_tile(rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
999 drs = gdk_pixbuf_get_rowstride(dest);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1000 d_pix = gdk_pixbuf_get_pixels(dest);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1001 dpi = d_pix + (tw - x - 1) * COLOR_BYTES;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1002
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1003 for (i = y; i < y + h; i++)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1004 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1005 sp = spi + (i * srs);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1006 dp = dpi + (i * drs);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1007 for (j = 0; j < w; j++)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1008 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1009 memcpy(dp, sp, COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1010 sp += COLOR_BYTES;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1011 dp -= COLOR_BYTES;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1012 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1013 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1014
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1015 rt->spare_tile = src;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1016 *tile = dest;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1017 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1018
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1019 static void rt_tile_mirror_and_flip(RendererTiles *rt, GdkPixbuf **tile, gint x, gint y, gint w, gint h)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1020 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1021 GdkPixbuf *src = *tile;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1022 GdkPixbuf *dest;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1023 gint srs, drs;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1024 guchar *s_pix, *d_pix;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1025 guchar *sp, *dp;
2181
8addfcef82af Clear few more warnings, unused variables mostly.
Laurent Monin <zas@norz.org>
parents: 2171
diff changeset
1026 guchar *dpi;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1027 gint i, j;
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1028 gint tw = rt->tile_width * rt->hidpi_scale;
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1029 gint th = rt->tile_height * rt->hidpi_scale;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1030
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1031 srs = gdk_pixbuf_get_rowstride(src);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1032 s_pix = gdk_pixbuf_get_pixels(src);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1033
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1034 dest = rt_get_spare_tile(rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1035 drs = gdk_pixbuf_get_rowstride(dest);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1036 d_pix = gdk_pixbuf_get_pixels(dest);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1037 dpi = d_pix + (th - 1) * drs + (tw - 1) * COLOR_BYTES;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1038
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1039 for (i = y; i < y + h; i++)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1040 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1041 sp = s_pix + (i * srs) + (x * COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1042 dp = dpi - (i * drs) - (x * COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1043 for (j = 0; j < w; j++)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1044 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1045 memcpy(dp, sp, COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1046 sp += COLOR_BYTES;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1047 dp -= COLOR_BYTES;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1048 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1049 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1050
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1051 rt->spare_tile = src;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1052 *tile = dest;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1053 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1054
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1055 static void rt_tile_flip_only(RendererTiles *rt, GdkPixbuf **tile, gint x, gint y, gint w, gint h)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1056 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1057 GdkPixbuf *src = *tile;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1058 GdkPixbuf *dest;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1059 gint srs, drs;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1060 guchar *s_pix, *d_pix;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1061 guchar *sp, *dp;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1062 guchar *spi, *dpi;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1063 gint i;
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1064 gint th = rt->tile_height * rt->hidpi_scale;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1065
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1066 srs = gdk_pixbuf_get_rowstride(src);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1067 s_pix = gdk_pixbuf_get_pixels(src);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1068 spi = s_pix + (x * COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1069
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1070 dest = rt_get_spare_tile(rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1071 drs = gdk_pixbuf_get_rowstride(dest);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1072 d_pix = gdk_pixbuf_get_pixels(dest);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1073 dpi = d_pix + (th - 1) * drs + (x * COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1074
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1075 for (i = y; i < y + h; i++)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1076 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1077 sp = spi + (i * srs);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1078 dp = dpi - (i * drs);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1079 memcpy(dp, sp, w * COLOR_BYTES);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1080 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1081
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1082 rt->spare_tile = src;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1083 *tile = dest;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1084 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1085
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1086 static void rt_tile_apply_orientation(RendererTiles *rt, gint orientation, GdkPixbuf **pixbuf, gint x, gint y, gint w, gint h)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1087 {
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1088 switch (orientation)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1089 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1090 case EXIF_ORIENTATION_TOP_LEFT:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1091 /* normal -- nothing to do */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1092 break;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1093 case EXIF_ORIENTATION_TOP_RIGHT:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1094 /* mirrored */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1095 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1096 rt_tile_mirror_only(rt, pixbuf, x, y, w, h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1097 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1098 break;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1099 case EXIF_ORIENTATION_BOTTOM_RIGHT:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1100 /* upside down */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1101 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1102 rt_tile_mirror_and_flip(rt, pixbuf, x, y, w, h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1103 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1104 break;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1105 case EXIF_ORIENTATION_BOTTOM_LEFT:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1106 /* flipped */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1107 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1108 rt_tile_flip_only(rt, pixbuf, x, y, w, h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1109 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1110 break;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1111 case EXIF_ORIENTATION_LEFT_TOP:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1112 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1113 rt_tile_flip_only(rt, pixbuf, x, y, w, h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1114 rt_tile_rotate_90_clockwise(rt, pixbuf, x, rt->tile_height - y - h, w, h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1115 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1116 break;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1117 case EXIF_ORIENTATION_RIGHT_TOP:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1118 /* rotated -90 (270) */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1119 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1120 rt_tile_rotate_90_clockwise(rt, pixbuf, x, y, w, h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1121 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1122 break;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1123 case EXIF_ORIENTATION_RIGHT_BOTTOM:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1124 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1125 rt_tile_flip_only(rt, pixbuf, x, y, w, h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1126 rt_tile_rotate_90_counter_clockwise(rt, pixbuf, x, rt->tile_height - y - h, w, h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1127 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1128 break;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1129 case EXIF_ORIENTATION_LEFT_BOTTOM:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1130 /* rotated 90 */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1131 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1132 rt_tile_rotate_90_counter_clockwise(rt, pixbuf, x, y, w, h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1133 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1134 break;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1135 default:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1136 /* The other values are out of range */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1137 break;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1138 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1139 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1140
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1141 static gboolean rt_source_tile_render(RendererTiles *rt, ImageTile *it,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1142 gint x, gint y, gint w, gint h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1143 gboolean new_data, gboolean fast)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1144 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1145 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1146 GList *list;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1147 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1148 gboolean draw = FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1149
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1150 if (pr->zoom == 1.0 || pr->scale == 1.0)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1151 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1152 list = pr_source_tile_compute_region(pr, it->x + x, it->y + y, w, h, TRUE);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1153 work = list;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1154 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1155 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1156 SourceTile *st;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1157 gint rx, ry, rw, rh;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1158
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1159 st = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1160 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1161
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1162 if (pr_clip_region(st->x, st->y, pr->source_tile_width, pr->source_tile_height,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1163 it->x + x, it->y + y, w, h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1164 &rx, &ry, &rw, &rh))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1165 {
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1166 cairo_t *cr;
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1167 cr = cairo_create(it->surface);
2041
4f01c4aeb2d9 fixed pan-view drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2035
diff changeset
1168 cairo_rectangle (cr, rx - it->x, ry - it->y, rw, rh);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1169
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1170 if (st->blank)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1171 {
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1172 cairo_set_source_rgb(cr, 0, 0, 0);
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1173 cairo_fill (cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1174 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1175 else /* (pr->zoom == 1.0 || pr->scale == 1.0) */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1176 {
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1177 rt_hidpi_aware_draw(rt, cr, st->pixbuf, -it->x + st->x, -it->y + st->y);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1178 }
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1179 cairo_destroy (cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1180 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1181 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1182 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1183 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1184 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1185 gdouble scale_x, scale_y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1186 gint sx, sy, sw, sh;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1187
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1188 if (pr->image_width == 0 || pr->image_height == 0) return FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1189 scale_x = (gdouble)pr->width / pr->image_width;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1190 scale_y = (gdouble)pr->height / pr->image_height;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1191
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1192 sx = (gdouble)(it->x + x) / scale_x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1193 sy = (gdouble)(it->y + y) / scale_y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1194 sw = (gdouble)w / scale_x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1195 sh = (gdouble)h / scale_y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1196
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1197 if (pr->width < PR_MIN_SCALE_SIZE || pr->height < PR_MIN_SCALE_SIZE) fast = TRUE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1198
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1199 #if 0
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1200 /* draws red over draw region, to check for leaks (regions not filled) */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1201 pixbuf_set_rect_fill(it->pixbuf, x, y, w, h, 255, 0, 0, 255);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1202 #endif
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1203
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1204 list = pr_source_tile_compute_region(pr, sx, sy, sw, sh, TRUE);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1205 work = list;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1206 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1207 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1208 SourceTile *st;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1209 gint rx, ry, rw, rh;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1210 gint stx, sty, stw, sth;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1211
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1212 st = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1213 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1214
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1215 stx = floor((gdouble)st->x * scale_x);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1216 sty = floor((gdouble)st->y * scale_y);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1217 stw = ceil((gdouble)(st->x + pr->source_tile_width) * scale_x) - stx;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1218 sth = ceil((gdouble)(st->y + pr->source_tile_height) * scale_y) - sty;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1219
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1220 if (pr_clip_region(stx, sty, stw, sth,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1221 it->x + x, it->y + y, w, h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1222 &rx, &ry, &rw, &rh))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1223 {
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1224
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1225 if (st->blank)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1226 {
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1227 cairo_t *cr;
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1228 cr = cairo_create(it->surface);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1229 cairo_rectangle (cr, rx - st->x, ry - st->y, rw, rh);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1230 cairo_set_source_rgb(cr, 0, 0, 0);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1231 cairo_fill (cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1232 cairo_destroy (cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1233 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1234 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1235 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1236 gdouble offset_x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1237 gdouble offset_y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1238
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1239 /* may need to use unfloored stx,sty values here */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1240 offset_x = (gdouble)(stx - it->x);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1241 offset_y = (gdouble)(sty - it->y);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1242
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1243 gdk_pixbuf_scale(st->pixbuf, it->pixbuf, rx - it->x, ry - it->y, rw, rh,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1244 (gdouble) 0.0 + offset_x,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1245 (gdouble) 0.0 + offset_y,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1246 scale_x, scale_y,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1247 (fast) ? GDK_INTERP_NEAREST : pr->zoom_quality);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1248 draw = TRUE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1249 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1250 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1251 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1252 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1253
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1254 g_list_free(list);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1255
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1256 return draw;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1257 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1258
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1259 static void rt_tile_get_region(gboolean has_alpha,
1876
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1260 const GdkPixbuf *src, GdkPixbuf *dest,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1261 int pb_x, int pb_y, int pb_w, int pb_h,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1262 double offset_x, double offset_y, double scale_x, double scale_y,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1263 GdkInterpType interp_type,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1264 int check_x, int check_y)
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1265 {
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1266 if (!has_alpha)
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1267 {
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1268 if (scale_x == 1.0 && scale_y == 1.0)
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1269 {
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1270 gdk_pixbuf_copy_area(src,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1271 -offset_x + pb_x, -offset_y + pb_y,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1272 pb_w, pb_h,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1273 dest,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1274 pb_x, pb_y);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1275 }
1876
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1276 else
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1277 {
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1278 gdk_pixbuf_scale(src, dest,
1876
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1279 pb_x, pb_y, pb_w, pb_h,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1280 offset_x,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1281 offset_y,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1282 scale_x, scale_y,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1283 interp_type);
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1284 }
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1285 }
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1286 else
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1287 {
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1288 gdk_pixbuf_composite_color(src, dest,
1876
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1289 pb_x, pb_y, pb_w, pb_h,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1290 offset_x,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1291 offset_y,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1292 scale_x, scale_y,
2567
09386a249046 Fix #192: tiff files (and others) appear blurry when 1:1 view
Colin Clark <colin.clark@cclark.uk>
parents: 2457
diff changeset
1293 (scale_x == 1.0 && scale_y == 1.0) ? GDK_INTERP_NEAREST : interp_type,
1876
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1294 255, check_x, check_y,
2457
58f993045468 Fix #219: Ability to set solid colour for transparency layer
Colin Clark <cclark@mcb.net>
parents: 2381
diff changeset
1295 PR_ALPHA_CHECK_SIZE,
58f993045468 Fix #219: Ability to set solid colour for transparency layer
Colin Clark <cclark@mcb.net>
parents: 2381
diff changeset
1296 ((options->image.alpha_color_1.red << 8 & 0x00FF0000) +
58f993045468 Fix #219: Ability to set solid colour for transparency layer
Colin Clark <cclark@mcb.net>
parents: 2381
diff changeset
1297 (options->image.alpha_color_1.green & 0x00FF00) +
58f993045468 Fix #219: Ability to set solid colour for transparency layer
Colin Clark <cclark@mcb.net>
parents: 2381
diff changeset
1298 (options->image.alpha_color_1.blue >> 8 & 0x00FF)),
58f993045468 Fix #219: Ability to set solid colour for transparency layer
Colin Clark <cclark@mcb.net>
parents: 2381
diff changeset
1299 ((options->image.alpha_color_2.red << 8 & 0x00FF0000) +
58f993045468 Fix #219: Ability to set solid colour for transparency layer
Colin Clark <cclark@mcb.net>
parents: 2381
diff changeset
1300 (options->image.alpha_color_2.green & 0x00FF00) +
58f993045468 Fix #219: Ability to set solid colour for transparency layer
Colin Clark <cclark@mcb.net>
parents: 2381
diff changeset
1301 (options->image.alpha_color_2.blue >> 8 & 0x00FF)));
1876
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1302 }
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1303 }
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1304
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1305
1897
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1306 static gint rt_get_orientation(RendererTiles *rt)
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1307 {
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1308 PixbufRenderer *pr = rt->pr;
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1309
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1310 gint orientation = pr->orientation;
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1311 static const gint mirror[] = {1, 2, 1, 4, 3, 6, 5, 8, 7};
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1312 static const gint flip[] = {1, 4, 3, 2, 1, 8, 7, 6, 5};
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1313
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1314 if (rt->stereo_mode & PR_STEREO_MIRROR) orientation = mirror[orientation];
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1315 if (rt->stereo_mode & PR_STEREO_FLIP) orientation = flip[orientation];
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1316 return orientation;
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1317 }
1876
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1318
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1319
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1320 static void rt_tile_render(RendererTiles *rt, ImageTile *it,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1321 gint x, gint y, gint w, gint h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1322 gboolean new_data, gboolean fast)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1323 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1324 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1325 gboolean has_alpha;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1326 gboolean draw = FALSE;
1897
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1327 gint orientation = rt_get_orientation(rt);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1328
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1329 if (it->render_todo == TILE_RENDER_NONE && it->surface && !new_data) return;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1330
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1331 if (it->render_done != TILE_RENDER_ALL)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1332 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1333 x = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1334 y = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1335 w = it->w;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1336 h = it->h;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1337 if (!fast) it->render_done = TILE_RENDER_ALL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1338 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1339 else if (it->render_todo != TILE_RENDER_AREA)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1340 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1341 if (!fast) it->render_todo = TILE_RENDER_NONE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1342 return;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1343 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1344
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1345 if (!fast) it->render_todo = TILE_RENDER_NONE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1346
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1347 if (new_data) it->blank = FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1348
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1349 rt_tile_prepare(rt, it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1350 has_alpha = (pr->pixbuf && gdk_pixbuf_get_has_alpha(pr->pixbuf));
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1351
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1352 /* FIXME checker colors for alpha should be configurable,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1353 * also should be drawn for blank = TRUE
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1354 */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1355
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1356 if (it->blank)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1357 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1358 /* no data, do fast rect fill */
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1359 cairo_t *cr;
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1360 cr = cairo_create(it->surface);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1361 cairo_rectangle (cr, 0, 0, it->w, it->h);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1362 cairo_set_source_rgb(cr, 0, 0, 0);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1363 cairo_fill (cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1364 cairo_destroy (cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1365 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1366 else if (pr->source_tiles_enabled)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1367 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1368 draw = rt_source_tile_render(rt, it, x, y, w, h, new_data, fast);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1369 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1370 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1371 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1372 gdouble scale_x, scale_y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1373 gdouble src_x, src_y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1374 gint pb_x, pb_y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1375 gint pb_w, pb_h;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1376
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1377 if (pr->image_width == 0 || pr->image_height == 0) return;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1378
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1379 scale_x = rt->hidpi_scale * (gdouble)pr->width / pr->image_width;
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1380 scale_y = rt->hidpi_scale * (gdouble)pr->height / pr->image_height;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1381
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1382 pr_tile_coords_map_orientation(orientation, it->x, it->y,
1878
11850512dbdd rt_tile_render cleanup part 3
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1877
diff changeset
1383 pr->width, pr->height,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1384 rt->tile_width, rt->tile_height,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1385 &src_x, &src_y);
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1386 pr_tile_region_map_orientation(orientation, x, y,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1387 rt->tile_width, rt->tile_height,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1388 w, h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1389 &pb_x, &pb_y,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1390 &pb_w, &pb_h);
1885
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
1391
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1392 src_x *= rt->hidpi_scale;
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1393 src_y *= rt->hidpi_scale;
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1394 pb_x *= rt->hidpi_scale;
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1395 pb_y *= rt->hidpi_scale;
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1396 pb_w *= rt->hidpi_scale;
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1397 pb_h *= rt->hidpi_scale;
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1398
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1399 switch (orientation)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1400 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1401 gdouble tmp;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1402 case EXIF_ORIENTATION_LEFT_TOP:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1403 case EXIF_ORIENTATION_RIGHT_TOP:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1404 case EXIF_ORIENTATION_RIGHT_BOTTOM:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1405 case EXIF_ORIENTATION_LEFT_BOTTOM:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1406 tmp = scale_x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1407 scale_x = scale_y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1408 scale_y = tmp;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1409 break;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1410 default:
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1411 /* nothing to do */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1412 break;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1413 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1414
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1415 /* HACK: The pixbuf scalers get kinda buggy(crash) with extremely
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1416 * small sizes for anything but GDK_INTERP_NEAREST
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1417 */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1418 if (pr->width < PR_MIN_SCALE_SIZE || pr->height < PR_MIN_SCALE_SIZE) fast = TRUE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1419
1876
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1420 rt_tile_get_region(has_alpha,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1421 pr->pixbuf, it->pixbuf, pb_x, pb_y, pb_w, pb_h,
1885
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
1422 (gdouble) 0.0 - src_x - GET_RIGHT_PIXBUF_OFFSET(rt) * scale_x,
1876
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1423 (gdouble) 0.0 - src_y,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1424 scale_x, scale_y,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1425 (fast) ? GDK_INTERP_NEAREST : pr->zoom_quality,
cdf087e6e22f rt_tile_render cleanup part 1
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1875
diff changeset
1426 it->x + pb_x, it->y + pb_y);
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1427 if (rt->stereo_mode & PR_STEREO_ANAGLYPH &&
1888
039d5c8864a0 type of source stereo image made adjustable from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1886
diff changeset
1428 (pr->stereo_pixbuf_offset_right > 0 || pr->stereo_pixbuf_offset_left > 0))
1879
880d06578486 anaglyph support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1878
diff changeset
1429 {
880d06578486 anaglyph support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1878
diff changeset
1430 GdkPixbuf *right_pb = rt_get_spare_tile(rt);
880d06578486 anaglyph support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1878
diff changeset
1431 rt_tile_get_region(has_alpha,
880d06578486 anaglyph support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1878
diff changeset
1432 pr->pixbuf, right_pb, pb_x, pb_y, pb_w, pb_h,
1885
b56aeaa0b5df swap stereo images
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1884
diff changeset
1433 (gdouble) 0.0 - src_x - GET_LEFT_PIXBUF_OFFSET(rt) * scale_x,
1879
880d06578486 anaglyph support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1878
diff changeset
1434 (gdouble) 0.0 - src_y,
880d06578486 anaglyph support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1878
diff changeset
1435 scale_x, scale_y,
880d06578486 anaglyph support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1878
diff changeset
1436 (fast) ? GDK_INTERP_NEAREST : pr->zoom_quality,
880d06578486 anaglyph support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1878
diff changeset
1437 it->x + pb_x, it->y + pb_y);
1896
9604c72ac670 added more anaglyph modes
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1891
diff changeset
1438 pr_create_anaglyph(rt->stereo_mode, it->pixbuf, right_pb, pb_x, pb_y, pb_w, pb_h);
1879
880d06578486 anaglyph support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1878
diff changeset
1439 /* do not care about freeing spare_tile, it will be reused */
880d06578486 anaglyph support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1878
diff changeset
1440 }
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1441 rt_tile_apply_orientation(rt, orientation, &it->pixbuf, pb_x, pb_y, pb_w, pb_h);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1442 draw = TRUE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1443 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1444
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1445 if (draw && it->pixbuf && !it->blank)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1446 {
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1447 cairo_t *cr;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1448
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1449 if (pr->func_post_process && !(pr->post_process_slow && fast))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1450 pr->func_post_process(pr, &it->pixbuf, x, y, w, h, pr->post_process_user_data);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1451
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1452 cr = cairo_create(it->surface);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1453 cairo_rectangle (cr, x, y, w, h);
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
1454 rt_hidpi_aware_draw(rt, cr, it->pixbuf, 0, 0);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1455 cairo_destroy (cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1456 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1457 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1458
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1459
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1460 static void rt_tile_expose(RendererTiles *rt, ImageTile *it,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1461 gint x, gint y, gint w, gint h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1462 gboolean new_data, gboolean fast)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1463 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1464 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1465 GtkWidget *box;
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1466 GdkWindow *window;
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1467 cairo_t *cr;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1468
1881
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1469 /* clamp to visible */
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1470 if (it->x + x < rt->x_scroll)
1881
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1471 {
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1472 w -= rt->x_scroll - it->x - x;
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1473 x = rt->x_scroll - it->x;
1881
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1474 }
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1475 if (it->x + x + w > rt->x_scroll + pr->vis_width)
1881
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1476 {
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1477 w = rt->x_scroll + pr->vis_width - it->x - x;
1881
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1478 }
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1479 if (w < 1) return;
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1480 if (it->y + y < rt->y_scroll)
1881
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1481 {
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1482 h -= rt->y_scroll - it->y - y;
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1483 y = rt->y_scroll - it->y;
1881
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1484 }
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1485 if (it->y + y + h > rt->y_scroll + pr->vis_height)
1881
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1486 {
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1487 h = rt->y_scroll + pr->vis_height - it->y - y;
1881
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1488 }
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1489 if (h < 1) return;
a0cd1875b1af do not draw tiles outside the viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1880
diff changeset
1490
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1491 rt_tile_render(rt, it, x, y, w, h, new_data, fast);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1492
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1493 box = GTK_WIDGET(pr);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1494 window = gtk_widget_get_window(box);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1495
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1496 cr = gdk_cairo_create(window);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1497 cairo_set_source_surface(cr, it->surface, pr->x_offset + (it->x - rt->x_scroll) + rt->stereo_off_x, pr->y_offset + (it->y - rt->y_scroll) + rt->stereo_off_y);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1498 cairo_rectangle (cr, pr->x_offset + (it->x - rt->x_scroll) + x + rt->stereo_off_x, pr->y_offset + (it->y - rt->y_scroll) + y + rt->stereo_off_y, w, h);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1499 cairo_fill (cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1500 cairo_destroy (cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1501
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1502 if (rt->overlay_list)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1503 {
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1504 rt_overlay_draw(rt, pr->x_offset + (it->x - rt->x_scroll) + x,
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1505 pr->y_offset + (it->y - rt->y_scroll) + y,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1506 w, h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1507 it);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1508 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1509 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1510
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1511
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1512 static gboolean rt_tile_is_visible(RendererTiles *rt, ImageTile *it)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1513 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1514 PixbufRenderer *pr = rt->pr;
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1515 return (it->x + it->w >= rt->x_scroll && it->x < rt->x_scroll + pr->vis_width &&
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1516 it->y + it->h >= rt->y_scroll && it->y < rt->y_scroll + pr->vis_height);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1517 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1518
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1519 /*
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1520 *-------------------------------------------------------------------
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1521 * draw queue
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1522 *-------------------------------------------------------------------
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1523 */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1524
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1525 static gint rt_get_queued_area(GList *work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1526 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1527 gint area = 0;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1528
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1529 while (work)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1530 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1531 QueueData *qd = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1532 area += qd->w * qd->h;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1533 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1534 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1535 return area;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1536 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1537
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1538
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1539 static gboolean rt_queue_schedule_next_draw(RendererTiles *rt, gboolean force_set)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1540 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1541 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1542 gfloat percent;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1543 gint visible_area = pr->vis_width * pr->vis_height;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1544
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1545 if (!pr->loading)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1546 {
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1547 /* 2pass prio */
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1548 DEBUG_2("redraw priority: 2pass");
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1549 rt->draw_idle_id = g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, rt_queue_draw_idle_cb, rt, NULL);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1550 return FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1551 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1552
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1553 if (visible_area == 0)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1554 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1555 /* not known yet */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1556 percent = 100.0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1557 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1558 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1559 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1560 percent = 100.0 * rt_get_queued_area(rt->draw_queue) / visible_area;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1561 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1562
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1563 if (percent > 10.0)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1564 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1565 /* we have enough data for starting intensive redrawing */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1566 DEBUG_2("redraw priority: high %.2f %%", percent);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1567 rt->draw_idle_id = g_idle_add_full(GDK_PRIORITY_REDRAW, rt_queue_draw_idle_cb, rt, NULL);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1568 return FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1569 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1570
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1571 if (percent < 1.0 || force_set)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1572 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1573 /* queue is (almost) empty, wait 50 ms*/
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1574 DEBUG_2("redraw priority: wait %.2f %%", percent);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1575 rt->draw_idle_id = g_timeout_add_full(G_PRIORITY_DEFAULT_IDLE, 50, rt_queue_draw_idle_cb, rt, NULL);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1576 return FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1577 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1578
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1579 /* keep the same priority as before */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1580 DEBUG_2("redraw priority: no change %.2f %%", percent);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1581 return TRUE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1582 }
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
1583
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1584
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1585 static gboolean rt_queue_draw_idle_cb(gpointer data)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1586 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1587 RendererTiles *rt = data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1588 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1589 QueueData *qd;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1590 gboolean fast;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1591
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1592
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1593 if ((!pr->pixbuf && !pr->source_tiles_enabled) ||
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1594 (!rt->draw_queue && !rt->draw_queue_2pass) ||
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1595 !rt->draw_idle_id)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1596 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1597 pr_render_complete_signal(pr);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1598
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1599 rt->draw_idle_id = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1600 return FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1601 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1602
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1603 if (rt->draw_queue)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1604 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1605 qd = rt->draw_queue->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1606 fast = (pr->zoom_2pass && ((pr->zoom_quality != GDK_INTERP_NEAREST && pr->scale != 1.0) || pr->post_process_slow));
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1607 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1608 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1609 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1610 if (pr->loading)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1611 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1612 /* still loading, wait till done (also drops the higher priority) */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1613
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1614 return rt_queue_schedule_next_draw(rt, FALSE);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1615 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1616
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1617 qd = rt->draw_queue_2pass->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1618 fast = FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1619 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1620
2106
5d1448be37ec Fix 2 compilation warnings due to missing type casting.
Laurent Monin <zas@norz.org>
parents: 2096
diff changeset
1621 if (gtk_widget_get_realized(GTK_WIDGET(pr)))
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1622 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1623 if (rt_tile_is_visible(rt, qd->it))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1624 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1625 rt_tile_expose(rt, qd->it, qd->x, qd->y, qd->w, qd->h, qd->new_data, fast);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1626 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1627 else if (qd->new_data)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1628 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1629 /* if new pixel data, and we already have a pixmap, update the tile */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1630 qd->it->blank = FALSE;
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1631 if (qd->it->surface && qd->it->render_done == TILE_RENDER_ALL)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1632 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1633 rt_tile_render(rt, qd->it, qd->x, qd->y, qd->w, qd->h, qd->new_data, fast);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1634 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1635 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1636 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1637
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1638 if (rt->draw_queue)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1639 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1640 qd->it->qd = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1641 rt->draw_queue = g_list_remove(rt->draw_queue, qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1642 if (fast)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1643 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1644 if (qd->it->qd2)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1645 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1646 rt_queue_merge(qd->it->qd2, qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1647 g_free(qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1648 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1649 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1650 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1651 qd->it->qd2 = qd;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1652 rt->draw_queue_2pass = g_list_append(rt->draw_queue_2pass, qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1653 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1654 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1655 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1656 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1657 g_free(qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1658 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1659 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1660 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1661 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1662 qd->it->qd2 = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1663 rt->draw_queue_2pass = g_list_remove(rt->draw_queue_2pass, qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1664 g_free(qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1665 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1666
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1667 if (!rt->draw_queue && !rt->draw_queue_2pass)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1668 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1669 pr_render_complete_signal(pr);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1670
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1671 rt->draw_idle_id = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1672 return FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1673 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1674
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1675 return rt_queue_schedule_next_draw(rt, FALSE);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1676 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1677
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1678 static void rt_queue_list_free(GList *list)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1679 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1680 GList *work;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1681
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1682 work = list;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1683 while (work)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1684 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1685 QueueData *qd;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1686
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1687 qd = work->data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1688 work = work->next;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1689
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1690 qd->it->qd = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1691 qd->it->qd2 = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1692 g_free(qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1693 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1694
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1695 g_list_free(list);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1696 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1697
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1698 static void rt_queue_clear(RendererTiles *rt)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1699 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1700 rt_queue_list_free(rt->draw_queue);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1701 rt->draw_queue = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1702
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1703 rt_queue_list_free(rt->draw_queue_2pass);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1704 rt->draw_queue_2pass = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1705
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1706 if (rt->draw_idle_id)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1707 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1708 g_source_remove(rt->draw_idle_id);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1709 rt->draw_idle_id = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1710 }
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1711 rt_sync_scroll(rt);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1712 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1713
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1714 static void rt_queue_merge(QueueData *parent, QueueData *qd)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1715 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1716 if (parent->x + parent->w < qd->x + qd->w)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1717 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1718 parent->w += (qd->x + qd->w) - (parent->x + parent->w);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1719 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1720 if (parent->x > qd->x)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1721 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1722 parent->w += parent->x - qd->x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1723 parent->x = qd->x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1724 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1725
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1726 if (parent->y + parent->h < qd->y + qd->h)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1727 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1728 parent->h += (qd->y + qd->h) - (parent->y + parent->h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1729 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1730 if (parent->y > qd->y)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1731 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1732 parent->h += parent->y - qd->y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1733 parent->y = qd->y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1734 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1735
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1736 parent->new_data |= qd->new_data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1737 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1738
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1739 static gboolean rt_clamp_to_visible(RendererTiles *rt, gint *x, gint *y, gint *w, gint *h)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1740 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1741 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1742 gint nx, ny;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1743 gint nw, nh;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1744 gint vx, vy;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1745 gint vw, vh;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1746
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1747 vw = pr->vis_width;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1748 vh = pr->vis_height;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1749
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1750 vx = rt->x_scroll;
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1751 vy = rt->y_scroll;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1752
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1753 if (*x + *w < vx || *x > vx + vw || *y + *h < vy || *y > vy + vh) return FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1754
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1755 /* now clamp it */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1756 nx = CLAMP(*x, vx, vx + vw);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1757 nw = CLAMP(*w - (nx - *x), 1, vw);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1758
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1759 ny = CLAMP(*y, vy, vy + vh);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1760 nh = CLAMP(*h - (ny - *y), 1, vh);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1761
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1762 *x = nx;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1763 *y = ny;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1764 *w = nw;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1765 *h = nh;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1766
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1767 return TRUE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1768 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1769
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1770 static gboolean rt_queue_to_tiles(RendererTiles *rt, gint x, gint y, gint w, gint h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1771 gboolean clamp, ImageRenderType render,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1772 gboolean new_data, gboolean only_existing)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1773 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1774 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1775 gint i, j;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1776 gint x1, x2;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1777 gint y1, y2;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1778
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1779 if (clamp && !rt_clamp_to_visible(rt, &x, &y, &w, &h)) return FALSE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1780
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1781 x1 = ROUND_DOWN(x, rt->tile_width);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1782 x2 = ROUND_UP(x + w, rt->tile_width);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1783
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1784 y1 = ROUND_DOWN(y, rt->tile_height);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1785 y2 = ROUND_UP(y + h, rt->tile_height);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1786
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1787 for (j = y1; j <= y2; j += rt->tile_height)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1788 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1789 for (i = x1; i <= x2; i += rt->tile_width)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1790 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1791 ImageTile *it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1792
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1793 it = rt_tile_get(rt, i, j,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1794 (only_existing &&
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1795 (i + rt->tile_width < rt->x_scroll ||
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1796 i > rt->x_scroll + pr->vis_width ||
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1797 j + rt->tile_height < rt->y_scroll ||
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1798 j > rt->y_scroll + pr->vis_height)));
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1799 if (it)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1800 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1801 QueueData *qd;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1802
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1803 if ((render == TILE_RENDER_ALL && it->render_done != TILE_RENDER_ALL) ||
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1804 (render == TILE_RENDER_AREA && it->render_todo != TILE_RENDER_ALL))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1805 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1806 it->render_todo = render;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1807 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1808
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1809 qd = g_new(QueueData, 1);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1810 qd->it = it;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1811 qd->new_data = new_data;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1812
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1813 if (i < x)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1814 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1815 qd->x = x - i;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1816 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1817 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1818 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1819 qd->x = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1820 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1821 qd->w = x + w - i - qd->x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1822 if (qd->x + qd->w > rt->tile_width) qd->w = rt->tile_width - qd->x;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1823
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1824 if (j < y)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1825 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1826 qd->y = y - j;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1827 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1828 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1829 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1830 qd->y = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1831 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1832 qd->h = y + h - j - qd->y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1833 if (qd->y + qd->h > rt->tile_height) qd->h = rt->tile_height - qd->y;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1834
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1835 if (qd->w < 1 || qd->h < 1)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1836 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1837 g_free(qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1838 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1839 else if (it->qd)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1840 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1841 rt_queue_merge(it->qd, qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1842 g_free(qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1843 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1844 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1845 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1846 it->qd = qd;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1847 rt->draw_queue = g_list_append(rt->draw_queue, qd);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1848 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1849 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1850 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1851 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1852
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1853 return TRUE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1854 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1855
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1856 static void rt_queue(RendererTiles *rt, gint x, gint y, gint w, gint h,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1857 gboolean clamp, ImageRenderType render,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1858 gboolean new_data, gboolean only_existing)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1859 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1860 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1861 gint nx, ny;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1862
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1863 rt_sync_scroll(rt);
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1864
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1865 nx = CLAMP(x, 0, pr->width - 1);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1866 ny = CLAMP(y, 0, pr->height - 1);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1867 w -= (nx - x);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1868 h -= (ny - y);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1869 w = CLAMP(w, 0, pr->width - nx);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1870 h = CLAMP(h, 0, pr->height - ny);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1871 if (w < 1 || h < 1) return;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1872
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1873 if (rt_queue_to_tiles(rt, nx, ny, w, h, clamp, render, new_data, only_existing) &&
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1874 ((!rt->draw_queue && !rt->draw_queue_2pass) || !rt->draw_idle_id))
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1875 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1876 if (rt->draw_idle_id)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1877 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1878 g_source_remove(rt->draw_idle_id);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1879 rt->draw_idle_id = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1880 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1881 rt_queue_schedule_next_draw(rt, TRUE);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1882 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1883 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1884
2070
9ffd4d0e2d12 Fix 4 warnings due to function prototype mismatches.
Laurent Monin <zas@norz.org>
parents: 2043
diff changeset
1885 static void rt_scroll(void *renderer, gint x_off, gint y_off)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1886 {
2070
9ffd4d0e2d12 Fix 4 warnings due to function prototype mismatches.
Laurent Monin <zas@norz.org>
parents: 2043
diff changeset
1887 RendererTiles *rt = (RendererTiles *) renderer;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1888 PixbufRenderer *pr = rt->pr;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1889
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1890 rt_sync_scroll(rt);
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1891 if (rt->stereo_mode & PR_STEREO_MIRROR) x_off = -x_off;
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
1892 if (rt->stereo_mode & PR_STEREO_FLIP) y_off = -y_off;
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1893
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1894 gint w = pr->vis_width - abs(x_off);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1895 gint h = pr->vis_height - abs(y_off);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1896
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1897 if (w < 1 || h < 1)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1898 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1899 /* scrolled completely to new material */
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1900 rt_queue(rt, 0, 0, pr->width, pr->height, TRUE, TILE_RENDER_ALL, FALSE, FALSE);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1901 return;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1902 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1903 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1904 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1905 gint x1, y1;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1906 gint x2, y2;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1907 GtkWidget *box;
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1908 GdkWindow *window;
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1909 cairo_t *cr;
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1910 cairo_surface_t *surface;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1911
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1912 if (x_off < 0)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1913 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1914 x1 = abs(x_off);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1915 x2 = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1916 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1917 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1918 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1919 x1 = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1920 x2 = abs(x_off);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1921 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1922
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1923 if (y_off < 0)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1924 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1925 y1 = abs(y_off);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1926 y2 = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1927 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1928 else
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1929 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1930 y1 = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1931 y2 = abs(y_off);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1932 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1933
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1934 box = GTK_WIDGET(pr);
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1935 window = gtk_widget_get_window(box);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1936
2035
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1937 cr = gdk_cairo_create(window);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1938 surface = cairo_get_target(cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1939 /* clipping restricts the intermediate surface's size, so it's a good idea
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1940 * to use it. */
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1941 cairo_rectangle(cr, x1 + pr->x_offset + rt->stereo_off_x, y1 + pr->y_offset + rt->stereo_off_y, w, h);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1942 cairo_clip (cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1943 /* Now push a group to change the target */
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1944 cairo_push_group (cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1945 cairo_set_source_surface(cr, surface, x1 - x2, y1 - y2);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1946 cairo_paint(cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1947 /* Now copy the intermediate target back */
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1948 cairo_pop_group_to_source(cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1949 cairo_paint(cr);
4321c486aec7 use cairo for drawing
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2021
diff changeset
1950 cairo_destroy(cr);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1951
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1952 rt_overlay_queue_all(rt, x2, y2, x1, y1);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1953
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1954 w = pr->vis_width - w;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1955 h = pr->vis_height - h;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1956
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1957 if (w > 0)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1958 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1959 rt_queue(rt,
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1960 x_off > 0 ? rt->x_scroll + (pr->vis_width - w) : rt->x_scroll, rt->y_scroll,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1961 w, pr->vis_height, TRUE, TILE_RENDER_ALL, FALSE, FALSE);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1962 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1963 if (h > 0)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1964 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1965 /* FIXME, to optimize this, remove overlap */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1966 rt_queue(rt,
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
1967 rt->x_scroll, y_off > 0 ? rt->y_scroll + (pr->vis_height - h) : rt->y_scroll,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1968 pr->vis_width, h, TRUE, TILE_RENDER_ALL, FALSE, FALSE);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1969 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1970 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1971 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
1972
1897
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1973 static void renderer_area_changed(void *renderer, gint src_x, gint src_y, gint src_w, gint src_h)
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1974 {
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1975 RendererTiles *rt = (RendererTiles *)renderer;
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1976 PixbufRenderer *pr = rt->pr;
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1977 gint x, y, width, height, x1, y1, x2, y2;
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1978
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1979 gint orientation = rt_get_orientation(rt);
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1980 pr_coords_map_orientation_reverse(orientation,
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1981 src_x - GET_RIGHT_PIXBUF_OFFSET(rt), src_y,
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1982 pr->image_width, pr->image_height,
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1983 src_w, src_h,
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1984 &x, &y,
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1985 &width, &height);
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1986
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1987 if (pr->scale != 1.0 && pr->zoom_quality != GDK_INTERP_NEAREST)
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1988 {
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1989 /* increase region when using a zoom quality that may access surrounding pixels */
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1990 y -= 1;
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1991 height += 2;
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1992 }
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1993
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1994 x1 = (gint)floor((gdouble)x * pr->scale);
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1995 y1 = (gint)floor((gdouble)y * pr->scale * pr->aspect_ratio);
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1996 x2 = (gint)ceil((gdouble)(x + width) * pr->scale);
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1997 y2 = (gint)ceil((gdouble)(y + height) * pr->scale * pr->aspect_ratio);
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1998
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
1999 rt_queue(rt, x1, y1, x2 - x1, y2 - y1, FALSE, TILE_RENDER_AREA, TRUE, TRUE);
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
2000 }
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
2001
2075
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2002 static void renderer_redraw(RendererTiles *rt, gint x, gint y, gint w, gint h,
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2003 gint clamp, ImageRenderType render, gboolean new_data, gboolean only_existing)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2004 {
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
2005 PixbufRenderer *pr = rt->pr;
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
2006
1898
c72ca737fdcc fixed redrawing on expose event
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1897
diff changeset
2007 x -= rt->stereo_off_x;
c72ca737fdcc fixed redrawing on expose event
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1897
diff changeset
2008 y -= rt->stereo_off_y;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
2009
1898
c72ca737fdcc fixed redrawing on expose event
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1897
diff changeset
2010 rt_border_draw(rt, x, y, w, h);
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
2011
1898
c72ca737fdcc fixed redrawing on expose event
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1897
diff changeset
2012 x = MAX(0, x - pr->x_offset + pr->x_scroll);
c72ca737fdcc fixed redrawing on expose event
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1897
diff changeset
2013 y = MAX(0, y - pr->y_offset + pr->y_scroll);
c72ca737fdcc fixed redrawing on expose event
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1897
diff changeset
2014
c72ca737fdcc fixed redrawing on expose event
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1897
diff changeset
2015 rt_queue(rt,
c72ca737fdcc fixed redrawing on expose event
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1897
diff changeset
2016 x, y,
c72ca737fdcc fixed redrawing on expose event
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1897
diff changeset
2017 MIN(w, pr->width - x),
c72ca737fdcc fixed redrawing on expose event
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1897
diff changeset
2018 MIN(h, pr->height - y),
c72ca737fdcc fixed redrawing on expose event
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1897
diff changeset
2019 clamp, render, new_data, only_existing);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2020 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2021
2074
b56062760fc2 implemented clutter-based renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2070
diff changeset
2022 static void renderer_update_pixbuf(void *renderer, gboolean lazy)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2023 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2024 rt_queue_clear((RendererTiles *)renderer);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2025 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2026
2074
b56062760fc2 implemented clutter-based renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2070
diff changeset
2027 static void renderer_update_zoom(void *renderer, gboolean lazy)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2028 {
2074
b56062760fc2 implemented clutter-based renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2070
diff changeset
2029 RendererTiles *rt = (RendererTiles *)renderer;
b56062760fc2 implemented clutter-based renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2070
diff changeset
2030 PixbufRenderer *pr = rt->pr;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2031
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2032 rt_tile_invalidate_all((RendererTiles *)renderer);
2074
b56062760fc2 implemented clutter-based renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2070
diff changeset
2033 if (!lazy)
b56062760fc2 implemented clutter-based renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2070
diff changeset
2034 {
b56062760fc2 implemented clutter-based renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2070
diff changeset
2035 renderer_redraw(renderer, 0, 0, pr->width, pr->height, TRUE, TILE_RENDER_ALL, TRUE, FALSE);
b56062760fc2 implemented clutter-based renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2070
diff changeset
2036 }
2075
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2037 rt_border_clear(rt);
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2038 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2039
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2040 static void renderer_invalidate_region(void *renderer, gint x, gint y, gint w, gint h)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2041 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2042 rt_tile_invalidate_region((RendererTiles *)renderer, x, y, w, h);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2043 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2044
2090
3f0bbd79773c renamed renderer->update_sizes to update_viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2075
diff changeset
2045 static void renderer_update_viewport(void *renderer)
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2046 {
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2047 RendererTiles *rt = (RendererTiles *)renderer;
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2048
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2049 rt->stereo_off_x = 0;
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
2050 rt->stereo_off_y = 0;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
2051
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
2052 if (rt->stereo_mode & PR_STEREO_RIGHT)
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2053 {
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
2054 if (rt->stereo_mode & PR_STEREO_HORIZ)
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2055 {
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2056 rt->stereo_off_x = rt->pr->viewport_width;
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2057 }
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
2058 else if (rt->stereo_mode & PR_STEREO_VERT)
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2059 {
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2060 rt->stereo_off_y = rt->pr->viewport_height;
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2061 }
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
2062 else if (rt->stereo_mode & PR_STEREO_FIXED)
1891
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2063 {
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2064 rt->stereo_off_x = rt->pr->stereo_fixed_x_right;
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2065 rt->stereo_off_y = rt->pr->stereo_fixed_y_right;
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2066 }
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2067 }
1891
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2068 else
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2069 {
2184
9cdebd070874 Trim trailing white spaces.
Laurent Monin <zas@norz.org>
parents: 2181
diff changeset
2070 if (rt->stereo_mode & PR_STEREO_FIXED)
1891
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2071 {
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2072 rt->stereo_off_x = rt->pr->stereo_fixed_x_left;
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2073 rt->stereo_off_y = rt->pr->stereo_fixed_y_left;
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2074 }
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2075 }
25645af65caf added fixed stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1889
diff changeset
2076 DEBUG_1("update size: %p %d %d %d %d", rt, rt->stereo_off_x, rt->stereo_off_y, rt->pr->viewport_width, rt->pr->viewport_height);
1884
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
2077 rt_sync_scroll(rt);
a722f633d90f added mirrored stereo mode
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1883
diff changeset
2078 rt_overlay_update_sizes(rt);
2074
b56062760fc2 implemented clutter-based renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2070
diff changeset
2079 rt_border_clear(rt);
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2080 }
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2081
1886
ba2f9ac17b54 change stereo mode from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1885
diff changeset
2082 static void renderer_stereo_set(void *renderer, gint stereo_mode)
ba2f9ac17b54 change stereo mode from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1885
diff changeset
2083 {
ba2f9ac17b54 change stereo mode from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1885
diff changeset
2084 RendererTiles *rt = (RendererTiles *)renderer;
ba2f9ac17b54 change stereo mode from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1885
diff changeset
2085
ba2f9ac17b54 change stereo mode from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1885
diff changeset
2086 rt->stereo_mode = stereo_mode;
ba2f9ac17b54 change stereo mode from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1885
diff changeset
2087 }
ba2f9ac17b54 change stereo mode from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1885
diff changeset
2088
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2089 static void renderer_free(void *renderer)
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2090 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2091 RendererTiles *rt = (RendererTiles *)renderer;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2092 rt_queue_clear(rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2093 rt_tile_free_all(rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2094 if (rt->spare_tile) g_object_unref(rt->spare_tile);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2095 if (rt->overlay_buffer) g_object_unref(rt->overlay_buffer);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2096 rt_overlay_list_clear(rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2097 /* disconnect "hierarchy-changed" */
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2098 g_signal_handlers_disconnect_matched(G_OBJECT(rt->pr), G_SIGNAL_MATCH_DATA,
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2099 0, 0, 0, NULL, rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2100 g_free(rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2101 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2102
2075
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2103 #if GTK_CHECK_VERSION(3,0,0)
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2104
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2105 static gboolean rt_draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2106 {
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2107 RendererTiles *rt = (RendererTiles *)data;
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2108 if (gtk_widget_is_drawable(widget))
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2109 {
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2110 if (gtk_widget_get_has_window(widget))
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2111 {
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2112 GdkRectangle area;
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2113 if (gdk_cairo_get_clip_rectangle(cr, &area))
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2114 {
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2115 renderer_redraw(rt, area.x, area.y, area.width, area.height,
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2116 FALSE, TILE_RENDER_ALL, FALSE, FALSE);
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2117 }
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2118 }
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2119 }
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2120
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2121 return FALSE;
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2122 }
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2123
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2124 #else
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2125 static gboolean rt_expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2126 {
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2127 RendererTiles *rt = (RendererTiles *)data;
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2128 if (gtk_widget_is_drawable(widget))
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2129 {
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2130 if (gtk_widget_get_has_window(widget))
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2131 {
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2132 if (event->window != gtk_widget_get_window(widget))
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2133 {
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2134 GdkRectangle area;
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2135
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2136 gdk_window_get_position(event->window, &area.x, &area.y);
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2137 area.x += event->area.x;
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2138 area.y += event->area.y;
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2139 area.width = event->area.width;
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2140 area.height = event->area.height;
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2141 renderer_redraw(rt, area.x, area.y, area.width, area.height,
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2142 FALSE, TILE_RENDER_ALL, FALSE, FALSE);
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2143
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2144 }
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2145 else
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2146 {
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2147 renderer_redraw(rt, event->area.x, event->area.y, event->area.width, event->area.height,
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2148 FALSE, TILE_RENDER_ALL, FALSE, FALSE);
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2149 }
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2150 }
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2151 }
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2152
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2153 return FALSE;
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2154 }
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2155 #endif
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2156
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2157
1886
ba2f9ac17b54 change stereo mode from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1885
diff changeset
2158 RendererFuncs *renderer_tiles_new(PixbufRenderer *pr)
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2159 {
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2160 RendererTiles *rt = g_new0(RendererTiles, 1);
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
2161
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2162 rt->pr = pr;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
2163
1897
b1fe543de73a fixed area_changed handling
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1896
diff changeset
2164 rt->f.area_changed = renderer_area_changed;
2074
b56062760fc2 implemented clutter-based renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2070
diff changeset
2165 rt->f.update_pixbuf = renderer_update_pixbuf;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2166 rt->f.free = renderer_free;
2074
b56062760fc2 implemented clutter-based renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2070
diff changeset
2167 rt->f.update_zoom = renderer_update_zoom;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2168 rt->f.invalidate_region = renderer_invalidate_region;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2169 rt->f.scroll = rt_scroll;
2090
3f0bbd79773c renamed renderer->update_sizes to update_viewport
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2075
diff changeset
2170 rt->f.update_viewport = renderer_update_viewport;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2171
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2172
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2173 rt->f.overlay_add = renderer_tiles_overlay_add;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2174 rt->f.overlay_set = renderer_tiles_overlay_set;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2175 rt->f.overlay_get = renderer_tiles_overlay_get;
1886
ba2f9ac17b54 change stereo mode from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1885
diff changeset
2176
ba2f9ac17b54 change stereo mode from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1885
diff changeset
2177 rt->f.stereo_set = renderer_stereo_set;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
2178
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2179 rt->tile_width = PR_TILE_SIZE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2180 rt->tile_height = PR_TILE_SIZE;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2181
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2182 rt->tiles = NULL;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2183 rt->tile_cache_size = 0;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2184
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2185 rt->tile_cache_max = PR_CACHE_SIZE_DEFAULT;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2186
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2187 rt->draw_idle_id = 0;
2185
c14a1d8e6aa4 Trim trailing white spaces on empty lines.
Laurent Monin <zas@norz.org>
parents: 2184
diff changeset
2188
1886
ba2f9ac17b54 change stereo mode from menu
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1885
diff changeset
2189 rt->stereo_mode = 0;
1875
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2190 rt->stereo_off_x = 0;
e9b157ab56a6 first stereo support
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1874
diff changeset
2191 rt->stereo_off_y = 0;
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2192
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
2193 #if GTK_CHECK_VERSION(3, 10, 0)
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
2194 rt->hidpi_scale = gtk_widget_get_scale_factor(GTK_WIDGET(rt->pr));
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
2195 #else
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
2196 rt->hidpi_scale = 1;
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
2197 #endif
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
2198
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2199 g_signal_connect(G_OBJECT(pr), "hierarchy-changed",
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2200 G_CALLBACK(rt_hierarchy_changed_cb), rt);
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2201
2075
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2202 #if GTK_CHECK_VERSION(3,0,0)
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2203 g_signal_connect(G_OBJECT(pr), "draw",
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2204 G_CALLBACK(rt_draw_cb), rt);
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2205 #else
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2206 g_signal_connect(G_OBJECT(pr), "expose_event",
2096
d9639ff548b1 fixed segfault with gtk2
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2095
diff changeset
2207 G_CALLBACK(rt_expose_cb), rt);
2075
ccd29555c02b expose/draw method moved to renderer-tiles
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 2074
diff changeset
2208 #endif
2714
e0251a8eba95 Merge remote-tracking branches 'github/merge-requests/581', 'github/merge-requests/576', 'github/merge-requests/574' and 'github/merge-requests/573'
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2711
diff changeset
2209
1874
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2210 return (RendererFuncs *) rt;
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2211 }
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2212
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2213
ca810ea8fae9 separated tile renderer
Vladimir Nadvornik <nadvornik@suse.cz>
parents:
diff changeset
2214 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */