xref: /haiku/src/kits/interface/textview_support/LineBuffer.h (revision 7749d0bb0c358a3279b1b9cc76d8376e900130a5)
1 /*
2  * Copyright 2001-2006, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Marc Flerackers (mflerackers@androme.be)
7  */
8 #ifndef __LINE_BUFFER_H
9 #define __LINE_BUFFER_H
10 
11 
12 #include <SupportDefs.h>
13 #include <TextView.h>
14 
15 #include "TextViewSupportBuffer.h"
16 
17 struct STELine {
18 	long		offset;		// offset of first character of line
19 	float		origin;		// pixel position of top of line
20 	float		ascent;		// maximum ascent for line
21 	float		width;		// cached width of line in pixels
22 };
23 
24 
25 class BTextView::LineBuffer : public _BTextViewSupportBuffer_<STELine> {
26 
27 public:
28 								LineBuffer();
29 	virtual						~LineBuffer();
30 
31 			void				InsertLine(STELine* inLine, int32 index);
32 			void				RemoveLines(int32 index, int32 count = 1);
33 			void				RemoveLineRange(int32 fromOffset,
34 									int32 toOffset);
35 
36 			int32				OffsetToLine(int32 offset) const;
37 			int32				PixelToLine(float pixel) const;
38 
39 			void				BumpOrigin(float delta, int32 index);
40 			void				BumpOffset(int32 delta, int32 index);
41 
42 			long				NumLines() const;
43 			float				MaxWidth() const;
44 			STELine*			operator[](int32 index) const;
45 };
46 
47 
48 inline int32
49 BTextView::LineBuffer::NumLines() const
50 {
51 	return fItemCount - 1;
52 }
53 
54 
55 inline STELine *
56 BTextView::LineBuffer::operator[](int32 index) const
57 {
58 	return &fBuffer[index];
59 }
60 
61 
62 #endif	// __LINE_BUFFER_H
63