Krita Source Code Documentation
Loading...
Searching...
No Matches
SvgTextCursor.cpp File Reference
#include "SvgTextCursor.h"
#include "KoCanvasBase.h"
#include "KoSvgTextProperties.h"
#include "SvgTextInsertCommand.h"
#include "SvgTextInsertRichCommand.h"
#include "SvgTextMergePropertiesRangeCommand.h"
#include "SvgTextRemoveCommand.h"
#include "SvgTextRemoveTransformsFromRange.h"
#include "SvgTextShapeManagerBlocker.h"
#include "SvgTextShortCuts.h"
#include "KoSvgTextShapeMarkupConverter.h"
#include "KoSvgPaste.h"
#include "KoColorBackground.h"
#include "KoShapeStroke.h"
#include "KoColor.h"
#include "KoViewConverter.h"
#include "kis_coordinates_converter.h"
#include "kis_painting_tweaks.h"
#include "KoCanvasController.h"
#include "KoCanvasResourceProvider.h"
#include <kis_signal_compressor.h>
#include <KisHandlePainterHelper.h>
#include <kis_acyclic_signal_connector.h>
#include "kundo2command.h"
#include <QTimer>
#include <QDebug>
#include <QClipboard>
#include <QMimeData>
#include <QApplication>
#include <QKeyEvent>
#include <QKeySequence>
#include <QAction>
#include <kis_assert.h>
#include <QInputMethodEvent>
#include <QBuffer>
#include <QWidget>

Go to the source code of this file.

Classes

struct  IMEDecorationInfo
 
class  SvgTextCursor::InputQueryUpdateBlocker
 
struct  SvgTextCursorPropertyInterface::Private
 
class  SvgTextCursor
 The SvgTextCursor class. More...
 
struct  TypeSettingDecorInfo
 

Functions

static QColor bgColorForCaret (QColor c, int opacity=64)
 
int calcLineHeight (const KoSvgText::LineHeightInfo &lineHeight, const KoSvgText::FontMetrics &metrics, const qreal scaleMetrics)
 
QTransform posAndRotateTransform (const QPointF pos, const qreal rotateDeg)
 
void processBaseline (const SvgTextCursor::TypeSettingModeHandle handle, const int metric, const bool isHorizontal, QTransform t, const qreal scaleMetrics, const QPointF &advance, QMap< SvgTextCursor::TypeSettingModeHandle, QPainterPath > &decor)
 
void processEdges (QTransform t, QMap< SvgTextCursor::TypeSettingModeHandle, int > values, const bool isHorizontal, const qreal scaleMetrics, const QPointF advance, QPainterPath &path)
 
QMap< SvgTextCursor::TypeSettingModeHandle, int > typeSettingBaselinesFromMetrics (const KoSvgText::FontMetrics metrics, const qreal lineGap, const bool isHorizontal)
 

Function Documentation

◆ bgColorForCaret()

static QColor bgColorForCaret ( QColor c,
int opacity = 64 )
static

Definition at line 830 of file SvgTextCursor.cpp.

830 {
831
832 return KisPaintingTweaks::luminosityCoarse(c) > 0.8? QColor(0, 0, 0, opacity) : QColor(255, 255, 255, opacity);
833}
qreal luminosityCoarse(const QColor &c, bool sRGBtrc)
luminosityCoarse This calculates the luminosity of the given QColor. It uses a very coarse (10 step) ...

References KisPaintingTweaks::luminosityCoarse().

◆ calcLineHeight()

int calcLineHeight ( const KoSvgText::LineHeightInfo & lineHeight,
const KoSvgText::FontMetrics & metrics,
const qreal scaleMetrics )

Lineheight calculation is a little tricky sometimes... Maybe we should generalize this so the one in the layout and this one uses the same base function.

Definition at line 1770 of file SvgTextCursor.cpp.

1770 {
1771 if (!lineHeight.isNormal) {
1772 if (lineHeight.isNumber) {
1773 return (lineHeight.value * (metrics.ascender-metrics.descender))-(metrics.ascender-metrics.descender);
1774 } else {
1775 return (lineHeight.length.value/scaleMetrics)-(metrics.ascender-metrics.descender);
1776 }
1777 }
1778 return metrics.lineGap;
1779}
qint32 lineGap
additional linegap between consecutive lines.
Definition KoSvgText.h:341
qint32 descender
distance for origin to bottom.
Definition KoSvgText.h:340
qint32 ascender
distance from origin to top.
Definition KoSvgText.h:339
bool isNumber
Length or number.
Definition KoSvgText.h:695
CssLengthPercentage length
Definition KoSvgText.h:693
bool isNormal
It's a number indicating the lineHeight;.
Definition KoSvgText.h:696

References KoSvgText::FontMetrics::ascender, KoSvgText::FontMetrics::descender, KoSvgText::LineHeightInfo::isNormal, KoSvgText::LineHeightInfo::isNumber, KoSvgText::LineHeightInfo::length, KoSvgText::FontMetrics::lineGap, KoSvgText::CssLengthPercentage::value, and KoSvgText::LineHeightInfo::value.

◆ posAndRotateTransform()

QTransform posAndRotateTransform ( const QPointF pos,
const qreal rotateDeg )

Definition at line 1825 of file SvgTextCursor.cpp.

1825 {
1826 QTransform t = QTransform::fromTranslate(pos.x(), pos.y());
1827 t.rotate(rotateDeg);
1828 return t;
1829}

◆ processBaseline()

void processBaseline ( const SvgTextCursor::TypeSettingModeHandle handle,
const int metric,
const bool isHorizontal,
QTransform t,
const qreal scaleMetrics,
const QPointF & advance,
QMap< SvgTextCursor::TypeSettingModeHandle, QPainterPath > & decor )

Definition at line 1781 of file SvgTextCursor.cpp.

1785 {
1786 QPointF offset = isHorizontal? QPointF(0, -(metric*scaleMetrics)): QPointF(metric*scaleMetrics, 0);
1787
1788 QPainterPath p = decor.value(handle);
1789
1790 const QPointF startPos = t.map(offset);
1791 const QPointF endPos = t.map(offset+advance);
1792 if (p.currentPosition() != startPos) {
1793 p.moveTo(startPos);
1794 }
1795 p.lineTo(endPos);
1796
1797 decor.insert(handle, p);
1798}
const Params2D p

References p.

◆ processEdges()

void processEdges ( QTransform t,
QMap< SvgTextCursor::TypeSettingModeHandle, int > values,
const bool isHorizontal,
const qreal scaleMetrics,
const QPointF advance,
QPainterPath & path )

Definition at line 1800 of file SvgTextCursor.cpp.

1804 {
1805 QPointF p1(values.first(), 0);
1806 QPointF p2(values.last(), 0);
1807 Q_FOREACH(const int val, values) {
1808 if (val < p1.x()) {
1809 p1.setX(val);
1810 }
1811 if (val > p2.x()) {
1812 p2.setX(val);
1813 }
1814 }
1815 if (isHorizontal) {
1816 p1 = QPointF(p1.y(), -p1.x());
1817 p2 = QPointF(p2.y(), -p2.x());
1818 }
1819 p1 *= scaleMetrics;
1820 p2 *= scaleMetrics;
1821 path.moveTo(t.map(p1+advance));
1822 path.lineTo(t.map(p2+advance));
1823}
QPointF p2
QPointF p1

References p1, and p2.

◆ typeSettingBaselinesFromMetrics()

QMap< SvgTextCursor::TypeSettingModeHandle, int > typeSettingBaselinesFromMetrics ( const KoSvgText::FontMetrics metrics,
const qreal lineGap,
const bool isHorizontal )

Definition at line 534 of file SvgTextCursor.cpp.

534 {
535 return QMap<SvgTextCursor::TypeSettingModeHandle, int> {
543 {SvgTextCursor::BaselineMiddle, isHorizontal? metrics.xHeight/2: metrics.ideographicCenterBaseline},
544 {SvgTextCursor::LineHeightTop, metrics.ascender+(lineGap/2)},
545 {SvgTextCursor::LineHeightBottom, metrics.descender-(lineGap/2)},
547 };
548}
qint32 ideographicCenterBaseline
default baseline for vertical, centered between over and under.
Definition KoSvgText.h:347
qint32 ideographicUnderBaseline
location of ideographic under baseline from origin, may fall back to descender.
Definition KoSvgText.h:346
qint32 xHeight
height of X, defaults to 0.5 fontsize.
Definition KoSvgText.h:334
qint32 alphabeticBaseline
location of alphabetic baseline from origin.
Definition KoSvgText.h:343
qint32 mathematicalBaseline
location of mathematical baseline from origin.
Definition KoSvgText.h:344
qint32 hangingBaseline
location of the hanging baseline used in north brahmic scripts.
Definition KoSvgText.h:354
@ BaselineAlphabetic
Baselines.
@ BaselineShift
The text properties handles.

References KoSvgText::FontMetrics::alphabeticBaseline, KoSvgText::FontMetrics::ascender, SvgTextCursor::Ascender, SvgTextCursor::BaselineAlphabetic, SvgTextCursor::BaselineCentral, SvgTextCursor::BaselineHanging, SvgTextCursor::BaselineIdeographic, SvgTextCursor::BaselineMathematical, SvgTextCursor::BaselineMiddle, SvgTextCursor::BaselineShift, KoSvgText::FontMetrics::descender, SvgTextCursor::Descender, KoSvgText::FontMetrics::hangingBaseline, KoSvgText::FontMetrics::ideographicCenterBaseline, KoSvgText::FontMetrics::ideographicUnderBaseline, SvgTextCursor::LineHeightBottom, SvgTextCursor::LineHeightTop, KoSvgText::FontMetrics::mathematicalBaseline, and KoSvgText::FontMetrics::xHeight.