Commit 40c334c1 authored by Clément Fauconnier's avatar Clément Fauconnier

reuse last used color for newer text boxes (only if applied globally) +...

reuse last used color for newer text boxes (only if applied globally) + recolor text boxes on background changes (white text becomes black and black text becomes white (like for polygons))
parent a8fa4b0c
......@@ -1589,7 +1589,7 @@ void UBBoardController::setActiveDocumentScene(UBDocumentProxy* pDocumentProxy,
if(documentChange)
{
UBGraphicsTextItem::lastUsedTextColor = QColor();
UBGraphicsTextItem::lastUsedTextColor = QColor(Qt::black);
}
if (sceneChange)
......
......@@ -1179,6 +1179,12 @@ void UBGraphicsScene::recolorAllItems()
curGroup->setColor(newColor);
}
}
if (item->type() == UBGraphicsTextItem::Type)
{
UBGraphicsTextItem *textItem = static_cast<UBGraphicsTextItem*>(item);
textItem->recolor();
}
}
foreach(QGraphicsView* view, views())
......
......@@ -41,7 +41,7 @@
#include "core/UBSettings.h"
#include "core/memcheck.h"
QColor UBGraphicsTextItem::lastUsedTextColor;
QColor UBGraphicsTextItem::lastUsedTextColor = QColor(Qt::black);
UBGraphicsTextItem::UBGraphicsTextItem(QGraphicsItem * parent)
: QGraphicsTextItem(parent)
......@@ -81,6 +81,13 @@ UBGraphicsTextItem::~UBGraphicsTextItem()
{
}
void UBGraphicsTextItem::recolor()
{
UBGraphicsTextItemDelegate * del = dynamic_cast<UBGraphicsTextItemDelegate*>(Delegate());
if (del)
del->recolor();
}
void UBGraphicsTextItem::setSelected(bool selected)
{
if(selected){
......
......@@ -99,6 +99,7 @@ class UBGraphicsTextItem : public QGraphicsTextItem, public UBItem, public UBRes
virtual void setUuid(const QUuid &pUuid);
void activateTextEditor(bool activate);
void setSelected(bool selected);
void recolor();
QString mTypeTextHereLabel;
......
......@@ -115,9 +115,21 @@ UBGraphicsTextItemDelegate::UBGraphicsTextItemDelegate(UBGraphicsTextItem* pDele
QTextCursor curCursor = delegated()->textCursor();
QTextCharFormat format;
QFont font(createDefaultFont());
font.setPointSize(UBSettings::settings()->fontPointSize());
font.setPointSize(UBSettings::settings()->fontPointSize());
format.setFont(font);
if (UBSettings::settings()->isDarkBackground())
{
if (UBGraphicsTextItem::lastUsedTextColor == Qt::black)
UBGraphicsTextItem::lastUsedTextColor = Qt::white;
}
else
{
if (UBGraphicsTextItem::lastUsedTextColor == Qt::white)
UBGraphicsTextItem::lastUsedTextColor = Qt::black;
}
delegated()->setDefaultTextColor(UBGraphicsTextItem::lastUsedTextColor);
format.setForeground(QBrush(UBGraphicsTextItem::lastUsedTextColor));
curCursor.mergeCharFormat(format);
delegated()->setTextCursor(curCursor);
delegated()->setFont(font);
......@@ -368,11 +380,13 @@ void UBGraphicsTextItemDelegate::pickColor()
QColor selectedColor = colorDialog.selectedColor();
delegated()->setDefaultTextColor(selectedColor);
QTextCursor curCursor = delegated()->textCursor();
QTextCharFormat format;
format.setForeground(QBrush(selectedColor));
curCursor.mergeCharFormat(format);
delegated()->setTextCursor(curCursor);
if (!curCursor.hasComplexSelection())
UBGraphicsTextItem::lastUsedTextColor = selectedColor;
delegated()->setSelected(true);
......@@ -673,6 +687,95 @@ void UBGraphicsTextItemDelegate::ChangeTextSize(qreal factor, textChangeMode cha
delegated()->setTextCursor(cursor);
}
void UBGraphicsTextItemDelegate::recolor()
{
QTextCursor cursor = delegated()->textCursor();
QTextCharFormat textFormat;
int anchorPos = cursor.anchor();
int cursorPos = cursor.position();
if (0 == anchorPos-cursorPos)
{
// If nothing is selected, then we select all the text
cursor.setPosition (0, QTextCursor::MoveAnchor);
cursor.setPosition (cursor.document()->characterCount()-1, QTextCursor::KeepAnchor);
}
int startPos = qMin(cursor.anchor(), cursor.position());
int endPos = qMax(cursor.anchor(), cursor.position());
QFont curFont;
QFont nextCharFont;
bool bEndofTheSameBlock;
int iBlockLen;
int iCursorPos = startPos;
QBrush curBrush;
QBrush nextCharBrush;
cursor.setPosition (startPos, QTextCursor::MoveAnchor);
while(iCursorPos < endPos)
{
bEndofTheSameBlock = false;
iBlockLen = 0;
// Here we get the point size of the first character
cursor.setPosition (iCursorPos+1, QTextCursor::KeepAnchor);
curBrush = cursor.charFormat().foreground();
// Then we position the end cursor to the start cursor position
cursor.setPosition (iCursorPos, QTextCursor::KeepAnchor);
do
{
cursor.setPosition (iCursorPos+iBlockLen+1, QTextCursor::KeepAnchor);
nextCharBrush = cursor.charFormat().foreground();
if (curBrush != nextCharBrush || (iCursorPos+iBlockLen >= endPos))
{
bEndofTheSameBlock = true;
break;
}
iBlockLen++;
}while(!bEndofTheSameBlock);
//setting new parameters
if (UBSettings::settings()->isDarkBackground())
{
if (curBrush.color() == Qt::black)
{
curBrush = QBrush(Qt::white);
}
}
else
{
if (curBrush.color() == Qt::white)
{
curBrush = QBrush(Qt::black);
}
}
cursor.setPosition (iCursorPos+iBlockLen, QTextCursor::KeepAnchor);
textFormat.setForeground(curBrush);
cursor.mergeCharFormat(textFormat);
iCursorPos += iBlockLen;
cursor.setPosition (iCursorPos, QTextCursor::MoveAnchor);
curFont = nextCharFont;
}
delegated()->setFont(curFont);
//returning initial selection
cursor.setPosition (anchorPos, QTextCursor::MoveAnchor);
cursor.setPosition (cursorPos, QTextCursor::KeepAnchor);
delegated()->setTextCursor(cursor);
}
void UBGraphicsTextItemDelegate::updateAlighButtonState()
{
if (!mAlignButton) {
......
......@@ -112,6 +112,7 @@ class UBGraphicsTextItemDelegate : public UBGraphicsItemDelegate
virtual ~UBGraphicsTextItemDelegate();
bool isEditable();
void scaleTextSize(qreal multiplyer);
void recolor();
virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value);
virtual void createControls();
qreal titleBarWidth();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment