xref: /MusicPlayer2/scintilla/src/CallTip.h (revision 8af74909132ed5e696cb05b6689ae4baf14c1c96)
1*8af74909SZhong Yang // Scintilla source code edit control
2*8af74909SZhong Yang /** @file CallTip.h
3*8af74909SZhong Yang  ** Interface to the call tip control.
4*8af74909SZhong Yang  **/
5*8af74909SZhong Yang // Copyright 1998-2001 by Neil Hodgson <[email protected]>
6*8af74909SZhong Yang // The License.txt file describes the conditions under which this software may be distributed.
7*8af74909SZhong Yang 
8*8af74909SZhong Yang #ifndef CALLTIP_H
9*8af74909SZhong Yang #define CALLTIP_H
10*8af74909SZhong Yang 
11*8af74909SZhong Yang namespace Scintilla {
12*8af74909SZhong Yang 
13*8af74909SZhong Yang struct Chunk {
14*8af74909SZhong Yang 	size_t start;
15*8af74909SZhong Yang 	size_t end;
startChunk16*8af74909SZhong Yang 	constexpr Chunk(size_t start_=0, size_t end_=0) noexcept : start(start_), end(end_) {
17*8af74909SZhong Yang 		assert(start <= end);
18*8af74909SZhong Yang 	}
19*8af74909SZhong Yang 	size_t Length() const noexcept;
20*8af74909SZhong Yang };
21*8af74909SZhong Yang 
22*8af74909SZhong Yang /**
23*8af74909SZhong Yang  */
24*8af74909SZhong Yang class CallTip {
25*8af74909SZhong Yang 	Chunk highlight;    // character offset to start and end of highlighted text
26*8af74909SZhong Yang 	std::string val;
27*8af74909SZhong Yang 	Font font;
28*8af74909SZhong Yang 	PRectangle rectUp;      // rectangle of last up angle in the tip
29*8af74909SZhong Yang 	PRectangle rectDown;    // rectangle of last down arrow in the tip
30*8af74909SZhong Yang 	int lineHeight;         // vertical line spacing
31*8af74909SZhong Yang 	int offsetMain;         // The alignment point of the call tip
32*8af74909SZhong Yang 	int tabSize;            // Tab size in pixels, <=0 no TAB expand
33*8af74909SZhong Yang 	bool useStyleCallTip;   // if true, STYLE_CALLTIP should be used
34*8af74909SZhong Yang 	bool above;		// if true, display calltip above text
35*8af74909SZhong Yang 
36*8af74909SZhong Yang 	int DrawChunk(Surface *surface, int x, std::string_view sv,
37*8af74909SZhong Yang 		int ytext, PRectangle rcClient, bool asHighlight, bool draw);
38*8af74909SZhong Yang 	int PaintContents(Surface *surfaceWindow, bool draw);
39*8af74909SZhong Yang 	bool IsTabCharacter(char ch) const noexcept;
40*8af74909SZhong Yang 	int NextTabPos(int x) const noexcept;
41*8af74909SZhong Yang 
42*8af74909SZhong Yang public:
43*8af74909SZhong Yang 	Window wCallTip;
44*8af74909SZhong Yang 	Window wDraw;
45*8af74909SZhong Yang 	bool inCallTipMode;
46*8af74909SZhong Yang 	Sci::Position posStartCallTip;
47*8af74909SZhong Yang 	ColourDesired colourBG;
48*8af74909SZhong Yang 	ColourDesired colourUnSel;
49*8af74909SZhong Yang 	ColourDesired colourSel;
50*8af74909SZhong Yang 	ColourDesired colourShade;
51*8af74909SZhong Yang 	ColourDesired colourLight;
52*8af74909SZhong Yang 	int codePage;
53*8af74909SZhong Yang 	int clickPlace;
54*8af74909SZhong Yang 
55*8af74909SZhong Yang 	int insetX; // text inset in x from calltip border
56*8af74909SZhong Yang 	int widthArrow;
57*8af74909SZhong Yang 	int borderHeight;
58*8af74909SZhong Yang 	int verticalOffset; // pixel offset up or down of the calltip with respect to the line
59*8af74909SZhong Yang 
60*8af74909SZhong Yang 	CallTip() noexcept;
61*8af74909SZhong Yang 	// Deleted so CallTip objects can not be copied.
62*8af74909SZhong Yang 	CallTip(const CallTip &) = delete;
63*8af74909SZhong Yang 	CallTip(CallTip &&) = delete;
64*8af74909SZhong Yang 	CallTip &operator=(const CallTip &) = delete;
65*8af74909SZhong Yang 	CallTip &operator=(CallTip &&) = delete;
66*8af74909SZhong Yang 	~CallTip();
67*8af74909SZhong Yang 
68*8af74909SZhong Yang 	void PaintCT(Surface *surfaceWindow);
69*8af74909SZhong Yang 
70*8af74909SZhong Yang 	void MouseClick(Point pt) noexcept;
71*8af74909SZhong Yang 
72*8af74909SZhong Yang 	/// Setup the calltip and return a rectangle of the area required.
73*8af74909SZhong Yang 	PRectangle CallTipStart(Sci::Position pos, Point pt, int textHeight, const char *defn,
74*8af74909SZhong Yang 		const char *faceName, int size, int codePage_,
75*8af74909SZhong Yang 		int characterSet, int technology, const Window &wParent);
76*8af74909SZhong Yang 
77*8af74909SZhong Yang 	void CallTipCancel();
78*8af74909SZhong Yang 
79*8af74909SZhong Yang 	/// Set a range of characters to be displayed in a highlight style.
80*8af74909SZhong Yang 	/// Commonly used to highlight the current parameter.
81*8af74909SZhong Yang 	void SetHighlight(size_t start, size_t end);
82*8af74909SZhong Yang 
83*8af74909SZhong Yang 	/// Set the tab size in pixels for the call tip. 0 or -ve means no tab expand.
84*8af74909SZhong Yang 	void SetTabSize(int tabSz) noexcept;
85*8af74909SZhong Yang 
86*8af74909SZhong Yang 	/// Set calltip position.
87*8af74909SZhong Yang 	void SetPosition(bool aboveText) noexcept;
88*8af74909SZhong Yang 
89*8af74909SZhong Yang 	/// Used to determine which STYLE_xxxx to use for call tip information
90*8af74909SZhong Yang 	bool UseStyleCallTip() const noexcept;
91*8af74909SZhong Yang 
92*8af74909SZhong Yang 	// Modify foreground and background colours
93*8af74909SZhong Yang 	void SetForeBack(const ColourDesired &fore, const ColourDesired &back) noexcept;
94*8af74909SZhong Yang };
95*8af74909SZhong Yang 
96*8af74909SZhong Yang }
97*8af74909SZhong Yang 
98*8af74909SZhong Yang #endif
99