Fix 80909: Switching to profile bevel can explode Curve geometry
[blender.git] / source / blender / editors / space_info / textview.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
17 /** \file
18  * \ingroup spinfo
19  */
20
21 #pragma once
22
23 enum eTextViewContext_LineFlag {
24   TVC_LINE_FG = (1 << 0),
25   TVC_LINE_BG = (1 << 1),
26   TVC_LINE_ICON = (1 << 2),
27   TVC_LINE_ICON_FG = (1 << 3),
28   TVC_LINE_ICON_BG = (1 << 4)
29 };
30
31 typedef struct TextViewContext {
32   /** Font size scaled by the interface size. */
33   int lheight;
34   /** Text selection, when a selection range is in use. */
35   int sel_start, sel_end;
36
37   int row_vpadding;
38
39   /** Area to draw text: (0, 0, winx, winy) with a margin applied and scroll-bar subtracted. */
40   rcti draw_rect;
41   /** Area to draw text background colors (extending beyond text in some cases). */
42   rcti draw_rect_outer;
43
44   /** Scroll offset in pixels. */
45   int scroll_ymin, scroll_ymax;
46
47   /* callbacks */
48   int (*begin)(struct TextViewContext *tvc);
49   void (*end)(struct TextViewContext *tvc);
50   const void *arg1;
51   const void *arg2;
52
53   /* iterator */
54   int (*step)(struct TextViewContext *tvc);
55   void (*line_get)(struct TextViewContext *tvc, const char **r_line, int *r_len);
56   enum eTextViewContext_LineFlag (*line_data)(struct TextViewContext *tvc,
57                                               uchar fg[4],
58                                               uchar bg[4],
59                                               int *r_icon,
60                                               uchar r_icon_fg[4],
61                                               uchar r_icon_bg[4]);
62   void (*draw_cursor)(struct TextViewContext *tvc, int cwidth, int columns);
63   /* constant theme colors */
64   void (*const_colors)(struct TextViewContext *tvc, unsigned char bg_sel[4]);
65   const void *iter;
66   int iter_index;
67   /** Used for internal multi-line iteration. */
68   int iter_char_begin;
69   /** The last character (not inclusive). */
70   int iter_char_end;
71   /** Internal iterator use. */
72   int iter_tmp;
73
74 } TextViewContext;
75
76 int textview_draw(struct TextViewContext *tvc,
77                   const bool do_draw,
78                   const int mval_init[2],
79                   void **r_mval_pick_item,
80                   int *r_mval_pick_offset);