• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • applications API Reference
  • KDE Home
  • Contact Us
 

Kate

  • kde-4.14
  • applications
  • kate
  • part
  • render
katelinelayout.cpp
Go to the documentation of this file.
1 /* This file is part of the KDE libraries
2  Copyright (C) 2002-2005 Hamish Rodda <rodda@kde.org>
3  Copyright (C) 2003 Anakim Border <aborder@sources.sourceforge.net>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License version 2 as published by the Free Software Foundation.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18 */
19 
20 #include "katelinelayout.h"
21 #include "katetextlayout.h"
22 #include "katetextfolding.h"
23 
24 #include <QtGui/QTextLine>
25 
26 #include <kdebug.h>
27 
28 #include "katedocument.h"
29 #include "katerenderer.h"
30 
31 KateLineLayout::KateLineLayout(KateRenderer &renderer)
32  : m_renderer(renderer)
33  , m_textLine(0L)
34  , m_line(-1)
35  , m_virtualLine(-1)
36  , m_shiftX(0)
37  , m_layout(0L)
38  , m_layoutDirty(true)
39  , m_usePlainTextLine(false)
40 {
41 }
42 
43 KateLineLayout::~KateLineLayout()
44 {
45  delete m_layout;
46 }
47 
48 void KateLineLayout::clear()
49 {
50  m_textLine = Kate::TextLine ();
51  m_line = -1;
52  m_virtualLine = -1;
53  m_shiftX = 0;
54  // not touching dirty
55  delete m_layout;
56  m_layout = 0L;
57  // not touching layout dirty
58 }
59 
60 bool KateLineLayout::includesCursor(const KTextEditor::Cursor& realCursor) const
61 {
62  return realCursor.line() == line();
63 }
64 
65 const Kate::TextLine& KateLineLayout::textLine(bool reloadForce) const
66 {
67  if (reloadForce || !m_textLine)
68  m_textLine = usePlainTextLine() ? m_renderer.doc()->plainKateTextLine (line()) : m_renderer.doc()->kateTextLine(line());
69 
70  Q_ASSERT(m_textLine);
71 
72  return m_textLine;
73 }
74 
75 int KateLineLayout::line( ) const
76 {
77  return m_line;
78 }
79 
80 void KateLineLayout::setLine( int line, int virtualLine )
81 {
82  m_line = line;
83  m_virtualLine = (virtualLine == -1) ? m_renderer.folding().lineToVisibleLine (line) : virtualLine;
84  m_textLine = Kate::TextLine ();
85 }
86 
87 int KateLineLayout::virtualLine( ) const
88 {
89  return m_virtualLine;
90 }
91 
92 void KateLineLayout::setVirtualLine( int virtualLine )
93 {
94  m_virtualLine = virtualLine;
95 }
96 
97 bool KateLineLayout::startsInvisibleBlock() const
98 {
99  if (!isValid())
100  return false;
101 
102  return (virtualLine() + 1) != m_renderer.folding().lineToVisibleLine (line() + 1);
103 }
104 
105 int KateLineLayout::shiftX() const
106 {
107  return m_shiftX;
108 }
109 
110 void KateLineLayout::setShiftX(int shiftX)
111 {
112  m_shiftX = shiftX;
113 }
114 
115 KateDocument* KateLineLayout::doc() const
116 {
117  return m_renderer.doc();
118 }
119 
120 bool KateLineLayout::isValid( ) const
121 {
122  return line() != -1 && layout() && textLine();
123 }
124 
125 QTextLayout* KateLineLayout::layout() const
126 {
127  return m_layout;
128 }
129 
130 void KateLineLayout::setLayout(QTextLayout* layout)
131 {
132  if (m_layout != layout) {
133  delete m_layout;
134  m_layout = layout;
135  }
136 
137  m_layoutDirty = !m_layout;
138  m_dirtyList.clear();
139  if (m_layout)
140  for (int i = 0; i < qMax(1, m_layout->lineCount()); ++i)
141  m_dirtyList.append(true);
142 }
143 
144 void KateLineLayout::invalidateLayout( )
145 {
146  setLayout(0L);
147 }
148 
149 bool KateLineLayout::isDirty( int viewLine ) const
150 {
151  Q_ASSERT(isValid() && viewLine >= 0 && viewLine < viewLineCount());
152  return m_dirtyList[viewLine];
153 }
154 
155 bool KateLineLayout::setDirty( int viewLine, bool dirty )
156 {
157  Q_ASSERT(isValid() && viewLine >= 0 && viewLine < viewLineCount());
158  m_dirtyList[viewLine] = dirty;
159  return dirty;
160 }
161 
162 KTextEditor::Cursor KateLineLayout::start( ) const
163 {
164  return KTextEditor::Cursor(line(), 0);
165 }
166 
167 int KateLineLayout::length( ) const
168 {
169  return textLine()->length();
170 }
171 
172 int KateLineLayout::viewLineCount( ) const
173 {
174  return m_layout->lineCount();
175 }
176 
177 KateTextLayout KateLineLayout::viewLine( int viewLine ) const
178 {
179  if (viewLine < 0)
180  viewLine += viewLineCount();
181  Q_ASSERT(isValid());
182  Q_ASSERT(viewLine >= 0 && viewLine < viewLineCount());
183  return KateTextLayout(KateLineLayoutPtr(const_cast<KateLineLayout*>(this)), viewLine);
184 }
185 
186 int KateLineLayout::width( ) const
187 {
188  int width = 0;
189 
190  for (int i = 0; i < m_layout->lineCount(); ++i)
191  width = qMax((int)m_layout->lineAt(i).naturalTextWidth(), width);
192 
193  return width;
194 }
195 
196 int KateLineLayout::widthOfLastLine( ) const
197 {
198  const KateTextLayout& lastLine = viewLine(viewLineCount() - 1);
199  return lastLine.width() + lastLine.xOffset();
200 }
201 
202 bool KateLineLayout::isOutsideDocument( ) const
203 {
204  return line() < 0 || line() >= m_renderer.doc()->lines();
205 }
206 
207 void KateLineLayout::debugOutput() const
208 {
209  kDebug( 13033 ) << "KateLineLayout: " << this << " valid " << isValid() << " line " << line() << " length " << length() << " width " << width() << " viewLineCount " << viewLineCount();
210 }
211 
212 int KateLineLayout::viewLineForColumn( int column ) const
213 {
214  int len = 0;
215  int i = 0;
216  for (; i < m_layout->lineCount() - 1; ++i) {
217  len += m_layout->lineAt(i).textLength();
218  if (column < len)
219  return i;
220  }
221  return i;
222 }
223 
224 bool KateLineLayout::isLayoutDirty( ) const
225 {
226  return m_layoutDirty;
227 }
228 
229 void KateLineLayout::setLayoutDirty( bool dirty )
230 {
231  m_layoutDirty = dirty;
232 }
233 
234 bool KateLineLayout::usePlainTextLine () const
235 {
236  return m_usePlainTextLine;
237 }
238 
239 void KateLineLayout::setUsePlainTextLine (bool plain)
240 {
241  m_usePlainTextLine = plain;
242 }
243 
244 bool KateLineLayout::isRightToLeft() const
245 {
246  if (!m_layout)
247  return false;
248 
249  return m_layout->textOption().textDirection() == Qt::RightToLeft;
250 }
251 
252 // kate: space-indent on; indent-width 2; replace-tabs on;
KateLineLayout::setUsePlainTextLine
void setUsePlainTextLine(bool plain=true)
Definition: katelinelayout.cpp:239
QTextLayout::textOption
QTextOption textOption() const
KateLineLayout::line
int line() const
Definition: katelinelayout.cpp:75
KateLineLayout::setVirtualLine
void setVirtualLine(int virtualLine)
Definition: katelinelayout.cpp:92
QList::clear
void clear()
KateLineLayout::virtualLine
int virtualLine() const
Definition: katelinelayout.cpp:87
KateLineLayout::viewLine
KateTextLayout viewLine(int viewLine) const
Definition: katelinelayout.cpp:177
KateLineLayout::setLayout
void setLayout(QTextLayout *layout)
Definition: katelinelayout.cpp:130
KateLineLayout::layout
QTextLayout * layout() const
Definition: katelinelayout.cpp:125
katerenderer.h
KateLineLayout::setDirty
bool setDirty(int viewLine, bool dirty=true)
Definition: katelinelayout.cpp:155
KateLineLayout::KateLineLayout
KateLineLayout(KateRenderer &renderer)
Definition: katelinelayout.cpp:31
QTextLine::naturalTextWidth
qreal naturalTextWidth() const
KateLineLayout::isRightToLeft
bool isRightToLeft() const
Definition: katelinelayout.cpp:244
KateLineLayout::textLine
const Kate::TextLine & textLine(bool forceReload=false) const
Definition: katelinelayout.cpp:65
katedocument.h
katetextfolding.h
KateLineLayout::setLine
void setLine(int line, int virtualLine=-1)
Only pass virtualLine if you know it (and thus we shouldn't try to look it up)
Definition: katelinelayout.cpp:80
KateLineLayout::debugOutput
void debugOutput() const
Definition: katelinelayout.cpp:207
KateLineLayout::setLayoutDirty
void setLayoutDirty(bool dirty=true)
Definition: katelinelayout.cpp:229
KateLineLayout::start
KTextEditor::Cursor start() const
Definition: katelinelayout.cpp:162
KateDocument::plainKateTextLine
Kate::TextLine plainKateTextLine(uint i)
Definition: katedocument.cpp:4712
KateLineLayout::clear
void clear()
Definition: katelinelayout.cpp:48
KateLineLayout::width
int width() const
Definition: katelinelayout.cpp:186
KateLineLayout::includesCursor
bool includesCursor(const KTextEditor::Cursor &realCursor) const
Definition: katelinelayout.cpp:60
KateLineLayout::~KateLineLayout
~KateLineLayout()
Definition: katelinelayout.cpp:43
KateRenderer
Handles all of the work of rendering the text (used for the views and printing)
Definition: katerenderer.h:50
KateLineLayout::setShiftX
void setShiftX(int shiftX)
Definition: katelinelayout.cpp:110
KateTextLayout::xOffset
int xOffset() const
Definition: katetextlayout.cpp:55
KateLineLayout::isValid
bool isValid() const
Definition: katelinelayout.cpp:120
KateLineLayout::shiftX
int shiftX() const
Definition: katelinelayout.cpp:105
QList::append
void append(const T &value)
QSharedPointer
KateLineLayout::isLayoutDirty
bool isLayoutDirty() const
Definition: katelinelayout.cpp:224
KateLineLayout::isOutsideDocument
bool isOutsideDocument() const
Definition: katelinelayout.cpp:202
QTextLayout
KateDocument::lines
virtual int lines() const
Definition: katedocument.cpp:753
KateLineLayout::viewLineCount
int viewLineCount() const
Definition: katelinelayout.cpp:172
Kate::TextFolding::lineToVisibleLine
int lineToVisibleLine(int line) const
Convert a text buffer line to a visible line number.
Definition: katetextfolding.cpp:366
KateRenderer::folding
Kate::TextFolding & folding() const
Returns the folding info to which this renderer is bound.
Definition: katerenderer.h:98
KateDocument
Definition: katedocument.h:74
KateDocument::kateTextLine
Kate::TextLine kateTextLine(uint i)
Definition: katedocument.cpp:4706
KateLineLayout::viewLineForColumn
int viewLineForColumn(int column) const
Definition: katelinelayout.cpp:212
katetextlayout.h
KateTextLayout
This class represents one visible line of text; with dynamic wrapping, many KateTextLayouts can be ne...
Definition: katetextlayout.h:38
katelinelayout.h
KateTextLayout::width
int width() const
Definition: katetextlayout.cpp:202
QTextLine::textLength
int textLength() const
QTextLayout::lineAt
QTextLine lineAt(int i) const
KateLineLayout::usePlainTextLine
bool usePlainTextLine() const
Definition: katelinelayout.cpp:234
Kate::TextLine
QSharedPointer< TextLineData > TextLine
The normal world only accesses the text lines with shared pointers.
Definition: katetextline.h:443
KateRenderer::doc
KateDocument * doc() const
Returns the document to which this renderer is bound.
Definition: katerenderer.h:92
KateLineLayout::startsInvisibleBlock
bool startsInvisibleBlock() const
Definition: katelinelayout.cpp:97
KateLineLayout::doc
KateDocument * doc() const
Definition: katelinelayout.cpp:115
KateLineLayout::invalidateLayout
void invalidateLayout()
Definition: katelinelayout.cpp:144
KateLineLayout::length
int length() const
Definition: katelinelayout.cpp:167
KateLineLayout::isDirty
bool isDirty(int viewLine) const
Definition: katelinelayout.cpp:149
KateLineLayout::widthOfLastLine
int widthOfLastLine() const
Definition: katelinelayout.cpp:196
KateLineLayoutPtr
KSharedPtr< KateLineLayout > KateLineLayoutPtr
Definition: katelinelayout.h:120
QTextOption::textDirection
Qt::LayoutDirection textDirection() const
QTextLayout::lineCount
int lineCount() const
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Sat May 9 2020 03:56:58 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Kate

Skip menu "Kate"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

applications API Reference

Skip menu "applications API Reference"
  •   kate
  •       kate
  •   KTextEditor
  •   Kate
  • Konsole

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal