Krita Source Code Documentation
Loading...
Searching...
No Matches
KoCssStylePreset Class Reference

The KoCssStylePreset class. More...

#include <KoCssStylePreset.h>

+ Inheritance diagram for KoCssStylePreset:

Classes

struct  Private
 

Public Member Functions

QString afterText () const
 The text displayed after the sample, only relevant when in character mode.
 
Qt::Alignment alignSample () const
 
QString beforeText () const
 The text displayed before the sample. Only relevant when in Character mode.
 
KoResourceSP clone () const override
 
QString defaultFileExtension () const override
 
QString description () const
 The description associated with this style.
 
KoShapegenerateSampleShape () const
 generateSampleShape This generates the sample textshape from the properties and sample text(s).
 
 KoCssStylePreset (const KoCssStylePreset &rhs)
 
 KoCssStylePreset (const QString &filename)
 
bool loadFromDevice (QIODevice *dev, KisResourcesInterfaceSP resourcesInterface) override
 
KoCssStylePresetoperator= (const KoCssStylePreset &rhs)=delete
 
QSizeF paragraphSampleSize () const
 Returns the size of the shape which the paragraph is set as.
 
QString primaryFontFamily () const
 primaryFontFamily If a style uses a FontFamily, it may not look as expected when that font family is missing. Typically, we'd use linked resources for this, however, embedding fonts is really complex.
 
KoSvgTextProperties properties (int ppi=72, bool removeKraProps=false) const
 The actual text properties.
 
QPair< QString, QString > resourceType () const override
 
QString sampleSvg () const
 Returns the sample svg metadata. Use updateThumbnail to update it.
 
QString sampleText () const
 The sample text that is being styled by this preset.
 
bool saveToDevice (QIODevice *dev) const override
 
void setAfterText (const QString &text)
 set the after text. Call updateThumbnail to update the sample.
 
void setBeforeText (const QString &text)
 set the before text. Call updateThumbnail to update the sample.
 
void setDescription (const QString &desc)
 
void setParagraphSampleSize (const QSizeF size)
 Set the size of the shape the paragraph is set in.
 
void setProperties (const KoSvgTextProperties &properties)
 set the properties. Call updateThumbnail to update the sample.
 
void setSampleText (const QString &text)
 set the sample. Call updateThumbnail to update the sample.
 
void setStoredPPIResolution (const int ppi)
 
void setStyleType (const QString &type)
 
int storedPPIResolution () const
 
QString styleType () const
 Set the style type, type is either "paragraph" or "character".
 
void updateAlignSample ()
 
void updateThumbnail () override
 updateThumbnail updates the thumbnail for this resource. Reimplement if your thumbnail is something else than the image set with setImage.
 
 ~KoCssStylePreset ()
 
- Public Member Functions inherited from KoResource
bool active () const
 
void addMetaData (QString key, QVariant value)
 store the given key, value pair in the resource
 
virtual void clearSideLoadedResources ()
 
virtual QList< KoResourceLoadResultembeddedResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
QString filename () const
 
QImage image () const
 
bool isDirty () const
 
virtual bool isEphemeral () const
 
virtual bool isSerializable () const
 
 KoResource ()
 
 KoResource (const KoResource &rhs)
 
 KoResource (const QString &filename)
 
virtual QList< KoResourceLoadResultlinkedResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
bool load (KisResourcesInterfaceSP resourcesInterface)
 
QString md5Sum (bool generateIfEmpty=true) const
 
QMap< QString, QVariant > metadata () const
 get a map with all the metadata
 
virtual QString name () const
 
KoResourceoperator= (const KoResource &rhs)=delete
 
bool permanent () const
 
virtual QList< int > requiredCanvasResources () const
 
QList< KoResourceLoadResultrequiredResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
int resourceId () const
 
bool save ()
 
void setActive (bool active)
 
void setDirty (bool value)
 Mark the preset as modified but not saved.
 
void setFilename (const QString &filename)
 
void setImage (const QImage &image)
 
void setMD5Sum (const QString &md5sum)
 Set the md5sum of this resource. It must be in hex-encoded string format.
 
void setName (const QString &name)
 
void setPermanent (bool permanent)
 
void setResourceId (int id)
 
void setStorageLocation (const QString &location)
 
void setValid (bool valid)
 
void setVersion (int version)
 
virtual QList< KoResourceLoadResultsideLoadedResources (KisResourcesInterfaceSP globalResourcesInterface) const
 
KoResourceSignature signature () const
 
QString storageLocation () const
 
QList< KoResourceLoadResulttakeSideLoadedResources (KisResourcesInterfaceSP globalResourcesInterface)
 
virtual QImage thumbnail () const
 thumbnail the thumbnail image to use in resource selectors
 
virtual QString thumbnailPath () const
 thumbnailPath returns the path to a separate thumbnail image, outside the actual resource file itself. If the path is relative, it is supposed start in the same location as the resource itself. If it's absolute, that is, it starts with "/", it is from the root of the storage.
 
bool valid () const
 
int version () const
 Get the version of the resource.
 
virtual ~KoResource ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Private Attributes

QScopedPointer< Privated
 

Additional Inherited Members

- Public Attributes inherited from KoResource
bool active {true}
 
QString filename
 
QImage image
 
QString md5sum
 
QMap< QString, QVariant > metadata
 
bool modified {false}
 
QString name
 
bool permanent {false}
 
int resourceId {-1}
 
QString storageLocation
 
bool valid {false}
 
int version {-1}
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Detailed Description

The KoCssStylePreset class.

This is a Resource that represents style data. Internally, the style data is stored inside a text shape, allowing us to showcase the style data in context.

Definition at line 23 of file KoCssStylePreset.h.

Constructor & Destructor Documentation

◆ KoCssStylePreset() [1/2]

KoCssStylePreset::KoCssStylePreset ( const QString & filename)

Definition at line 50 of file KoCssStylePreset.cpp.

52 , d(new Private())
53{
54 setName(name().replace("_", " "));
55 if (name().endsWith(defaultFileExtension())) {
56 const QFileInfo f(name());
57 setName(f.completeBaseName());
58 }
59}
QString defaultFileExtension() const override
QScopedPointer< Private > d
QAction * replace(const QObject *recvr, const char *slot, QObject *parent)
void setName(const QString &name)
QString filename
QString name

References defaultFileExtension(), KoResource::name, and KoResource::setName().

◆ KoCssStylePreset() [2/2]

KoCssStylePreset::KoCssStylePreset ( const KoCssStylePreset & rhs)

Definition at line 61 of file KoCssStylePreset.cpp.

62 : KoResource(rhs)
63 , d(new Private())
64{
65 d->properties = rhs.d->properties;
66 d->sample = rhs.d->sample;
67 d->afterText = rhs.d->afterText;
68 d->beforeText = rhs.d->beforeText;
71 setValid(true);
72}
void setDescription(const QString &desc)
void updateThumbnail() override
updateThumbnail updates the thumbnail for this resource. Reimplement if your thumbnail is something e...
QString description() const
The description associated with this style.
void setValid(bool valid)

References d, description(), setDescription(), KoResource::setValid(), and updateThumbnail().

◆ ~KoCssStylePreset()

KoCssStylePreset::~KoCssStylePreset ( )

Definition at line 74 of file KoCssStylePreset.cpp.

75{
76
77}

Member Function Documentation

◆ afterText()

QString KoCssStylePreset::afterText ( ) const

The text displayed after the sample, only relevant when in character mode.

Definition at line 361 of file KoCssStylePreset.cpp.

362{
363 return d->afterText;
364}

References d.

◆ alignSample()

Qt::Alignment KoCssStylePreset::alignSample ( ) const

Determines the preferred sample alignment based on the text properties. It's set up so that the alignment anchor of the text is shown.

Definition at line 238 of file KoCssStylePreset.cpp.

239{
240 QMap<QString, QVariant> m = metadata();
241 QVariant v = m.value(SAMPLE_ALIGN, static_cast<Qt::Alignment::Int>(Qt::AlignHCenter | Qt::AlignVCenter));
242 return static_cast<Qt::Alignment>(v.value<Qt::Alignment::Int>());
243}
qreal v
const QString SAMPLE_ALIGN
QMap< QString, QVariant > metadata

References KoResource::metadata, SAMPLE_ALIGN, and v.

◆ beforeText()

QString KoCssStylePreset::beforeText ( ) const

The text displayed before the sample. Only relevant when in Character mode.

Definition at line 349 of file KoCssStylePreset.cpp.

350{
351 return d->beforeText;
352}

References d.

◆ clone()

KoResourceSP KoCssStylePreset::clone ( ) const
overridevirtual

Implements KoResource.

Definition at line 402 of file KoCssStylePreset.cpp.

403{
404 return KoResourceSP(new KoCssStylePreset(*this));
405}
KoCssStylePreset(const QString &filename)
QSharedPointer< KoResource > KoResourceSP

References KoCssStylePreset().

◆ defaultFileExtension()

QString KoCssStylePreset::defaultFileExtension ( ) const
overridevirtual
Returns
the default file extension which should be used when saving the resource

Reimplemented from KoResource.

Definition at line 494 of file KoCssStylePreset.cpp.

495{
496 return ".svg";
497}

◆ description()

QString KoCssStylePreset::description ( ) const

The description associated with this style.

Definition at line 114 of file KoCssStylePreset.cpp.

115{
116 QMap<QString, QVariant> m = metadata();
117 return m[DESCRIPTION].toString();
118}
const QString DESCRIPTION

References DESCRIPTION, and KoResource::metadata.

◆ generateSampleShape()

KoShape * KoCssStylePreset::generateSampleShape ( ) const

generateSampleShape This generates the sample textshape from the properties and sample text(s).

For character the sample always needs to be set to be a child to ensure that the character property doesn't include the default props.

Definition at line 154 of file KoCssStylePreset.cpp.

155{
156 KoSvgTextProperties modifiedProps = d->properties;
157 const QString sample = d->sample;
158 const QString after = d->afterText;
159 const QString before = d->beforeText;
160
161 QScopedPointer<KoSvgTextShape> sampleText(new KoSvgTextShape());
162 sampleText->insertText(0, sample.isEmpty()? name().isEmpty()? SAMPLE_PLACEHOLDER.toString(): name(): sample);
163 const QString type = styleType().isEmpty()? STYLE_TYPE_CHARACTER: styleType();
164
165 bool removeParagraph = type == STYLE_TYPE_CHARACTER;
166
167 // Remove properties that cannot be edited.
168 Q_FOREACH(KoSvgTextProperties::PropertyId p, modifiedProps.properties()) {
170 if (removeParagraph) {
171 modifiedProps.removeProperty(p);
172 }
173 } else {
174 if (!removeParagraph) {
175 modifiedProps.removeProperty(p);
176 }
177 }
178
179 }
180 // This one is added after removing, because otherwise, the type is removed...
182 if (storedPPIResolution() > 0) {
184 } else {
186 }
187 // Always remove inline size, it is shape-specific.
189 // Remove fill and stroke for now as we have no widgets for them.
196
197 sampleText->setPropertiesAtPos(-1, modifiedProps);
198
199
200 if (type == STYLE_TYPE_PARAGRAPH) {
201 const QSizeF sampleSize = d->paragraphSampleSize;
202 // For paragraph we'll add a shape, as those will allow wrapping,
203 // without being part of the properties like inline-size is.
204 KoPathShape *inlineShape = new KoPathShape();
205 inlineShape->moveTo(QPointF(0, 0));
206 inlineShape->lineTo(QPointF(sampleSize.width(), 0));
207 inlineShape->lineTo(QPointF(sampleSize.width(), sampleSize.height()));
208 inlineShape->lineTo(QPointF(0, sampleSize.height()));
209 inlineShape->lineTo(QPointF(0, 0));
210 inlineShape->close();
211 sampleText->setShapesInside({inlineShape});
212 sampleText->relayout();
213
214 return sampleText.take();
215 } else {
218 QScopedPointer<KoSvgTextShape> newShape(new KoSvgTextShape());
220 // Set whitespace rule to pre-wrap.
223 newShape->setPropertiesAtPos(-1, paraProps);
224 if (!after.isEmpty()) {
225 newShape->insertText(0, after);
226 }
227 if (!before.isEmpty()) {
228 newShape->insertText(0, before);
229 }
230
231 newShape->insertRichText(newShape->posForIndex(before.size()), sampleText.data());
232 return newShape.take();
233 }
234
235 return nullptr;
236}
const Params2D p
const QString STYLE_TYPE_PARAGRAPH
const QString STYLE_TYPE_CHARACTER
const KLocalizedString SAMPLE_PLACEHOLDER
QString sampleText() const
The sample text that is being styled by this preset.
int storedPPIResolution() const
QString styleType() const
Set the style type, type is either "paragraph" or "character".
The position of a path point within a path shape.
Definition KoPathShape.h:63
KoPathPoint * lineTo(const QPointF &p)
Adds a new line segment.
void close()
Closes the current subpath.
KoPathPoint * moveTo(const QPointF &p)
Starts a new Subpath.
@ InlineSizeId
KoSvgText::AutoValue.
@ PaintOrder
QVector<KoShape::PaintOrder>
@ KraTextStyleResolution
Int, used to scale style presets to be pixel-relative.
@ Opacity
Double, SVG shape opacity.
@ KraTextStyleType
string, used to identify the style preset type (character or paragraph).
@ TextOrientationId
KoSvgText::TextOrientation.
@ TextCollapseId
KoSvgText::TextSpaceCollapse.
@ StrokeId
KoSvgText::StrokeProperty.
@ FillId
KoSvgText::BackgroundProperty.
@ TextWrapId
KoSvgText::TextWrap.
@ Visibility
Bool, CSS visibility.
void removeProperty(PropertyId id)
QList< PropertyId > properties() const
static bool propertyIsBlockOnly(KoSvgTextProperties::PropertyId id)
static const KoSvgTextProperties & defaultProperties()
void setProperty(PropertyId id, const QVariant &value)
@ Preserve
Do not collapse any space.
Definition KoSvgText.h:99

References KoPathShape::close(), d, KoSvgTextProperties::defaultProperties(), KoSvgTextProperties::FillId, KoSvgTextProperties::InlineSizeId, KoSvgTextProperties::KraTextStyleResolution, KoSvgTextProperties::KraTextStyleType, KoPathShape::lineTo(), KoPathShape::moveTo(), KoResource::name, KoSvgTextProperties::Opacity, p, KoSvgTextProperties::PaintOrder, KoSvgText::Preserve, KoSvgTextProperties::properties(), KoSvgTextProperties::propertyIsBlockOnly(), KoSvgTextProperties::removeProperty(), SAMPLE_PLACEHOLDER, sampleText(), KoSvgTextProperties::setProperty(), storedPPIResolution(), KoSvgTextProperties::StrokeId, STYLE_TYPE_CHARACTER, STYLE_TYPE_PARAGRAPH, styleType(), KoSvgTextProperties::TextCollapseId, KoSvgTextProperties::TextOrientationId, KoSvgTextProperties::TextWrapId, KoSvgTextProperties::Visibility, and KoSvgText::Wrap.

◆ loadFromDevice()

bool KoCssStylePreset::loadFromDevice ( QIODevice * dev,
KisResourcesInterfaceSP resourcesInterface )
overridevirtual

Implements KoResource.

Definition at line 407 of file KoCssStylePreset.cpp.

408{
409 Q_UNUSED(resourcesInterface)
410 if (!dev->isOpen()) dev->open(QIODevice::ReadOnly);
411 QString errorMsg;
412 int errorLine = 0;
413 int errorColumn = 0;
414 QDomDocument xmlDocument = SvgParser::createDocumentFromSvg(dev, &errorMsg, &errorLine, &errorColumn);
415 if (xmlDocument.isNull()) {
416
417 errorFlake << "Parsing error in " << filename() << "! Aborting!" << Qt::endl
418 << " In line: " << errorLine << ", column: " << errorColumn << Qt::endl
419 << " Error message: " << errorMsg << Qt::endl;
420 errorFlake << "Parsing error in the main document at line" << errorLine
421 << ", column" << errorColumn << Qt::endl
422 << "Error message: " << errorMsg;
423
424 return false;
425 }
426
428 SvgParser parser(&manager);
429 parser.setResolution(QRectF(0,0,100,100), 72); // initialize with default values
430 parser.setResolveTextPropertiesForTopLevel(false);
431 QSizeF fragmentSize;
432
433 QList<KoShape*> shapes = parser.parseSvg(xmlDocument.documentElement(), &fragmentSize);
434
435 Q_FOREACH(KoShape *shape, shapes) {
436 KoSvgTextShape *textShape = dynamic_cast<KoSvgTextShape*>(shape);
437 if (textShape) {
438 setName(textShape->additionalAttribute(TITLE));
442 if (node.properties()) {
443 KoSvgTextProperties props = *(node.properties());
447 }
449 QStringList fonts = props.property(KoSvgTextProperties::FontFamiliesId).toStringList();
450 addMetaData(PRIMARY_FONT_FAMILY, fonts.value(0));
451 }
452 setProperties(props);
453
454 QPair<int, int> pos = textShape->findRangeForNodeIndex(node);
455 pos.first = textShape->indexForPos(pos.first);
456 pos.second = textShape->indexForPos(pos.second);
457
458 d->sample = textShape->plainText().mid(pos.first, pos.second-pos.first);
459 d->beforeText = textShape->plainText().mid(0, pos.first);
460 d->afterText = textShape->plainText().mid(pos.second);
461
462 if (!textShape->shapesInside().isEmpty() && styleType == STYLE_TYPE_PARAGRAPH) {
463 d->paragraphSampleSize = textShape->shapesInside().first()->size();
464 }
465
466 }
467
469
471 setValid(true);
472 return true;
473 }
474 }
475
476
477 return false;
478}
#define errorFlake
Definition FlakeDebug.h:17
const QString TITLE
const QString DESC
const QString STYLE_TYPE
const QString PRIMARY_FONT_FAMILY
const QString STORED_PPI
void setProperties(const KoSvgTextProperties &properties)
set the properties. Call updateThumbnail to update the sample.
QString additionalAttribute(const QString &name) const
Definition KoShape.cpp:1092
The KoSvgTextNodeIndex class.
KoSvgTextProperties * properties()
properties The properties for this node as a pointer.
QVariant property(PropertyId id, const QVariant &defaultValue=QVariant()) const
bool hasProperty(PropertyId id) const
QPair< int, int > findRangeForNodeIndex(const KoSvgTextNodeIndex &node) const
findRangeForNodeIndex Find the start and end cursor position for a given nodeIndex.
KoSvgTextNodeIndex findNodeIndexForPropertyId(KoSvgTextProperties::PropertyId propertyId)
findNodeIndexForPropertyId
int indexForPos(int pos) const
indexForPos get the string index for a given cursor position.
QList< KoShape * > shapesInside
static QDomDocument createDocumentFromSvg(QIODevice *device, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0)
void addMetaData(QString key, QVariant value)
store the given key, value pair in the resource

References KoShape::additionalAttribute(), KoResource::addMetaData(), SvgParser::createDocumentFromSvg(), d, DESC, DESCRIPTION, errorFlake, KoResource::filename, KoSvgTextShape::findNodeIndexForPropertyId(), KoSvgTextShape::findRangeForNodeIndex(), KoSvgTextProperties::FontFamiliesId, KoSvgTextProperties::hasProperty(), KoSvgTextShape::indexForPos(), KoSvgTextProperties::KraTextStyleResolution, KoSvgTextProperties::KraTextStyleType, SvgParser::parseSvg(), KoSvgTextShape::plainText, PRIMARY_FONT_FAMILY, KoSvgTextNodeIndex::properties(), KoSvgTextProperties::property(), KoResource::setName(), setProperties(), SvgParser::setResolution(), SvgParser::setResolveTextPropertiesForTopLevel(), KoResource::setValid(), KoSvgTextShape::shapesInside, STORED_PPI, STYLE_TYPE, STYLE_TYPE_PARAGRAPH, styleType(), TITLE, and updateThumbnail().

◆ operator=()

KoCssStylePreset & KoCssStylePreset::operator= ( const KoCssStylePreset & rhs)
delete

◆ paragraphSampleSize()

QSizeF KoCssStylePreset::paragraphSampleSize ( ) const

Returns the size of the shape which the paragraph is set as.

Definition at line 379 of file KoCssStylePreset.cpp.

380{
381 return d->paragraphSampleSize;
382}

References d.

◆ primaryFontFamily()

QString KoCssStylePreset::primaryFontFamily ( ) const

primaryFontFamily If a style uses a FontFamily, it may not look as expected when that font family is missing. Typically, we'd use linked resources for this, however, embedding fonts is really complex.

Returns
the primary font family for this style, will return empty if the style does not require a font family.

Definition at line 245 of file KoCssStylePreset.cpp.

246{
247 QMap<QString, QVariant> m = metadata();
248 return m.value(PRIMARY_FONT_FAMILY).toString();
249}

References KoResource::metadata, and PRIMARY_FONT_FAMILY.

◆ properties()

KoSvgTextProperties KoCssStylePreset::properties ( int ppi = 72,
bool removeKraProps = false ) const

The actual text properties.

Definition at line 79 of file KoCssStylePreset.cpp.

80{
82 const int storedPPI = storedPPIResolution();
83 if (storedPPI > 0 && ppi > 0) {
84 const double scale = double(storedPPI)/double(ppi);
85 props.scaleAbsoluteValues(scale, scale);
86 }
87 if (removeKraProps) {
91 }
92 // remove fill and stroke for now.
99 return props;
100}
@ KraTextVersionId
Int, used for handling incorrectly saved files.
void scaleAbsoluteValues(const double scaleInline=1.0, const double scaleBlock=1.0)
scaleAbsoluteValues This scales all absolute values stored in these text properties....

References d, KoSvgTextProperties::FillId, KoSvgTextProperties::KraTextStyleResolution, KoSvgTextProperties::KraTextStyleType, KoSvgTextProperties::KraTextVersionId, KoSvgTextProperties::Opacity, KoSvgTextProperties::PaintOrder, KoSvgTextProperties::properties(), KoSvgTextProperties::removeProperty(), KoSvgTextProperties::scaleAbsoluteValues(), storedPPIResolution(), KoSvgTextProperties::StrokeId, KoSvgTextProperties::TextOrientationId, and KoSvgTextProperties::Visibility.

◆ resourceType()

QPair< QString, QString > KoCssStylePreset::resourceType ( ) const
overridevirtual
Returns
the resource type

Implements KoResource.

Definition at line 530 of file KoCssStylePreset.cpp.

531{
532 return QPair<QString, QString>(ResourceType::CssStyles, "");
533}
const QString CssStyles

References ResourceType::CssStyles.

◆ sampleSvg()

QString KoCssStylePreset::sampleSvg ( ) const

Returns the sample svg metadata. Use updateThumbnail to update it.

Definition at line 373 of file KoCssStylePreset.cpp.

374{
375 QMap<QString, QVariant> m = metadata();
376 return m[SAMPLE_SVG].toString();
377}
const QString SAMPLE_SVG

References KoResource::metadata, and SAMPLE_SVG.

◆ sampleText()

QString KoCssStylePreset::sampleText ( ) const

The sample text that is being styled by this preset.

Definition at line 142 of file KoCssStylePreset.cpp.

143{
144 return d->sample;
145}

References d.

◆ saveToDevice()

bool KoCssStylePreset::saveToDevice ( QIODevice * dev) const
overridevirtual

Reimplemented from KoResource.

Definition at line 480 of file KoCssStylePreset.cpp.

481{
482 QScopedPointer<KoShape> shape(generateSampleShape());
483 if (!shape) return false;
484
485 QMap<QString, QVariant> m = metadata();
486 shape->setAdditionalAttribute(DESC, m[DESCRIPTION].toString());
487 shape->setAdditionalAttribute(TITLE, name());
488
489 const QRectF boundingRect = shape->boundingRect();
490 SvgWriter writer({shape.take()});
491 return writer.save(*dev, boundingRect.size());
492}
KoShape * generateSampleShape() const
generateSampleShape This generates the sample textshape from the properties and sample text(s).
Implements exporting shapes to SVG.
Definition SvgWriter.h:33
bool save(QIODevice &outputDevice, const QSizeF &pageSize)
Writes svg to specified output device.
Definition SvgWriter.cpp:82
QString toString(const QString &value)

References DESC, DESCRIPTION, generateSampleShape(), KoResource::metadata, KoResource::name, SvgWriter::save(), and TITLE.

◆ setAfterText()

void KoCssStylePreset::setAfterText ( const QString & text)

set the after text. Call updateThumbnail to update the sample.

Definition at line 366 of file KoCssStylePreset.cpp.

367{
368 if (d->afterText == text) return;
369 d->afterText = text;
370 setDirty(true);
371}
void setDirty(bool value)
Mark the preset as modified but not saved.

References d, and KoResource::setDirty().

◆ setBeforeText()

void KoCssStylePreset::setBeforeText ( const QString & text)

set the before text. Call updateThumbnail to update the sample.

Definition at line 354 of file KoCssStylePreset.cpp.

355{
356 if (d->beforeText == text) return;
357 d->beforeText = text;
358 setDirty(true);
359}

References d, and KoResource::setDirty().

◆ setDescription()

void KoCssStylePreset::setDescription ( const QString & desc)

Definition at line 120 of file KoCssStylePreset.cpp.

121{
122 QMap<QString, QVariant> m = metadata();
123 if (m[DESCRIPTION].toString() == desc) return;
125 setDirty(true);
126}

References KoResource::addMetaData(), DESCRIPTION, KoResource::metadata, and KoResource::setDirty().

◆ setParagraphSampleSize()

void KoCssStylePreset::setParagraphSampleSize ( const QSizeF size)

Set the size of the shape the paragraph is set in.

Definition at line 384 of file KoCssStylePreset.cpp.

385{
386 d->paragraphSampleSize = size;
387 setDirty(true);
388}
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References d, and KoResource::setDirty().

◆ setProperties()

void KoCssStylePreset::setProperties ( const KoSvgTextProperties & properties)

set the properties. Call updateThumbnail to update the sample.

Definition at line 102 of file KoCssStylePreset.cpp.

103{
104 if (d->properties == properties)
105 return;
106 d->properties = properties;
107 QStringList fonts = d->properties.property(KoSvgTextProperties::FontFamiliesId).toStringList();
108 //TODO: Apparantly we cannot remove metadata, only set it to nothing...
109 addMetaData(PRIMARY_FONT_FAMILY, fonts.value(0));
110 setValid(true);
111 setDirty(true);
112}
KoSvgTextProperties properties(int ppi=72, bool removeKraProps=false) const
The actual text properties.

References KoResource::addMetaData(), d, KoSvgTextProperties::FontFamiliesId, PRIMARY_FONT_FAMILY, KoSvgTextProperties::properties(), properties(), KoResource::setDirty(), and KoResource::setValid().

◆ setSampleText()

void KoCssStylePreset::setSampleText ( const QString & text)

set the sample. Call updateThumbnail to update the sample.

Definition at line 147 of file KoCssStylePreset.cpp.

148{
149 if (d->sample == text) return;
150 d->sample = text;
151 setDirty(true);
152}

References d, and KoResource::setDirty().

◆ setStoredPPIResolution()

void KoCssStylePreset::setStoredPPIResolution ( const int ppi)

Definition at line 396 of file KoCssStylePreset.cpp.

397{
399}

References KoResource::addMetaData(), and STORED_PPI.

◆ setStyleType()

void KoCssStylePreset::setStyleType ( const QString & type)

Definition at line 134 of file KoCssStylePreset.cpp.

135{
136 QMap<QString, QVariant> m = metadata();
137 if (m[STYLE_TYPE].toString() == type) return;
138 addMetaData(STYLE_TYPE, type);
139 setDirty(true);
140}

References KoResource::addMetaData(), KoResource::metadata, KoResource::setDirty(), and STYLE_TYPE.

◆ storedPPIResolution()

int KoCssStylePreset::storedPPIResolution ( ) const

The resolution that this style is tied to. if this is above 0, then the properties absolute values are scaled by to fit the document resolution. This allows for pixel-relative styles to be created.

Definition at line 390 of file KoCssStylePreset.cpp.

391{
392 QMap<QString, QVariant> m = metadata();
393 return m.value(STORED_PPI, 0).toInt();
394}

References KoResource::metadata, and STORED_PPI.

◆ styleType()

QString KoCssStylePreset::styleType ( ) const

Set the style type, type is either "paragraph" or "character".

Definition at line 128 of file KoCssStylePreset.cpp.

129{
130 QMap<QString, QVariant> m = metadata();
131 return m.value(STYLE_TYPE, STYLE_TYPE_PARAGRAPH).toString();
132}

References KoResource::metadata, STYLE_TYPE, and STYLE_TYPE_PARAGRAPH.

◆ updateAlignSample()

void KoCssStylePreset::updateAlignSample ( )

Definition at line 251 of file KoCssStylePreset.cpp.

252{
253 Qt::AlignmentFlag hComponent = Qt::AlignHCenter;
254 Qt::AlignmentFlag vComponent = Qt::AlignVCenter;
255
256 const KoSvgTextProperties props = d->properties;
257 const QString type = styleType().isEmpty()? props.property(KoSvgTextProperties::KraTextStyleType).toString(): styleType();
258 if (type == STYLE_TYPE_PARAGRAPH) {
261 const bool textAlignLast = props.hasProperty(KoSvgTextProperties::TextAlignLastId);
262 if (props.hasProperty(KoSvgTextProperties::TextAlignAllId) || textAlignLast) {
264 : KoSvgText::TextAlign(props.property(KoSvgTextProperties::TextAlignAllId).toInt());
265
266 if (mode == KoSvgText::HorizontalTB) {
267 vComponent = Qt::AlignTop;
268 if (align == KoSvgText::AlignStart || align == KoSvgText::AlignLastAuto) {
270 hComponent = Qt::AlignLeft;
271 } else {
272 hComponent = Qt::AlignRight;
273 }
274 } else if (align == KoSvgText::AlignEnd) {
276 hComponent = Qt::AlignRight;
277 } else {
278 hComponent = Qt::AlignLeft;
279 }
280 } else if (align == KoSvgText::AlignLeft) {
281 hComponent = Qt::AlignLeft;
282 } else if (align == KoSvgText::AlignRight) {
283 hComponent = Qt::AlignRight;
284 }
285 } else {
286 hComponent = mode == KoSvgText::VerticalRL? Qt::AlignRight: Qt::AlignLeft;
287 if (align == KoSvgText::AlignStart || align == KoSvgText::AlignLastAuto) {
289 vComponent = Qt::AlignTop;
290 } else {
291 vComponent = Qt::AlignBottom;
292 }
293 } else if (align == KoSvgText::AlignEnd) {
295 vComponent = Qt::AlignBottom;
296 } else {
297 vComponent = Qt::AlignTop;
298 }
299 } else if (align == KoSvgText::AlignLeft) {
300 vComponent = Qt::AlignTop;
301 } else if (align == KoSvgText::AlignRight) {
302 vComponent = Qt::AlignBottom;
303 }
304 }
305 } else {
307
308 if (mode == KoSvgText::HorizontalTB) {
309 vComponent = Qt::AlignTop;
310 if (anchor == KoSvgText::AnchorStart) {
312 hComponent = Qt::AlignLeft;
313 } else {
314 hComponent = Qt::AlignRight;
315 }
316 } else if (anchor == KoSvgText::AnchorEnd) {
318 hComponent = Qt::AlignRight;
319 } else {
320 hComponent = Qt::AlignLeft;
321 }
322 } else {
323 hComponent = Qt::AlignHCenter;
324 }
325 } else {
326 hComponent = mode == KoSvgText::VerticalRL? Qt::AlignRight: Qt::AlignLeft;
327 if (anchor == KoSvgText::AnchorStart) {
329 vComponent = Qt::AlignTop;
330 } else {
331 vComponent = Qt::AlignBottom;
332 }
333 } else if (anchor == KoSvgText::AnchorEnd) {
335 vComponent = Qt::AlignBottom;
336 } else {
337 vComponent = Qt::AlignTop;
338 }
339 } else {
340 vComponent = Qt::AlignVCenter;
341 }
342 }
343 }
344 }
345
346 addMetaData(SAMPLE_ALIGN, static_cast<Qt::Alignment::Int>(hComponent | vComponent));
347}
@ TextAnchorId
KoSvgText::TextAnchor.
@ TextAlignAllId
KoSvgText::TextAlign.
@ WritingModeId
KoSvgText::WritingMode.
@ DirectionId
KoSvgText::Direction.
@ TextAlignLastId
KoSvgText::TextAlign.
QVariant propertyOrDefault(PropertyId id) const
int toInt(const QString &str, bool *ok=nullptr)
@ AlignLastAuto
Definition KoSvgText.h:163
TextAnchor
Where the text is anchored for SVG 1.1 text and 'inline-size'.
Definition KoSvgText.h:79
@ AnchorEnd
Anchor right for LTR, left for RTL.
Definition KoSvgText.h:82
@ AnchorStart
Anchor left for LTR, right for RTL.
Definition KoSvgText.h:80
Direction
Base direction used by Bidi algorithm.
Definition KoSvgText.h:48
@ DirectionLeftToRight
Definition KoSvgText.h:49
@ HorizontalTB
Definition KoSvgText.h:38

References KoResource::addMetaData(), KoSvgText::AlignEnd, KoSvgText::AlignLastAuto, KoSvgText::AlignLeft, KoSvgText::AlignRight, KoSvgText::AlignStart, KoSvgText::AnchorEnd, KoSvgText::AnchorStart, d, KoSvgTextProperties::DirectionId, KoSvgText::DirectionLeftToRight, KoSvgTextProperties::hasProperty(), KoSvgText::HorizontalTB, KoSvgTextProperties::KraTextStyleType, KoSvgTextProperties::properties(), KoSvgTextProperties::property(), KoSvgTextProperties::propertyOrDefault(), SAMPLE_ALIGN, STYLE_TYPE_PARAGRAPH, styleType(), KoSvgTextProperties::TextAlignAllId, KoSvgTextProperties::TextAlignLastId, KoSvgTextProperties::TextAnchorId, KoSvgText::VerticalRL, and KoSvgTextProperties::WritingModeId.

◆ updateThumbnail()

void KoCssStylePreset::updateThumbnail ( )
overridevirtual

updateThumbnail updates the thumbnail for this resource. Reimplement if your thumbnail is something else than the image set with setImage.

generate SVG sample.

Reimplemented from KoResource.

Definition at line 510 of file KoCssStylePreset.cpp.

511{
512 QScopedPointer<KoSvgTextShape> shape (dynamic_cast<KoSvgTextShape*>(generateSampleShape()));
513 if (!shape) return;
514 QImage img(256,
515 256,
516 QImage::Format_ARGB32);
517 img.fill(Qt::white);
518
519 KoShapePainter painter;
520 painter.setShapes({shape.data()});
521 painter.paint(img);
522
524 addMetaData(SAMPLE_SVG, generateSVG(shape.data()));
526
527 setImage(img);
528}
QString generateSVG(const KoSvgTextShape *shape)
void setShapes(const QList< KoShape * > &shapes)
void paint(QPainter &painter)
void setImage(const QImage &image)

References KoResource::addMetaData(), generateSampleShape(), generateSVG(), KoShapePainter::paint(), SAMPLE_SVG, KoResource::setImage(), KoShapePainter::setShapes(), and updateAlignSample().

Member Data Documentation

◆ d

QScopedPointer<Private> KoCssStylePreset::d
private

Definition at line 113 of file KoCssStylePreset.h.


The documentation for this class was generated from the following files: