tile-manager.h 5.56 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* The GIMP -- an image manipulation program
 * Copyright (C) 1995 Spencer Kimball and Peter Mattis
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
 */
18

Elliot Lee's avatar
Elliot Lee committed
19
20
21
#ifndef __TILE_MANAGER_H__
#define __TILE_MANAGER_H__

22
23
24
25
26
27
28
29
struct _PixelDataHandle 
{
  guchar                 *data;
  gint                    width;
  gint	                  height;
  gint                    stride;
  gint			  bpp;
};
Elliot Lee's avatar
Elliot Lee committed
30
31
32
33
34
35

/* Creates a new tile manager with the specified
 *  width for the toplevel. The toplevel sizes is
 *  used to compute the number of levels and there
 *  size. Each level is 1/2 the width and height of
 *  the level above it.
Michael Natterer's avatar
Michael Natterer committed
36
 *
Elliot Lee's avatar
Elliot Lee committed
37
38
39
40
 * The toplevel is level 0. The smallest level in the
 *  hierarchy is "nlevels - 1". That level will be smaller
 *  than TILE_WIDTH x TILE_HEIGHT
 */
41
42
43
TileManager * tile_manager_new               (gint toplevel_width,
					      gint toplevel_height,
					      gint bpp);
Elliot Lee's avatar
Elliot Lee committed
44
45
46

/* Destroy a tile manager and all the tiles it contains.
 */
47
void          tile_manager_destroy           (TileManager *tm);
Elliot Lee's avatar
Elliot Lee committed
48
49
50
51
52
53
54

/* Set the validate procedure for the tile manager.
 *  The validate procedure is called when an invalid tile
 *  is referenced. If the procedure is NULL, then the tile
 *  is set to valid and its memory is allocated, but
 *  not initialized.
 */
55
56
void          tile_manager_set_validate_proc (TileManager      *tm,
					      TileValidateProc  proc);
Elliot Lee's avatar
Elliot Lee committed
57

58
/* Get a specified tile from a tile manager. 
Elliot Lee's avatar
Elliot Lee committed
59
 */
60
61
62
63
64
Tile        * tile_manager_get_tile          (TileManager *tm,
					      gint         xpixel,
					      gint         ypixel,
					      gint         wantread,
					      gint         wantwrite);
Elliot Lee's avatar
Elliot Lee committed
65
66
67

/* Get a specified tile from a tile manager.
 */
68
69
70
71
Tile        * tile_manager_get               (TileManager *tm,
					      gint         tile_num,
					      gint         wantread,
					      gint         wantwrite);
72

73
/* Request that (if possible) the tile at x,y be swapped
74
75
76
77
 * in.  This is only a hint to improve performance; no guarantees.
 * The tile may be swapped in or otherwise made more accessible
 * if it is convenient...
 */
78
79
80
void          tile_manager_get_async         (TileManager *tm,
					      gint         xpixel,
					      gint         ypixel);
81

82
83
84
85
void          tile_manager_map_tile          (TileManager *tm,
					      gint         xpixel,
					      gint         ypixel,
					      Tile        *srctile);
86

87
88
89
void          tile_manager_map               (TileManager *tm,
					      gint         time_num,
					      Tile        *srctile);
Elliot Lee's avatar
Elliot Lee committed
90
91
92

/* Validate a tiles memory.
 */
93
94
void          tile_manager_validate          (TileManager  *tm,
					      Tile         *tile);
Elliot Lee's avatar
Elliot Lee committed
95

96
97
98
99
100
101
102
void          tile_invalidate                (Tile        **tile_ptr,
					      TileManager  *tm,
					      gint          tile_num);
void          tile_invalidate_tile           (Tile        **tile_ptr,
					      TileManager  *tm, 
					      gint          xpixel,
					      gint          ypixel);
scott's avatar
scott committed
103

Elliot Lee's avatar
Elliot Lee committed
104
/* Given a toplevel tile, this procedure will invalidate
105
 *  (set the dirty bit) for this toplevel tile.
Elliot Lee's avatar
Elliot Lee committed
106
 */
Michael Natterer's avatar
Michael Natterer committed
107
108
void          tile_manager_invalidate_tiles  (TileManager       *tm,
					      Tile              *toplevel_tile);
109

Michael Natterer's avatar
Michael Natterer committed
110
111
112
void          tile_manager_set_user_data     (TileManager       *tm,
					      gpointer           user_data);
gpointer      tile_manager_get_user_data     (const TileManager *tm);
113

Michael Natterer's avatar
Michael Natterer committed
114
115
116
gint          tile_manager_width             (const TileManager *tm);
gint          tile_manager_height            (const TileManager *tm);
gint          tile_manager_bpp               (const TileManager *tm);
117

Michael Natterer's avatar
Michael Natterer committed
118
119
120
121
122
123
void          tile_manager_get_offsets       (const TileManager *tm,
					      gint              *x,
					      gint              *y);
void          tile_manager_set_offsets       (TileManager       *tm,
					      gint               x,
					      gint               y);
Elliot Lee's avatar
Elliot Lee committed
124

125
126
127
128
void          tile_manager_get_tile_coordinates (TileManager *tm,
						 Tile        *tile,
						 gint        *x,
						 gint        *y);
129

130
131
132
void          tile_manager_map_over_tile        (TileManager *tm,
						 Tile        *tile,
						 Tile        *srctile);
133

134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
PixelDataHandle * request_pixel_data (TileManager *tm,
				      gint         x1,
				      gint	   y1,
				      gint	   x2,
				      gint	   y2,
				      gboolean     wantread,
				      gboolean     wantwrite);

void              release_pixel_data (PixelDataHandle *pdh);

void              read_pixel_data (TileManager *tm,
				   gint         x1,
				   gint         y1,
				   gint         x2,
				   gint         y2,
				   guchar      *buffer,
				   guint        stride);

void              write_pixel_data (TileManager *tm,
				    gint         x1,
				    gint         y1,
				    gint         x2,
				    gint         y2,
				    guchar      *buffer,
				    guint        stride);

void		  read_pixel_data_1 (TileManager *tm,
				     gint	  x,
				     gint	  y,
				     guchar      *buffer);

void		  write_pixel_data_1 (TileManager *tm,
				      gint	   x,
				      gint	   y,
				      guchar      *buffer);
Michael Natterer's avatar
Michael Natterer committed
169

Elliot Lee's avatar
Elliot Lee committed
170
#endif /* __TILE_MANAGER_H__ */