File: ico.h

package info (click to toggle)
gimp 3.0.4-6.2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 210,548 kB
  • sloc: ansic: 842,405; lisp: 10,761; python: 10,318; cpp: 7,238; perl: 4,355; sh: 1,043; xml: 963; yacc: 609; lex: 348; javascript: 150; makefile: 43
file content (130 lines) | stat: -rw-r--r-- 4,007 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* GIMP - The GNU Image Manipulation Program
 * Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis
 *
 * GIMP Plug-in for Windows Icon files.
 * Copyright (C) 2002 Christian Kreibich <christian@whoop.org>.
 *
 * 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 3 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, see <https://www.gnu.org/licenses/>.
 */

#ifndef __ICO_H__
#define __ICO_H__


#ifdef ICO_DBG
#define D(x) \
{ \
  printf("ICO plugin: "); \
  printf x; \
}
#else
#define D(x)
#endif

#define PLUG_IN_BINARY      "file-ico"
#define PLUG_IN_ROLE        "gimp-file-ico"

#define ICO_PNG_MAGIC       0x474e5089
#define ICO_ALPHA_THRESHOLD 127
#define ICO_MAXBUF          4096


typedef struct _IcoFileHeader
{
  guint16   reserved;
  guint16   resource_type;
  guint16   icon_count;
} IcoFileHeader;

typedef struct _IcoFileEntry
{
  guint8        width;      /* Width of icon in pixels */
  guint8        height;     /* Height of icon in pixels */
  guint8        num_colors; /* Number of colors of paletted image */
  guint8        reserved;   /* Must be 0 */
  guint16       planes;     /* Must be 1 for ICO, x position of hot spot for CUR */
  guint16       bpp;        /* 1, 4, 8, 24 or 32 bits per pixel for ICO, y position of hot spot for CUR */
  guint32       size;       /* Size of icon (including data header) */
  guint32       offset;     /* Absolute offset of data in a file */
 } IcoFileEntry;

typedef struct _IcoFileDataHeader
{
  guint32       header_size; /* 40 bytes */
  guint32       width;       /* Width of image in pixels */
  guint32       height;      /* Height of image in pixels */
  guint16       planes;      /* Must be 1 */
  guint16       bpp;
  guint32       compression; /* Not used for icons */
  guint32       image_size;  /* Size of image (without this header) */
  guint32       x_res;
  guint32       y_res;
  guint32       used_clrs;
  guint32       important_clrs;
} IcoFileDataHeader;


typedef struct _IcoLoadInfo
{
    guint    width;
    guint    height;
    gint     bpp;
    gint     planes;
    gint     offset;
    gint     size;
} IcoLoadInfo;

typedef struct _IcoSaveInfo
{
    gint        *depths;
    gint        *default_depths;
    gboolean    *compress;
    GList       *layers;
    gint         num_icons;
    gboolean     is_cursor;
    gint        *hot_spot_x;
    gint        *hot_spot_y;
} IcoSaveInfo;

typedef struct _AniFileHeader
{
    guint32 bSizeOf;     /* Number of bytes in AniFileHeader (36 bytes) */
    guint32 frames;      /* Number of unique icons in this cursor */
    guint32 steps;       /* Number of Blits before the animation cycles */
    guint32 x, y;        /* Reserved, must be zero. */
    guint32 bpp, planes; /* Reserved, must be zero. */
    guint32 jif_rate;    /* Default Jiffies (1/60th of a second) if rate chunk's not present. */
    guint32 flags;       /* Animation Flag */
} AniFileHeader;

typedef struct _AniSaveInfo
{
    gchar *inam;   /* Cursor name metadata */
    gchar *iart;   /* Author name metadata */
} AniSaveInfo;

/* Miscellaneous helper functions below: */

gint     ico_rowstride (gint width,
                        gint bpp);

/* Allocates a 32-bit padded bitmap for various color depths.
   Returns the allocated array directly, and the length of the
   array in the len pointer */
guint8 * ico_alloc_map  (gint     width,
                         gint     height,
                         gint     bpp,
                         gint    *len);

#endif /* __ICO_H__ */