author | Tero Marttila <terom@fixme.fi> |
Tue, 29 Dec 2009 01:06:52 +0200 | |
changeset 11 | eb2a1472f084 |
parent 9 | a31048ff76a2 |
child 13 | 294201975f8c |
permissions | -rw-r--r-- |
0 | 1 |
#ifndef PNGTILE_H |
2 |
#define PNGTILE_H |
|
3 |
||
4 |
/** |
|
5 |
* @file |
|
6 |
* |
|
7 |
* Tile-based access to large PNG images. |
|
8 |
*/ |
|
6
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
9 |
#include <stddef.h> |
9 | 10 |
#include <stdio.h> // for FILE* |
0 | 11 |
|
12 |
/** |
|
13 |
* "Global" context shared between images |
|
14 |
*/ |
|
15 |
struct pt_ctx; |
|
16 |
||
17 |
/** |
|
18 |
* Per-image state |
|
19 |
*/ |
|
20 |
struct pt_image; |
|
21 |
||
6
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
22 |
/** Bitmask for pt_image_open modes */ |
0 | 23 |
enum pt_image_mode { |
6
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
24 |
/** Update cache if needed */ |
11 | 25 |
PT_OPEN_UPDATE = 0x01, |
6
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
26 |
|
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
27 |
/** Accept stale cache */ |
11 | 28 |
PT_OPEN_STALE = 0x02, |
6
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
29 |
}; |
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
30 |
|
8 | 31 |
/** |
32 |
* Values for pt_image_cached |
|
33 |
*/ |
|
34 |
enum pt_cache_status { |
|
35 |
/** Cache status could not be determined */ |
|
36 |
PT_CACHE_ERROR = -1, |
|
37 |
||
38 |
/** Cache is fresh */ |
|
39 |
PT_CACHE_FRESH = 0, |
|
40 |
||
41 |
/** Cache does not exist */ |
|
42 |
PT_CACHE_NONE = 1, |
|
43 |
||
44 |
/** Cache exists, but is stale */ |
|
45 |
PT_CACHE_STALE = 2, |
|
46 |
}; |
|
47 |
||
6
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
48 |
/** Metadata info for image */ |
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
49 |
struct pt_image_info { |
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
50 |
/** Dimensions of image */ |
7
997906f5fd2d
mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
51 |
size_t width, height; |
0 | 52 |
}; |
53 |
||
9 | 54 |
/** Info for image tile */ |
55 |
struct pt_tile_info { |
|
56 |
/** Dimensions of output image */ |
|
57 |
size_t width, height; |
|
58 |
||
59 |
/** Pixel coordinates of top-left corner */ |
|
60 |
size_t x, y; |
|
61 |
||
62 |
/** Zoom factor (out < zero < in) */ |
|
63 |
// TODO: int zoom; |
|
64 |
}; |
|
65 |
||
11 | 66 |
/** |
67 |
* TODO: impl |
|
68 |
*/ |
|
0 | 69 |
int pt_ctx_new (struct pt_ctx **ctx_ptr); |
70 |
||
71 |
/** |
|
72 |
* Open a new pt_image for use. |
|
73 |
* |
|
74 |
* @param img_ptr returned pt_image handle |
|
75 |
* @param ctx global state to use |
|
76 |
* @param path filesystem path to .png file |
|
11 | 77 |
* @param mode combination of PT_OPEN_* flags |
0 | 78 |
*/ |
5
4b440fa03183
move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
79 |
int pt_image_open (struct pt_image **image_ptr, struct pt_ctx *ctx, const char *png_path, int cache_mode); |
0 | 80 |
|
5
4b440fa03183
move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
81 |
/** |
6
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
82 |
* Get the image's metadata |
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
83 |
*/ |
7
997906f5fd2d
mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents:
6
diff
changeset
|
84 |
int pt_image_info (struct pt_image *image, const struct pt_image_info **info_ptr); |
6
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
85 |
|
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
86 |
/** |
8 | 87 |
* Check the given image's cache is stale - in other words, if the image needs to be update()'d. |
88 |
* |
|
89 |
* @return one of pt_cache_status |
|
5
4b440fa03183
move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
90 |
*/ |
8 | 91 |
int pt_image_status (struct pt_image *image); |
0 | 92 |
|
5
4b440fa03183
move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
93 |
/** |
4b440fa03183
move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
94 |
* Update the given image's cache. |
4b440fa03183
move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
95 |
*/ |
4b440fa03183
move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents:
0
diff
changeset
|
96 |
int pt_image_update (struct pt_image *image); |
0 | 97 |
|
6
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
98 |
/** |
9 | 99 |
* Render a PNG tile to a stream. |
100 |
* |
|
101 |
* The PNG data will be written to the given stream, which will be flushed, but not closed. |
|
102 |
*/ |
|
103 |
int pt_image_tile (struct pt_image *image, const struct pt_tile_info *info, FILE *out); |
|
104 |
||
105 |
/** |
|
6
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
106 |
* Release the given pt_image without any clean shutdown |
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
107 |
*/ |
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
108 |
void pt_image_destroy (struct pt_image *image); |
766df7c9b90d
--force-update and store palette
Tero Marttila <terom@fixme.fi>
parents:
5
diff
changeset
|
109 |
|
0 | 110 |
#endif |