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 834 of file SvgTextCursor.cpp.

834 {
835
836 return KisPaintingTweaks::luminosityCoarse(c) > 0.8? QColor(0, 0, 0, opacity) : QColor(255, 255, 255, opacity);
837}
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 1787 of file SvgTextCursor.cpp.

1787 {
1788 if (!lineHeight.isNormal) {
1789 if (lineHeight.isNumber) {
1790 return (lineHeight.value * (metrics.ascender-metrics.descender))-(metrics.ascender-metrics.descender);
1791 } else {
1792 return (lineHeight.length.value/scaleMetrics)-(metrics.ascender-metrics.descender);
1793 }
1794 }
1795 return metrics.lineGap;
1796}
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 1842 of file SvgTextCursor.cpp.

1842 {
1843 QTransform t = QTransform::fromTranslate(pos.x(), pos.y());
1844 t.rotate(rotateDeg);
1845 return t;
1846}

◆ 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 1798 of file SvgTextCursor.cpp.

1802 {
1803 QPointF offset = isHorizontal? QPointF(0, -(metric*scaleMetrics)): QPointF(metric*scaleMetrics, 0);
1804
1805 QPainterPath p = decor.value(handle);
1806
1807 const QPointF startPos = t.map(offset);
1808 const QPointF endPos = t.map(offset+advance);
1809 if (p.currentPosition() != startPos) {
1810 p.moveTo(startPos);
1811 }
1812 p.lineTo(endPos);
1813
1814 decor.insert(handle, p);
1815}
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 1817 of file SvgTextCursor.cpp.

1821 {
1822 QPointF p1(values.first(), 0);
1823 QPointF p2(values.last(), 0);
1824 Q_FOREACH(const int val, values) {
1825 if (val < p1.x()) {
1826 p1.setX(val);
1827 }
1828 if (val > p2.x()) {
1829 p2.setX(val);
1830 }
1831 }
1832 if (isHorizontal) {
1833 p1 = QPointF(p1.y(), -p1.x());
1834 p2 = QPointF(p2.y(), -p2.x());
1835 }
1836 p1 *= scaleMetrics;
1837 p2 *= scaleMetrics;
1838 path.moveTo(t.map(p1+advance));
1839 path.lineTo(t.map(p2+advance));
1840}
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 538 of file SvgTextCursor.cpp.

538 {
539 return QMap<SvgTextCursor::TypeSettingModeHandle, int> {
547 {SvgTextCursor::BaselineMiddle, isHorizontal? metrics.xHeight/2: metrics.ideographicCenterBaseline},
548 {SvgTextCursor::LineHeightTop, metrics.ascender+(lineGap/2)},
549 {SvgTextCursor::LineHeightBottom, metrics.descender-(lineGap/2)},
551 };
552}
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.