1/*
2 * Author:      William Chia-Wei Cheng (bill.cheng@acm.org)
3 *
4 * Copyright (C) 2001-2009, William Chia-Wei Cheng.
5 *
6 * This file may be distributed under the terms of the Q Public License
7 * as defined by Trolltech AS of Norway and appearing in the file
8 * LICENSE.QPL included in the packaging of this file.
9 *
10 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING
11 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
12 * PURPOSE.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
13 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
14 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
15 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
16 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 *
18 * @(#)$Header: /mm2/home/cvs/bc-src/tgif/miniline.e,v 1.20 2011/05/16 16:21:58 william Exp $
19 */
20
21#ifndef _MINILINE_E_
22#define _MINILINE_E_
23
24#define PAINT           0x1
25#define FRONT_HIGHLIGHT 0x2
26#define MID_HIGHLIGHT   0x4
27#define BACK_HIGHLIGHT  0x8
28
29#define ERASE 0
30#define PAINT_NORM (PAINT)
31#define PAINT_INV (PAINT|FRONT_HIGHLIGHT|MID_HIGHLIGHT|BACK_HIGHLIGHT)
32#define PAINT_NORM_INV (PAINT|MID_HIGHLIGHT|BACK_HIGHLIGHT)
33#define PAINT_INV_NORM (PAINT|FRONT_HIGHLIGHT)
34#define PAINT_NORM_INV_NORM (PAINT|MID_HIGHLIGHT)
35
36typedef void (STRSEGFN)ARGS_DECL((StrSegInfo*, void*));
37
38extern TextHighlightInfo	gstTextHighlightInfo;
39
40extern CopyUTF8Info	gstCopyUTF8Info;
41
42extern int		textOrigX, textOrigY, textOrigBaselineY;
43extern int		textAbsX, textAbsY, textAbsBaselineY;
44
45extern int		textCurX, textCurY, textCurBaselineY;
46extern int		textCurIndex;
47extern int		textEndX, textEndY, textEndBaselineY;
48extern int		textEndIndex;
49
50extern int		textAbsMinLBearing, textAbsMaxRExtra;
51extern int		textW, textH;
52
53extern int		textHighlight;
54
55extern struct ObjRec	*curTextObj;
56
57extern struct BBRec	curTextOBBox, curTextBBox;
58
59extern StrBlockInfo	*curStrBlock; /* block must always be SB_SIMPLE */
60extern StrBlockInfo	*endStrBlock; /* block must always be SB_SIMPLE */
61extern MiniLineInfo	*firstMiniLine, *lastMiniLine;
62
63extern int		escPressed;
64
65extern int		dontRecalcStrSegMetrics;
66
67extern int		curTextOutlineW, curTextOutlineHalfW;
68
69extern int		drawWinHasFocus;
70
71#ifdef _INCLUDE_FROM_MINILINE_C_
72#undef extern
73#define extern
74#endif /*_INCLUDE_FROM_MINILINE_C_*/
75
76extern void	ClearCopyUTF8Info ARGS_DECL((void));
77extern void	SetCopyUTF8FontInfo ARGS_DECL((StrSegInfo*, int double_byte));
78extern int	CalcSingleByteInfoForCopyUTF8 ARGS_DECL((int *pn_font_index));
79extern int	CanFindSingleByteFontAtCursor ARGS_DECL((StrSegInfo*));
80extern int	CanFindDoubleByteFontAtCursor ARGS_DECL((StrSegInfo*));
81
82extern void	SaveDrawTextInfo ARGS_DECL((DrawTextInfo*));
83extern void	RestoreDrawTextInfo ARGS_DECL((DrawTextInfo*));
84extern void	ResetDrawTextInfo ARGS_DECL((void));
85extern void	SaveDrawWinDrawTextInfo ARGS_DECL((int forced));
86extern void	RestoreDrawWinDrawTextInfo ARGS_DECL((int forced));
87
88extern void	ResetDirtyBBoxInfo ARGS_DECL((void));
89extern void	AddToDirtyBBox ARGS_DECL((struct BBRec *));
90extern void	ForceDirtyBBoxToRedrawAll ARGS_DECL((void));
91extern int	GetDirtyBBox ARGS_DECL((struct BBRec *));
92
93extern void	CleanUpIndentStrings ARGS_DECL((void));
94extern char	*GetIndentString ARGS_DECL((int indent));
95extern void	DumpIndentString ARGS_DECL((FILE*, int indent));
96
97extern void	CleanUpMiniLines ARGS_DECL((void));
98extern int	InitMiniLines ARGS_DECL((void));
99
100extern void	FreeStrSeg ARGS_DECL((StrSegInfo*));
101extern void	FreeStrBlock ARGS_DECL((StrBlockInfo*));
102extern void	FreeMiniLine ARGS_DECL((MiniLineInfo*));
103extern void	FreeMiniLines ARGS_DECL((MiniLinesInfo*,
104		                                 int free_minilines));
105extern void	FreeStrBlockList ARGS_DECL((StrBlockInfo*));
106extern void	FreeMiniLineList ARGS_DECL((MiniLineInfo*));
107
108extern void	UnlinkStrBlock ARGS_DECL((StrBlockInfo*));
109extern void	UnlinkMiniLine ARGS_DECL((MiniLineInfo*));
110
111extern StrSegInfo	*NewStrSeg ARGS_DECL((void));
112extern StrBlockInfo	*NewStrBlock ARGS_DECL((void));
113extern MiniLineInfo	*NewMiniLine ARGS_DECL((void));
114extern MiniLinesInfo	*NewMiniLines ARGS_DECL((void));
115
116extern void	InsertStrBlock ARGS_DECL((StrBlockInfo *pPrevStrBlock,
117		                          StrBlockInfo *pNextStrBlock,
118		                          StrBlockInfo *pStrBlock,
119		                          StrBlockInfo **ppFirstStrBlock,
120		                          StrBlockInfo **ppLastStrBlock));
121extern void	InsertMiniLine ARGS_DECL((MiniLineInfo *pPrevMiniLine,
122		                          MiniLineInfo *pNextMiniLine,
123		                          MiniLineInfo *pMiniLine,
124		                          MiniLineInfo **ppFirstMiniLine,
125		                          MiniLineInfo **ppLastMiniLine));
126extern int	BlankStrSeg ARGS_DECL((StrSegInfo*));
127extern int	BlankStrBlock ARGS_DECL((StrBlockInfo*));
128extern int	BlankMiniLine ARGS_DECL((MiniLineInfo*));
129extern int	BlankMiniLines ARGS_DECL((MiniLinesInfo*));
130
131extern StrSegInfo	*GetTextFirstStrSeg ARGS_DECL((struct ObjRec *));
132extern struct DynStrRec	*GetTextFirstDynStr ARGS_DECL((struct ObjRec *));
133
134/* ===================== TextRec Routines ===================== */
135
136extern void	CopyCurInfoIntoStrSeg ARGS_DECL((StrBlockInfo*,
137		                                 StrSegInfo*));
138extern void	CopyCurInfoFromStrSeg ARGS_DECL((StrSegInfo*));
139extern void	CopyCurInfoIntoTextPtr ARGS_DECL((struct ObjRec *,
140		                                  struct TextRec *));
141extern void	CopyCurInfoFromTextPtr ARGS_DECL((struct ObjRec *,
142		                                  struct TextRec *));
143
144/* ===================== RecalcTextMetrics ===================== */
145
146extern int	RecalcMiniLineMetrics ARGS_DECL((MiniLineInfo*,
147		                                 RecalcMetricsInfo*));
148extern int	RecalcMiniLinesMetrics ARGS_DECL((MiniLinesInfo*,
149		                                  RecalcMetricsInfo*));
150extern int	RecalcTextMetrics ARGS_DECL((struct TextRec *, int x,
151		                             int baseline_y));
152extern void	UpdateMiniLinesBBoxes ARGS_DECL((MiniLinesInfo*, int x,
153		                                 int baseline_y, int clean));
154extern void	UpdateCurTextBBoxes ARGS_DECL((int clean));
155
156extern void	DoFuncOnStrSegForMiniLines ARGS_DECL((MiniLinesInfo*,
157		                                      STRSEGFN*, void*));
158
159/* ===================== Text Routines ===================== */
160
161extern void	ResetOnCursorKey ARGS_DECL((int drag));
162extern void	PutTextCursor ARGS_DECL((void));
163extern void	EraseTextCursor ARGS_DECL((void));
164extern void	GetCurTextBBoxes ARGS_DECL((struct BBRec *pOBBox,
165		                            struct BBRec *pBBox));
166extern void	PaintMiniLines ARGS_DECL((Display*, Drawable, GC, int depth,
167		                          int x, int baseline_y, MiniLinesInfo*,
168		                          int use_highlight, int use_as_mask));
169extern void	DrawCurTextOutLine ARGS_DECL((int x, int y, int w, int h));
170extern void	RedrawCurText ARGS_DECL((void));
171extern void	UpdateHighLightedTextBBoxes ARGS_DECL((int clean));
172
173extern void	MergeNextMiniLineWhileDeleting ARGS_DECL((MiniLineInfo*));
174extern int	StrBlocksHasSameProperties ARGS_DECL((StrBlockInfo*,
175		                                      StrBlockInfo*));
176extern int	MergeStrBlocks ARGS_DECL((StrBlockInfo *pStrBlock,
177		                          StrBlockInfo *pNextStrBlock));
178extern void	DoInsertThinSpace ARGS_DECL((int thin_space_w));
179extern void	InsertHighlightedThinSpace ARGS_DECL((int thin_space_w));
180extern void	DeleteHighlightedText ARGS_DECL((void));
181extern int	ShrinkMiniLines ARGS_DECL((MiniLinesInfo*, int *pnRetry));
182
183extern int	GetTextXYInMiniLines ARGS_DECL((MiniLinesInfo*, StrBlockInfo*,
184		                                int index_to_match,
185		                                int *pn_dx, int *pn_dy));
186extern void	GetTextXY ARGS_DECL((StrBlockInfo*, int nIndex, int *pn_x,
187		                     int *pn_baseline_y));
188extern void	SetTextCurXY ARGS_DECL((void));
189extern void	SetTextEndXY ARGS_DECL((void));
190extern int	CurStrBlockInStrBlock ARGS_DECL((StrBlockInfo*));
191extern int	CurStrBlockInMiniLine ARGS_DECL((MiniLineInfo*));
192extern int	CurStrBlockInMiniLines ARGS_DECL((MiniLinesInfo*));
193
194extern int	GetCursorPositionInMiniLines ARGS_DECL((MiniLinesInfo*, int dx,
195		                                        int dy, int *pn_dx,
196		                                        int *pn_dy,
197		                                        StrBlockInfo**,
198		                                        int *pnIndex));
199
200extern int	SameProperty ARGS_DECL((long lWhich, int nValue, StrSegInfo*,
201		                        int nCheckDoubleByte));
202extern int	SetStrSegProperty ARGS_DECL((long lWhich, int nValue,
203		                             StrSegInfo*));
204extern int	SetMiniLinesProperty ARGS_DECL((long lWhich, int nValue,
205		                                MiniLinesInfo*));
206extern int	ChangeHighlightedTextProperty ARGS_DECL((long lWhich,
207		                                         int nValue));
208extern int	OnePropertyMiniLines ARGS_DECL((long lWhich, int nValue,
209		                                MiniLinesInfo*,
210		                                int nCheckDoubleByte));
211extern int	SingleFontMiniLines ARGS_DECL((MiniLinesInfo*, int *pnSzUnit,
212		                               int *pnDoubleByte, int *pnFont,
213		                               int *pnStyle,
214		                               int *pnUnderlineOn,
215		                               int *pnOverlineOn));
216extern int	SingleFontText ARGS_DECL((struct TextRec*, int *pnSzUnit,
217		                          int *pnDoubleByte, int *pnFont,
218		                          int *pnStyle, int *pnUnderlineOn,
219		                          int *pnOverlineOn));
220extern int	SingleColorMiniLines ARGS_DECL((MiniLinesInfo*,
221		                               int *pnColorIndex));
222extern int	SingleColorText ARGS_DECL((struct TextRec*, int *pnColorIndex));
223extern int	HighlightedTextHasSameProperty ARGS_DECL((long lWhich,
224		                                          int nValue,
225		                                          int nChkDoubleByte));
226extern int	CheckMiniLinesProperties ARGS_DECL((MiniLinesInfo*,
227		                                    int *pn_valid, int *pn_font,
228		                                    int *pn_style,
229		                                    int *pn_sz_unit,
230		                                    int *pn_color,
231		                                    int *pn_underline_on,
232		                                    int *pn_overline_on));
233extern int	CanCopyHighLightedTextAsStrings ARGS_DECL((void));
234extern int	CanCopyHighLightedTextAsUTF8Strings ARGS_DECL((
235				int *pn_double_byte_font_index));
236extern int	CanPasteUTF8StringIntoText ARGS_DECL((StrSegInfo*));
237extern void	GatherHighLightedTextAsStrings ARGS_DECL((char **ppsz_buf,
238		                                          int *pn_buf_sz));
239extern struct ObjRec	*CreateTextObjFromHighLightedText ARGS_DECL((void));
240
241extern void	ReorderCursorStrBlocks ARGS_DECL((void));
242extern int	FindStringInMiniLines ARGS_DECL((MiniLinesInfo*,
243		                                 int *pn_found_starting_point,
244		                                 char *str_to_match,
245		                                 int str_len_to_match,
246		                                 int case_sensitive,
247		                                 StrBlockInfo **ppStartStrBlock,
248		                                 int *pn_start_index,
249		                                 StrBlockInfo **ppEndStrBlock,
250		                                 int *pn_end_index));
251
252extern int	CanBreakMiniLinesIntoWords ARGS_DECL((MiniLinesInfo*));
253extern void	BreakMiniLines ARGS_DECL((MiniLinesInfo*, int how,
254		                          int x, int baseline_y,
255		                          struct ObjRec *prototype,
256		                          int tx_to_move, int ty_to_move,
257		                          ObjListInfo*));
258extern void	DumpMiniLines ARGS_DECL((MiniLinesInfo*, int x, int baseline_y,
259		                         FILE*, struct BBRec *, int do_dump,
260		                         int indent));
261extern int	SimpleTextObj ARGS_DECL((struct TextRec *));
262extern void	DumpSimpleTextPath ARGS_DECL((FILE*, struct ObjRec *));
263extern void	DumpMiniLineInAscii ARGS_DECL((FILE*, MiniLineInfo*,
264		                               int *pnSomethingPrinted));
265extern void	DumpMiniLinesInAscii ARGS_DECL((FILE*, MiniLinesInfo*,
266		                                int *pnSomethingPrinted));
267extern char	*ConvertMiniLineToString ARGS_DECL((MiniLineInfo*,
268		                                    int *pnNeedToFree));
269extern char	*ConvertAttrNameFirstMiniLineToString ARGS_DECL((
270				struct AttrRec *, int *pnNeedToFree));
271extern int	MiniLinesInVisibleLayer ARGS_DECL((MiniLinesInfo*));
272
273#ifdef _INCLUDE_FROM_MINILINE_C_
274#undef extern
275#ifndef _NO_RECURSIVE_EXTERN
276#define extern extern
277#endif /* ~_NO_RECURSIVE_EXTERN */
278#endif /*_INCLUDE_FROM_MINILINE_C_*/
279
280#endif /*_MINILINE_E_*/
281