• Skip to content
  • Skip to link menu
KDE 4.1 API Reference
  • KDE API Reference
  • kdelibs
  • Sitemap
  • Contact Us
 

Kate

katetextlayout.cpp

Go to the documentation of this file.
00001 /* This file is part of the KDE libraries
00002    Copyright (C) 2002-2005 Hamish Rodda <rodda@kde.org>
00003    Copyright (C) 2003      Anakim Border <aborder@sources.sourceforge.net>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License version 2 as published by the Free Software Foundation.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017    Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #include "katetextlayout.h"
00021 
00022 #include <kdebug.h>
00023 
00024 KateTextLayout::KateTextLayout(KateLineLayoutPtr line, int viewLine)
00025   : m_lineLayout(line)
00026   , m_viewLine(viewLine)
00027   , m_startX(m_viewLine ? -1 : 0)
00028   , m_invalidDirty(true)
00029 {
00030   if (isValid())
00031     m_textLayout = m_lineLayout->layout()->lineAt(m_viewLine);
00032 }
00033 
00034 bool KateTextLayout::isDirty( ) const
00035 {
00036   if (!isValid())
00037     return m_invalidDirty;
00038 
00039   return m_lineLayout->isDirty(viewLine());
00040 }
00041 
00042 bool KateTextLayout::setDirty( bool dirty )
00043 {
00044   if (!isValid())
00045     return (m_invalidDirty = dirty);
00046 
00047   return m_lineLayout->setDirty(viewLine(), dirty);
00048 }
00049 
00050 bool KateTextLayout::includesCursor(const KTextEditor::Cursor& realCursor) const
00051 {
00052   return realCursor.line() == line() && realCursor.column() >= startCol() && (!wrap() || realCursor.column() < endCol());
00053 }
00054 
00055 int KateTextLayout::xOffset() const
00056 {
00057   if (!isValid())
00058     return 0;
00059 
00060   return startX() ? m_lineLayout->shiftX() : 0;
00061 }
00062 
00063 void KateTextLayout::debugOutput() const
00064 {
00065   kDebug( 13033 ) << "KateTextLayout: " << m_lineLayout << " valid " << isValid() << " line " << m_lineLayout->line() << " (" << line() << ") cols [" << startCol() << " -> " << endCol() << "] x [" << startX() << " -> " << endX() << " off " << m_lineLayout->shiftX() << "] wrap " << wrap();
00066 }
00067 
00068 bool operator> (const KateTextLayout& r, const KTextEditor::Cursor& c)
00069 {
00070   return r.line() > c.line() || r.endCol() > c.column();
00071 }
00072 
00073 bool operator>= (const KateTextLayout& r, const KTextEditor::Cursor& c)
00074 {
00075   return r.line() > c.line() || r.endCol() >= c.column();
00076 }
00077 
00078 bool operator< (const KateTextLayout& r, const KTextEditor::Cursor& c)
00079 {
00080   return r.line() < c.line() || r.startCol() < c.column();
00081 }
00082 
00083 bool operator<= (const KateTextLayout& r, const KTextEditor::Cursor& c)
00084 {
00085   return r.line() < c.line() || r.startCol() <= c.column();
00086 }
00087 
00088 bool KateTextLayout::isValid( ) const
00089 {
00090   return m_lineLayout && m_lineLayout->isValid() && m_viewLine >= 0 && m_viewLine < m_lineLayout->viewLineCount();
00091 }
00092 
00093 int KateTextLayout::line( ) const
00094 {
00095   if (!isValid())
00096     return -1;
00097 
00098   return m_lineLayout->line();
00099 }
00100 
00101 int KateTextLayout::virtualLine( ) const
00102 {
00103   if (!isValid())
00104     return -1;
00105 
00106   return m_lineLayout->virtualLine();
00107 }
00108 
00109 int KateTextLayout::viewLine( ) const
00110 {
00111   if (!isValid())
00112     return 0;
00113 
00114   return m_viewLine;
00115 }
00116 
00117 const QTextLine & KateTextLayout::lineLayout( ) const
00118 {
00119   return m_textLayout;
00120 }
00121 
00122 KateLineLayoutPtr KateTextLayout::kateLineLayout( ) const
00123 {
00124   return m_lineLayout;
00125 }
00126 
00127 int KateTextLayout::startCol( ) const
00128 {
00129   if (!isValid())
00130     return 0;
00131 
00132   return lineLayout().textStart();
00133 }
00134 
00135 KTextEditor::Cursor KateTextLayout::start( ) const
00136 {
00137   return KTextEditor::Cursor(line(), startCol());
00138 }
00139 
00140 int KateTextLayout::endCol(bool indicateEOL) const
00141 {
00142   if (!isValid())
00143     return 0;
00144 
00145   if (indicateEOL)
00146     if (viewLine() == kateLineLayout()->viewLineCount() - 1)
00147       return -1;
00148 
00149   return startCol() + m_textLayout.textLength();
00150 }
00151 
00152 KTextEditor::Cursor KateTextLayout::end(bool indicateEOL) const
00153 {
00154   return KTextEditor::Cursor(line(), endCol(indicateEOL));
00155 }
00156 
00157 int KateTextLayout::length( ) const
00158 {
00159   if (!isValid())
00160     return 0;
00161 
00162   return m_textLayout.textLength();
00163 }
00164 
00165 bool KateTextLayout::isEmpty( ) const
00166 {
00167   if (!isValid())
00168     return true;
00169 
00170   return startCol() == 0 && endCol() == 0;
00171 }
00172 
00173 bool KateTextLayout::wrap( ) const
00174 {
00175   if (!isValid())
00176     return false;
00177 
00178   return viewLine() < m_lineLayout->viewLineCount() - 1;
00179 }
00180 
00181 int KateTextLayout::startX( ) const
00182 {
00183   if (!isValid())
00184     return 0;
00185 
00186   if (m_startX == -1)
00187     // viewLine is already > 0, from the constructor
00188     for (int i = 0; i < viewLine(); ++i)
00189       m_startX += (int)m_lineLayout->layout()->lineAt(i).naturalTextWidth();
00190 
00191   return m_startX;
00192 }
00193 
00194 int KateTextLayout::endX( ) const
00195 {
00196   if (!isValid())
00197     return 0;
00198 
00199   return startX() + (int)m_textLayout.naturalTextWidth();
00200 }
00201 
00202 int KateTextLayout::width( ) const
00203 {
00204   if (!isValid())
00205     return 0;
00206 
00207   return (int)m_textLayout.naturalTextWidth();
00208 }
00209 
00210 KateTextLayout KateTextLayout::invalid( )
00211 {
00212   return KateTextLayout();
00213 }

Kate

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

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • KIO
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • Kross
  • KUtils
  • Nepomuk
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal