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