Industry Compat keymap: Fix paint mode context menus
[blender.git] / source / blender / blenkernel / BKE_font.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19 #ifndef __BKE_FONT_H__
20 #define __BKE_FONT_H__
21
22 /** \file
23  * \ingroup bke
24  */
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 struct CharInfo;
31 struct Curve;
32 struct Main;
33 struct Object;
34 struct VFont;
35
36 struct CharTrans {
37   float xof, yof;
38   float rot;
39   short linenr, charnr;
40   char dobreak;
41 };
42
43 typedef struct EditFontSelBox {
44   float x, y, w, h;
45   float rot;
46 } EditFontSelBox;
47
48 typedef struct EditFont {
49   char32_t *textbuf;
50   struct CharInfo *textbufinfo;
51
52   /* array of rectangles & rotation */
53   float textcurs[4][2];
54   EditFontSelBox *selboxes;
55   int selboxes_len;
56
57   /* positional vars relative to the textbuf, textbufinfo (not utf8 bytes)
58    * a copy of these is kept in Curve, but use these in editmode */
59   int len, pos;
60   int selstart, selend;
61
62   /**
63    * ID data is older than edit-mode data.
64    * Set #Main.is_memfile_undo_flush_needed when enabling.
65    */
66   char needs_flush_to_id;
67
68 } EditFont;
69
70 bool BKE_vfont_is_builtin(struct VFont *vfont);
71 void BKE_vfont_builtin_register(void *mem, int size);
72
73 void BKE_vfont_free_data(struct VFont *vfont);
74 void BKE_vfont_free(struct VFont *sc);
75 void BKE_vfont_init(struct VFont *vfont);
76 void BKE_vfont_copy_data(struct Main *bmain,
77                          struct VFont *vfont_dst,
78                          const struct VFont *vfont_src,
79                          const int flag);
80 struct VFont *BKE_vfont_builtin_get(void);
81 struct VFont *BKE_vfont_load(struct Main *bmain, const char *filepath);
82 struct VFont *BKE_vfont_load_exists_ex(struct Main *bmain, const char *filepath, bool *r_exists);
83 struct VFont *BKE_vfont_load_exists(struct Main *bmain, const char *filepath);
84
85 void BKE_vfont_make_local(struct Main *bmain, struct VFont *vfont, const bool lib_local);
86
87 bool BKE_vfont_to_curve_ex(struct Object *ob,
88                            struct Curve *cu,
89                            int mode,
90                            struct ListBase *r_nubase,
91                            const char32_t **r_text,
92                            int *r_text_len,
93                            bool *r_text_free,
94                            struct CharTrans **r_chartransdata);
95 bool BKE_vfont_to_curve_nubase(struct Object *ob, int mode, struct ListBase *r_nubase);
96 bool BKE_vfont_to_curve(struct Object *ob, int mode);
97
98 int BKE_vfont_select_get(struct Object *ob, int *r_start, int *r_end);
99 void BKE_vfont_select_clamp(struct Object *ob);
100
101 void BKE_vfont_clipboard_free(void);
102 void BKE_vfont_clipboard_set(const char32_t *text_buf,
103                              const struct CharInfo *info_buf,
104                              const size_t len);
105 void BKE_vfont_clipboard_get(char32_t **r_text_buf,
106                              struct CharInfo **r_info_buf,
107                              size_t *r_len_utf8,
108                              size_t *r_len_utf32);
109
110 #ifdef __cplusplus
111 }
112 #endif
113
114 #endif