1 /* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2  * Use of this source code is governed by a BSD-style license that can be
3  * found in the LICENSE file.
4  *
5  * This describes the internal format used to pack a set of character glpyhs so
6  * we can render strings by drawing one character at a time.
7  *
8  * The format is this:
9  *
10  *   +-------------------------+
11  *   | FontArrayHeader         |
12  *   +-------------------------+
13  *   | FontArrayEntryHeader[0] |
14  *   +-------------------------+
15  *   | raw image data[0]       |
16  *   +-------------------------+
17  *   | FontArrayEntryHeader[1] |
18  *   +-------------------------+
19  *   | raw image data[1]       |
20  *   +-------------------------+
21  *   | FontArrayEntryHeader[2] |
22  *   +-------------------------+
23  *   | raw image data[2]       |
24  *   +-------------------------+
25  *      ...
26  *   +-------------------------+
27  *   | FontArrayEntryHeader[n] |
28  *   +-------------------------+
29  *   | raw image data[n]       |
30  *   +-------------------------+
31  *
32  * The FontArrayHeader describes how many characters will be encoded.
33  * Each character encoding consists of a FontArrayEntryHeader followed
34  * immediately by the raw image data for that character.
35  */
36 
37 #ifndef VBOOT_REFERENCE_BMPBLK_FONT_H_
38 #define VBOOT_REFERENCE_BMPBLK_FONT_H_
39 
40 #include "bmpblk_header.h"
41 
42 #define FONT_SIGNATURE      "FONT"
43 #define FONT_SIGNATURE_SIZE 4
44 
45 typedef struct FontArrayHeader {
46 	uint8_t  signature[FONT_SIGNATURE_SIZE];
47 	uint32_t num_entries;  /* Number of chars encoded here. */
48 } __attribute__((packed)) FontArrayHeader;
49 
50 typedef struct FontArrayEntryHeader {
51 	uint32_t ascii;  /* What to show. Could even be UTF? */
52 	ImageInfo info;  /* Describes the bitmap. */
53 
54 	/*
55 	 * The image to use follows immediately, NOT compressed. It's
56 	 * uncompressed because each glyph is only a few hundred bytes, but
57 	 * they have much in common (colormaps, for example). When we add the
58 	 * whole font blob to the bmpblk, it will be compressed as a single
59 	 * item there.
60 	 */
61 } __attribute__((packed)) FontArrayEntryHeader;
62 
63 #endif  /* VBOOT_REFERENCE_BMPBLK_FONT_H_ */
64