From: <tom...@us...> - 2010-02-24 21:23:52
|
Revision: 3438 http://tora.svn.sourceforge.net/tora/?rev=3438&view=rev Author: tomasstraupis Date: 2010-02-24 21:23:45 +0000 (Wed, 24 Feb 2010) Log Message: ----------- 1. Use QScintilla caret line background functionality. 2. Add QScintilla fixes for caret line transparency from nightly build. Modified Paths: -------------- trunk/tora/src/qscintilla2/Qt4/PlatQt.cpp trunk/tora/src/qscintilla2/Qt4/Qsci/qsciglobal.h trunk/tora/src/qscintilla2/Qt4/Qsci/qsciscintilla.h trunk/tora/src/qscintilla2/Qt4/qscidocument.cpp trunk/tora/src/qscintilla2/Qt4/qsciscintilla.cpp trunk/tora/src/tohighlightedtext.cpp trunk/tora/src/tohighlightedtext.h Modified: trunk/tora/src/qscintilla2/Qt4/PlatQt.cpp =================================================================== --- trunk/tora/src/qscintilla2/Qt4/PlatQt.cpp 2010-02-24 10:49:41 UTC (rev 3437) +++ trunk/tora/src/qscintilla2/Qt4/PlatQt.cpp 2010-02-24 21:23:45 UTC (rev 3438) @@ -210,9 +210,8 @@ int len, ColourAllocated fore); QFontMetrics metrics(Font &font_); QString convertText(const char *s, int len); - static QRgb convertQRgb(const ColourAllocated &col, unsigned alpha); static QColor convertQColor(const ColourAllocated &col, - unsigned alpha = 0xff); + unsigned alpha = 255); bool unicodeMode; QPaintDevice *pd; @@ -393,11 +392,11 @@ // Assume that "cornerSize" means outline width. if (cornerSize > 0) - painter->setPen(QPen(QColor(convertQRgb(outline, alphaOutline)), cornerSize)); + painter->setPen(QPen(convertQColor(outline, alphaOutline), cornerSize)); else painter->setPen(Qt::NoPen); - painter->setBrush(QColor(convertQRgb(fill, alphaFill))); + painter->setBrush(convertQColor(fill, alphaFill)); painter->drawRect(rc.left, rc.top, w, h); } @@ -584,8 +583,9 @@ return QString::fromLatin1(s, len); } -// Convert a Scintilla colour and alpha component to a Qt QRgb. -QRgb SurfaceImpl::convertQRgb(const ColourAllocated &col, unsigned alpha) + +// Convert a Scintilla colour, and alpha component, to a Qt QColor. +QColor SurfaceImpl::convertQColor(const ColourAllocated &col, unsigned alpha) { long c = col.AsLong(); @@ -593,18 +593,10 @@ unsigned g = (c >> 8) & 0xff; unsigned b = (c >> 16) & 0xff; - QRgb rgba = (alpha << 24) | (r << 16) | (g << 8) | b; - - return rgba; + return QColor(r, g, b, alpha); } -// Convert a Scintilla colour, and optional alpha component, to a Qt QColor. -QColor SurfaceImpl::convertQColor(const ColourAllocated &col, unsigned alpha) -{ - return QColor(convertQRgb(col, alpha)); -} - // Window (widget) management. Window::~Window() { Modified: trunk/tora/src/qscintilla2/Qt4/Qsci/qsciglobal.h =================================================================== --- trunk/tora/src/qscintilla2/Qt4/Qsci/qsciglobal.h 2010-02-24 10:49:41 UTC (rev 3437) +++ trunk/tora/src/qscintilla2/Qt4/Qsci/qsciglobal.h 2010-02-24 21:23:45 UTC (rev 3438) @@ -38,8 +38,8 @@ #include <qglobal.h> -#define QSCINTILLA_VERSION 0x020402 -#define QSCINTILLA_VERSION_STR "2.4.2" +#define QSCINTILLA_VERSION 0x020403 +#define QSCINTILLA_VERSION_STR "snapshot-2.4.3-111da2e01c5e" // Under Windows, define QSCINTILLA_MAKE_DLL to create a Scintilla DLL, or Modified: trunk/tora/src/qscintilla2/Qt4/Qsci/qsciscintilla.h =================================================================== --- trunk/tora/src/qscintilla2/Qt4/Qsci/qsciscintilla.h 2010-02-24 10:49:41 UTC (rev 3437) +++ trunk/tora/src/qscintilla2/Qt4/Qsci/qsciscintilla.h 2010-02-24 21:23:45 UTC (rev 3438) @@ -465,6 +465,12 @@ //! is no current lexer then true is returned. bool caseSensitive() const; + //! Clear all current folds, i.e. ensure that all lines are displayed + //! unfolded. + //! + //! \sa setFolding() + void clearFolds(); + //! Clear all registered images. //! //! \sa registerImage() @@ -708,8 +714,8 @@ //! marker number is returned or -1 if the marker number was already //! allocated or too many markers have been defined. //! - //! Markers are small geometric symbols and character used, for example, to - //! indicate the current line or, in debuggers, to indicate breakpoints. + //! Markers are small geometric symbols and characters used, for example, + //! to indicate the current line or, in debuggers, to indicate breakpoints. //! If a margin has a width of 0 then its markers are not drawn, but their //! background colours affect the background colour of the corresponding //! line of text. Modified: trunk/tora/src/qscintilla2/Qt4/qscidocument.cpp =================================================================== --- trunk/tora/src/qscintilla2/Qt4/qscidocument.cpp 2010-02-24 10:49:41 UTC (rev 3437) +++ trunk/tora/src/qscintilla2/Qt4/qscidocument.cpp 2010-02-24 21:23:45 UTC (rev 3438) @@ -132,15 +132,10 @@ // Display the underlying document. void QsciDocument::display(QsciScintillaBase *qsb, const QsciDocument *from) { - void *ndoc; + void *ndoc = (from ? from->pdoc->doc : 0); - if (from) - { - ndoc = from->pdoc->doc; - qsb->SendScintilla(QsciScintillaBase::SCI_SETDOCPOINTER, 0, ndoc); - } - else - ndoc = qsb->SendScintillaPtrResult(QsciScintillaBase::SCI_GETDOCPOINTER); + qsb->SendScintilla(QsciScintillaBase::SCI_SETDOCPOINTER, 0, ndoc); + ndoc = qsb->SendScintillaPtrResult(QsciScintillaBase::SCI_GETDOCPOINTER); pdoc->doc = ndoc; ++pdoc->nr_displays; Modified: trunk/tora/src/qscintilla2/Qt4/qsciscintilla.cpp =================================================================== --- trunk/tora/src/qscintilla2/Qt4/qsciscintilla.cpp 2010-02-24 10:49:41 UTC (rev 3437) +++ trunk/tora/src/qscintilla2/Qt4/qsciscintilla.cpp 2010-02-24 21:23:45 UTC (rev 3438) @@ -1231,6 +1231,27 @@ } +// Clear all current folds. +void QsciScintilla::clearFolds() +{ + recolor(); + + int maxLine = SendScintilla(SCI_GETLINECOUNT); + + for (int line = 0; line < maxLine; line++) + { + int level = SendScintilla(SCI_GETFOLDLEVEL, line); + + if (level & SC_FOLDLEVELHEADERFLAG) + { + SendScintilla(SCI_SETFOLDEXPANDED, line, 1); + foldExpand(line, true, false, 0, level); + line--; + } + } +} + + // Set up a folder marker. void QsciScintilla::setFoldMarker(int marknr, int mark) { @@ -1716,12 +1737,13 @@ // Set the background colour of selected text. void QsciScintilla::setSelectionBackgroundColor(const QColor &col) { + int alpha = col.alpha(); + + if (alpha == 255) + alpha = SC_ALPHA_NOALPHA; + SendScintilla(SCI_SETSELBACK, 1, col); - - int alpha = qAlpha(col.rgb()); - - if (alpha < 255) - SendScintilla(SCI_SETSELALPHA, alpha); + SendScintilla(SCI_SETSELALPHA, alpha); } @@ -1778,12 +1800,13 @@ // Set the background colour of the line containing the caret. void QsciScintilla::setCaretLineBackgroundColor(const QColor &col) { + int alpha = col.alpha(); + + if (alpha == 255) + alpha = SC_ALPHA_NOALPHA; + SendScintilla(SCI_SETCARETLINEBACK, col); - - int alpha = qAlpha(col.rgb()); - - if (alpha < 255) - SendScintilla(SCI_SETCARETLINEBACKALPHA, alpha); + SendScintilla(SCI_SETCARETLINEBACKALPHA, alpha); } @@ -2509,8 +2532,12 @@ { if (mnr <= MARKER_MAX) { - int alpha = qAlpha(col.rgb()); + int alpha = col.alpha(); + // An opaque background would make the text invisible. + if (alpha == 255) + alpha = SC_ALPHA_NOALPHA; + if (mnr < 0) { unsigned am = allocatedMarkers; @@ -2520,9 +2547,7 @@ if (am & 1) { SendScintilla(SCI_MARKERSETBACK, m, col); - - if (alpha < 255) - SendScintilla(SCI_MARKERSETALPHA, m, alpha); + SendScintilla(SCI_MARKERSETALPHA, m, alpha); } am >>= 1; @@ -2531,9 +2556,7 @@ else if (allocatedMarkers & (1 << mnr)) { SendScintilla(SCI_MARKERSETBACK, mnr, col); - - if (alpha < 255) - SendScintilla(SCI_MARKERSETALPHA, mnr, alpha); + SendScintilla(SCI_MARKERSETALPHA, mnr, alpha); } } } @@ -2557,7 +2580,9 @@ } } else if (allocatedMarkers & (1 << mnr)) + { SendScintilla(SCI_MARKERSETFORE, mnr, col); + } } } Modified: trunk/tora/src/tohighlightedtext.cpp =================================================================== --- trunk/tora/src/tohighlightedtext.cpp 2010-02-24 10:49:41 UTC (rev 3437) +++ trunk/tora/src/tohighlightedtext.cpp 2010-02-24 21:23:45 UTC (rev 3438) @@ -68,7 +68,6 @@ #include "todefaultkeywords.h" - // Default SQL lexer // static QsciLexerSQL sqlLexer; // this definition (via function) fixes the font screwing @@ -377,7 +376,6 @@ m_debugHandle = markerDefine(QsciScintilla::Background); m_currentLineMarginHandle = markerDefine(QsciScintilla::RightArrow); - m_currentLineHandle = markerDefine(QsciScintilla::Background); m_bookmarkMarginHandle = markerDefine(QsciScintilla::RightTriangle); m_bookmarkHandle = markerDefine(QsciScintilla::Background); @@ -390,6 +388,11 @@ updateSyntaxColor(toSyntaxAnalyzer::CurrentLineMarker); updateSyntaxColor(toSyntaxAnalyzer::StaticBg); + // highlight caret line + setCaretLineVisible(true); + setCaretLineBackgroundColor(DefaultAnalyzer.getColor(toSyntaxAnalyzer::CurrentLineMarker)); + QsciScintilla::SendScintilla(QsciScintilla::SCI_SETCARETLINEBACKALPHA, 100); + // handle "max text width" mark if (toConfigurationSingle::Instance().useMaxTextWidthMark()) { @@ -470,10 +473,8 @@ if (timer->isActive()) timer->stop(); } - // current line marker - markerDeleteAll(m_currentLineHandle); + // current line marker (margin arrow) markerDeleteAll(m_currentLineMarginHandle); - markerAdd(row, m_currentLineHandle); markerAdd(row, m_currentLineMarginHandle); } @@ -638,7 +639,6 @@ setMarkerBackgroundColor(col, m_staticHandle); break; case toSyntaxAnalyzer::CurrentLineMarker: - setMarkerBackgroundColor(col, m_currentLineHandle); // setMarkerBackgroundColor(col, m_currentLineMarginHandle); // TODO/FIXME?: make it configurable - color. setMarkerBackgroundColor(DefaultAnalyzer.getColor(toSyntaxAnalyzer::CurrentLineMarker).lighter(100), Modified: trunk/tora/src/tohighlightedtext.h =================================================================== --- trunk/tora/src/tohighlightedtext.h 2010-02-24 10:49:41 UTC (rev 3437) +++ trunk/tora/src/tohighlightedtext.h 2010-02-24 21:23:45 UTC (rev 3438) @@ -96,12 +96,6 @@ */ QMap<infoType,QColor> Colors; - /** marker per linea contenente errori - */ -// int errorMarker; - /** marker per linea corrente - */ -// int debugMarker; /** Keeps track of possible hits found so far. */ struct posibleHit @@ -174,7 +168,7 @@ */ QColor getColor(infoType typ); - /** Check if a word is reserved. + /** Check if a word is reserved. (Used in toSQLParse) * @param word Word to check. * @return True if word is reserved. */ @@ -248,8 +242,6 @@ int m_errorHandle; //! \brief A handler for code error - margin int m_errorMarginHandle; - //! \brief A handler for current line highlighting - line highlighted - int m_currentLineHandle; //! \brief A handler for current line highlighting - margin int m_currentLineMarginHandle; //! \brief A handler for bookrmarks - line highlighted @@ -324,7 +316,7 @@ return line; } - /** Set current line. Will be indicated with a different background. + /** Set current debug line. Will be indicated with a different background. Used from debug tool. * @param current Current line. */ void setCurrent(int current); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |