/* * Author: William Chia-Wei Cheng (bill.cheng@acm.org) * * Copyright (C) 2001-2009, William Chia-Wei Cheng. * * This file may be distributed under the terms of the Q Public License * as defined by Trolltech AS of Norway and appearing in the file * LICENSE.QPL included in the packaging of this file. * * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * @(#)$Header: /mm2/home/cvs/bc-src/tgif/miniline.e,v 1.19 2009/11/09 04:41:27 cvsps Exp $ */ #ifndef _MINILINE_E_ #define _MINILINE_E_ #define PAINT 0x1 #define FRONT_HIGHLIGHT 0x2 #define MID_HIGHLIGHT 0x4 #define BACK_HIGHLIGHT 0x8 #define ERASE 0 #define PAINT_NORM (PAINT) #define PAINT_INV (PAINT|FRONT_HIGHLIGHT|MID_HIGHLIGHT|BACK_HIGHLIGHT) #define PAINT_NORM_INV (PAINT|MID_HIGHLIGHT|BACK_HIGHLIGHT) #define PAINT_INV_NORM (PAINT|FRONT_HIGHLIGHT) #define PAINT_NORM_INV_NORM (PAINT|MID_HIGHLIGHT) typedef void (STRSEGFN)ARGS_DECL((StrSegInfo*, void*)); extern TextHighlightInfo gstTextHighlightInfo; extern CopyUTF8Info gstCopyUTF8Info; extern int textOrigX, textOrigY, textOrigBaselineY; extern int textAbsX, textAbsY, textAbsBaselineY; extern int textCurX, textCurY, textCurBaselineY; extern int textCurIndex; extern int textEndX, textEndY, textEndBaselineY; extern int textEndIndex; extern int textAbsMinLBearing, textAbsMaxRExtra; extern int textW, textH; extern int textHighlight; extern struct ObjRec *curTextObj; extern struct BBRec curTextOBBox, curTextBBox; extern StrBlockInfo *curStrBlock; /* block must always be SB_SIMPLE */ extern StrBlockInfo *endStrBlock; /* block must always be SB_SIMPLE */ extern MiniLineInfo *firstMiniLine, *lastMiniLine; extern int escPressed; extern int dontRecalcStrSegMetrics; extern int curTextOutlineW, curTextOutlineHalfW; extern int drawWinHasFocus; #ifdef _INCLUDE_FROM_MINILINE_C_ #undef extern #define extern #endif /*_INCLUDE_FROM_MINILINE_C_*/ extern void ClearCopyUTF8Info ARGS_DECL((void)); extern void SetCopyUTF8FontInfo ARGS_DECL((StrSegInfo*, int double_byte)); extern int CalcSingleByteInfoForCopyUTF8 ARGS_DECL((int *pn_font_index)); extern int CanFindSingleByteFontAtCursor ARGS_DECL((StrSegInfo*)); extern int CanFindDoubleByteFontAtCursor ARGS_DECL((StrSegInfo*)); extern void SaveDrawTextInfo ARGS_DECL((DrawTextInfo*)); extern void RestoreDrawTextInfo ARGS_DECL((DrawTextInfo*)); extern void ResetDrawTextInfo ARGS_DECL((void)); extern void SaveDrawWinDrawTextInfo ARGS_DECL((int forced)); extern void RestoreDrawWinDrawTextInfo ARGS_DECL((int forced)); extern void ResetDirtyBBoxInfo ARGS_DECL((void)); extern void AddToDirtyBBox ARGS_DECL((struct BBRec *)); extern void ForceDirtyBBoxToRedrawAll ARGS_DECL((void)); extern int GetDirtyBBox ARGS_DECL((struct BBRec *)); extern void CleanUpIndentStrings ARGS_DECL((void)); extern char *GetIndentString ARGS_DECL((int indent)); extern void DumpIndentString ARGS_DECL((FILE*, int indent)); extern void CleanUpMiniLines ARGS_DECL((void)); extern int InitMiniLines ARGS_DECL((void)); extern void FreeStrSeg ARGS_DECL((StrSegInfo*)); extern void FreeStrBlock ARGS_DECL((StrBlockInfo*)); extern void FreeMiniLine ARGS_DECL((MiniLineInfo*)); extern void FreeMiniLines ARGS_DECL((MiniLinesInfo*, int free_minilines)); extern void FreeStrBlockList ARGS_DECL((StrBlockInfo*)); extern void FreeMiniLineList ARGS_DECL((MiniLineInfo*)); extern void UnlinkStrBlock ARGS_DECL((StrBlockInfo*)); extern void UnlinkMiniLine ARGS_DECL((MiniLineInfo*)); extern StrSegInfo *NewStrSeg ARGS_DECL((void)); extern StrBlockInfo *NewStrBlock ARGS_DECL((void)); extern MiniLineInfo *NewMiniLine ARGS_DECL((void)); extern MiniLinesInfo *NewMiniLines ARGS_DECL((void)); extern void InsertStrBlock ARGS_DECL((StrBlockInfo *pPrevStrBlock, StrBlockInfo *pNextStrBlock, StrBlockInfo *pStrBlock, StrBlockInfo **ppFirstStrBlock, StrBlockInfo **ppLastStrBlock)); extern void InsertMiniLine ARGS_DECL((MiniLineInfo *pPrevMiniLine, MiniLineInfo *pNextMiniLine, MiniLineInfo *pMiniLine, MiniLineInfo **ppFirstMiniLine, MiniLineInfo **ppLastMiniLine)); extern int BlankStrSeg ARGS_DECL((StrSegInfo*)); extern int BlankStrBlock ARGS_DECL((StrBlockInfo*)); extern int BlankMiniLine ARGS_DECL((MiniLineInfo*)); extern int BlankMiniLines ARGS_DECL((MiniLinesInfo*)); extern StrSegInfo *GetTextFirstStrSeg ARGS_DECL((struct ObjRec *)); extern struct DynStrRec *GetTextFirstDynStr ARGS_DECL((struct ObjRec *)); /* ===================== TextRec Routines ===================== */ extern void CopyCurInfoIntoStrSeg ARGS_DECL((StrBlockInfo*, StrSegInfo*)); extern void CopyCurInfoFromStrSeg ARGS_DECL((StrSegInfo*)); extern void CopyCurInfoIntoTextPtr ARGS_DECL((struct ObjRec *, struct TextRec *)); extern void CopyCurInfoFromTextPtr ARGS_DECL((struct ObjRec *, struct TextRec *)); /* ===================== RecalcTextMetrics ===================== */ extern int RecalcMiniLineMetrics ARGS_DECL((MiniLineInfo*, RecalcMetricsInfo*)); extern int RecalcMiniLinesMetrics ARGS_DECL((MiniLinesInfo*, RecalcMetricsInfo*)); extern int RecalcTextMetrics ARGS_DECL((struct TextRec *, int x, int baseline_y)); extern void UpdateMiniLinesBBoxes ARGS_DECL((MiniLinesInfo*, int x, int baseline_y, int clean)); extern void UpdateCurTextBBoxes ARGS_DECL((int clean)); extern void DoFuncOnStrSegForMiniLines ARGS_DECL((MiniLinesInfo*, STRSEGFN*, void*)); /* ===================== Text Routines ===================== */ extern void ResetOnCursorKey ARGS_DECL((int drag)); extern void PutTextCursor ARGS_DECL((void)); extern void EraseTextCursor ARGS_DECL((void)); extern void GetCurTextBBoxes ARGS_DECL((struct BBRec *pOBBox, struct BBRec *pBBox)); extern void PaintMiniLines ARGS_DECL((Display*, Drawable, GC, int depth, int x, int baseline_y, MiniLinesInfo*, int use_highlight, int use_as_mask)); extern void DrawCurTextOutLine ARGS_DECL((int x, int y, int w, int h)); extern void RedrawCurText ARGS_DECL((void)); extern void UpdateHighLightedTextBBoxes ARGS_DECL((int clean)); extern void MergeNextMiniLineWhileDeleting ARGS_DECL((MiniLineInfo*)); extern int StrBlocksHasSameProperties ARGS_DECL((StrBlockInfo*, StrBlockInfo*)); extern int MergeStrBlocks ARGS_DECL((StrBlockInfo *pStrBlock, StrBlockInfo *pNextStrBlock)); extern void DoInsertThinSpace ARGS_DECL((int thin_space_w)); extern void InsertHighlightedThinSpace ARGS_DECL((int thin_space_w)); extern void DeleteHighlightedText ARGS_DECL((void)); extern int ShrinkMiniLines ARGS_DECL((MiniLinesInfo*, int *pnRetry)); extern int GetTextXYInMiniLines ARGS_DECL((MiniLinesInfo*, StrBlockInfo*, int index_to_match, int *pn_dx, int *pn_dy)); extern void GetTextXY ARGS_DECL((StrBlockInfo*, int nIndex, int *pn_x, int *pn_baseline_y)); extern void SetTextCurXY ARGS_DECL((void)); extern void SetTextEndXY ARGS_DECL((void)); extern int CurStrBlockInStrBlock ARGS_DECL((StrBlockInfo*)); extern int CurStrBlockInMiniLine ARGS_DECL((MiniLineInfo*)); extern int CurStrBlockInMiniLines ARGS_DECL((MiniLinesInfo*)); extern int GetCursorPositionInMiniLines ARGS_DECL((MiniLinesInfo*, int dx, int dy, int *pn_dx, int *pn_dy, StrBlockInfo**, int *pnIndex)); extern int SameProperty ARGS_DECL((long lWhich, int nValue, StrSegInfo*, int nCheckDoubleByte)); extern int SetStrSegProperty ARGS_DECL((long lWhich, int nValue, StrSegInfo*)); extern int SetMiniLinesProperty ARGS_DECL((long lWhich, int nValue, MiniLinesInfo*)); extern int ChangeHighlightedTextProperty ARGS_DECL((long lWhich, int nValue)); extern int OnePropertyMiniLines ARGS_DECL((long lWhich, int nValue, MiniLinesInfo*, int nCheckDoubleByte)); extern int SingleFontMiniLines ARGS_DECL((MiniLinesInfo*, int *pnSzUnit, int *pnDoubleByte, int *pnFont, int *pnStyle, int *pnUnderlineOn, int *pnOverlineOn)); extern int SingleFontText ARGS_DECL((struct TextRec*, int *pnSzUnit, int *pnDoubleByte, int *pnFont, int *pnStyle, int *pnUnderlineOn, int *pnOverlineOn)); extern int SingleColorMiniLines ARGS_DECL((MiniLinesInfo*, int *pnColorIndex)); extern int SingleColorText ARGS_DECL((struct TextRec*, int *pnColorIndex)); extern int HighlightedTextHasSameProperty ARGS_DECL((long lWhich, int nValue, int nChkDoubleByte)); extern int CheckMiniLinesProperties ARGS_DECL((MiniLinesInfo*, int *pn_valid, int *pn_font, int *pn_style, int *pn_sz_unit, int *pn_color, int *pn_underline_on, int *pn_overline_on)); extern int CanCopyHighLightedTextAsStrings ARGS_DECL((void)); extern int CanCopyHighLightedTextAsUTF8Strings ARGS_DECL(( int *pn_double_byte_font_index)); extern int CanPasteUTF8StringIntoText ARGS_DECL((StrSegInfo*)); extern void GatherHighLightedTextAsStrings ARGS_DECL((char **ppsz_buf, int *pn_buf_sz)); extern struct ObjRec *CreateTextObjFromHighLightedText ARGS_DECL((void)); extern void ReorderCursorStrBlocks ARGS_DECL((void)); extern int FindStringInMiniLines ARGS_DECL((MiniLinesInfo*, int *pn_found_starting_point, char *str_to_match, int str_len_to_match, int case_sensitive, StrBlockInfo **ppStartStrBlock, int *pn_start_index, StrBlockInfo **ppEndStrBlock, int *pn_end_index)); extern int CanBreakMiniLinesIntoWords ARGS_DECL((MiniLinesInfo*)); extern void BreakMiniLines ARGS_DECL((MiniLinesInfo*, int how, int x, int baseline_y, struct ObjRec *prototype, int tx_to_move, int ty_to_move, ObjListInfo*)); extern void DumpMiniLines ARGS_DECL((MiniLinesInfo*, int x, int baseline_y, FILE*, struct BBRec *, int do_dump, int indent)); extern int SimpleTextObj ARGS_DECL((struct TextRec *)); extern void DumpSimpleTextPath ARGS_DECL((FILE*, struct ObjRec *)); extern void DumpMiniLineInAscii ARGS_DECL((FILE*, MiniLineInfo*, int *pnSomethingPrinted)); extern void DumpMiniLinesInAscii ARGS_DECL((FILE*, MiniLinesInfo*, int *pnSomethingPrinted)); extern char *ConvertMiniLineToString ARGS_DECL((MiniLineInfo*, int *pnNeedToFree)); extern char *ConvertAttrNameFirstMiniLineToString ARGS_DECL(( struct AttrRec *, int *pnNeedToFree)); extern int MiniLinesInVisibleLayer ARGS_DECL((MiniLinesInfo*)); #ifdef _INCLUDE_FROM_MINILINE_C_ #undef extern #ifndef _NO_RECURSIVE_EXTERN #define extern extern #endif /* ~_NO_RECURSIVE_EXTERN */ #endif /*_INCLUDE_FROM_MINILINE_C_*/ #endif /*_MINILINE_E_*/