void Text::layout1() { if (styled() && !_editMode) SimpleText::layout(); else { _doc->setDefaultFont(textStyle().font(spatium())); qreal w = -1.0; QPointF o(textStyle().offset(spatium())); if (parent() && layoutToParentWidth()) { Element* e = parent(); w = e->width(); if (e->type() == HBOX || e->type() == VBOX || e->type() == TBOX) { Box* b = static_cast<Box*>(e); w -= ((b->leftMargin() + b->rightMargin()) * MScore::DPMM); } } QTextOption to = _doc->defaultTextOption(); to.setUseDesignMetrics(true); to.setWrapMode(w <= 0.0 ? QTextOption::NoWrap : QTextOption::WrapAtWordBoundaryOrAnywhere); _doc->setDefaultTextOption(to); if (w <= 0.0) w = _doc->idealWidth(); _doc->setTextWidth(w); QSizeF size(_doc->size()); if (align() & ALIGN_BOTTOM) o.ry() -= size.height(); else if (align() & ALIGN_VCENTER) o.ry() -= (size.height() * .5); else if (align() & ALIGN_BASELINE) o.ry() -= baseLine(); if (align() & ALIGN_RIGHT) o.rx() -= size.width(); else if (align() & ALIGN_HCENTER) o.rx() -= (size.width() * .5); setbbox(QRectF(QPointF(0.0, 0.0), size)); _doc->setModified(false); setPos(o); } if (parent()) { Element* e = parent(); qreal w, h, xo, yo; if (layoutToParentWidth()) { if (e->type() == HBOX || e->type() == VBOX || e->type() == TBOX) { // consider inner margins of frame Box* b = static_cast<Box*>(e); xo = b->leftMargin() * MScore::DPMM; yo = b->topMargin() * MScore::DPMM; w = b->width() - xo - b->rightMargin() * MScore::DPMM; h = b->height() - yo - b->bottomMargin() * MScore::DPMM; } else { w = e->width(); h = e->height(); xo = 0.0; yo = 0.0; } QPointF ro(_textStyle.reloff() * .01); rxpos() += xo + ro.x() * w; rypos() += yo + ro.y() * h; } if (e->type() == SEGMENT) { Segment* s = static_cast<Segment*>(e); rypos() += s->measure()->system()->staff(staffIdx())->y(); } } if (hasFrame()) layoutFrame(); }
int ZLTextView::ViewStyle::elementHeight(const ZLTextElement &element) const { switch (element.kind()) { case ZLTextElement::WORD_ELEMENT: if (myWordHeight == -1) { myWordHeight = context().stringHeight() * textStyle()->lineSpacePercent() / 100 + textStyle()->verticalShift(); } return myWordHeight; case ZLTextElement::IMAGE_ELEMENT: return context().imageHeight(((const ZLTextImageElement&)element).image()) + std::max(context().stringHeight() * (textStyle()->lineSpacePercent() - 100) / 100, 3); case ZLTextElement::BEFORE_PARAGRAPH_ELEMENT: return - textStyle()->spaceAfter(); case ZLTextElement::AFTER_PARAGRAPH_ELEMENT: return - textStyle()->spaceBefore(); case ZLTextElement::EMPTY_LINE_ELEMENT: return context().stringHeight(); case ZLTextElement::INDENT_ELEMENT: case ZLTextElement::HSPACE_ELEMENT: case ZLTextElement::NB_HSPACE_ELEMENT: case ZLTextElement::FORCED_CONTROL_ELEMENT: case ZLTextElement::CONTROL_ELEMENT: case ZLTextElement::FIXED_HSPACE_ELEMENT: return 0; } return 0; }
void Text::setUnstyledText(const QString& s) { Align align = textStyle().align(); _doc->clear(); QTextCursor c(_doc); c.setVisualNavigation(true); c.movePosition(QTextCursor::Start); Qt::Alignment a; if (align & ALIGN_HCENTER) a = Qt::AlignHCenter; else if (align & ALIGN_RIGHT) a = Qt::AlignRight; else a = Qt::AlignLeft; QTextBlockFormat bf = c.blockFormat(); bf.setAlignment(a); c.setBlockFormat(bf); QTextCharFormat tf = c.charFormat(); tf.setFont(textStyle().font(spatium())); c.setBlockCharFormat(tf); c.insertText(s); textChanged(); }
void Text::layout() { if (styled() && !_editMode) { SimpleText::layout(); } else { _doc->setDefaultFont(textStyle().font(spatium())); qreal w = -1.0; qreal x = 0.0; qreal y = 0.0; if (parent() && layoutToParentWidth()) { w = parent()->width(); if (parent()->type() == HBOX || parent()->type() == VBOX || parent()->type() == TBOX) { Box* box = static_cast<Box*>(parent()); x += box->leftMargin() * MScore::DPMM; y += box->topMargin() * MScore::DPMM; w = box->width() - ((box->leftMargin() + box->rightMargin()) * MScore::DPMM); } } QTextOption to = _doc->defaultTextOption(); to.setUseDesignMetrics(true); to.setWrapMode(w <= 0.0 ? QTextOption::NoWrap : QTextOption::WrapAtWordBoundaryOrAnywhere); _doc->setDefaultTextOption(to); if (w < 0.0) w = _doc->idealWidth(); _doc->setTextWidth(w); setbbox(QRectF(QPointF(0.0, 0.0), _doc->size())); if (hasFrame()) layoutFrame(); _doc->setModified(false); textStyle().layout(this); // process alignment #if 0 // TODO TEXT_STYLE_TEXTLINE if ((textStyle().align() & ALIGN_VCENTER) && (textStyle() == TEXT_STYLE_TEXTLINE)) { // special case: vertically centered text with TextLine needs to // take into account the line width TextLineSegment* tls = static_cast<TextLineSegment*>(parent()); TextLine* tl = tls->textLine(); if (tl) { qreal textlineLineWidth = point(tl->lineWidth()); rypos() -= textlineLineWidth * .5; } } #endif rxpos() += x; rypos() += y; } if (parent() && parent()->type() == SEGMENT) { Segment* s = static_cast<Segment*>(parent()); rypos() += s ? s->measure()->system()->staff(staffIdx())->y() : 0.0; } adjustReadPos(); }
void Marker::layout() { setPos(textStyle().offset(spatium())); Text::layout1(); // although normally laid out to parent (measure) width, // force to center over barline if left-aligned if (layoutToParentWidth() && !(textStyle().align() & (AlignmentFlags::RIGHT|AlignmentFlags::HCENTER))) rxpos() -= width() * 0.5; adjustReadPos(); }
void SimpleText::drawFrame(QPainter* painter) const { if (!textStyle().hasFrame()) return; QColor color(frameColor()); if (!visible()) color = Qt::gray; else if (selected()) color = Qt::blue; if (frameWidth().val() != 0.0) { QPen pen(color, frameWidth().val() * spatium()); painter->setPen(pen); } else painter->setPen(Qt::NoPen); QColor bg(backgroundColor()); painter->setBrush(bg.alpha() ? QBrush(bg) : Qt::NoBrush); if (circle()) painter->drawArc(frame, 0, 5760); else { int r2 = frameRound() * lrint((frame.width() / frame.height())); if (r2 > 99) r2 = 99; painter->drawRoundRect(frame, frameRound(), r2); } }
void StaffText::layout() { if (autoplace()) setUserOff(QPointF()); QPointF p(textStyle().offset(spatium())); if (placement() == Element::Placement::BELOW) p.ry() = - p.ry() + lineHeight(); setPos(p); Text::layout1(); if (!parent()) // palette & clone trick return; if (autoplace() && segment()) { qreal minDistance = score()->styleP(StyleIdx::dynamicsMinDistance); // TODO Shape s1 = segment()->staffShape(staffIdx()).translated(segment()->pos()); Shape s2 = shape().translated(segment()->pos()); if (placement() == Element::Placement::ABOVE) { qreal d = s2.minVerticalDistance(s1); if (d > -minDistance) rUserYoffset() = -d - minDistance; } else { qreal d = s1.minVerticalDistance(s2); if (d > -minDistance) rUserYoffset() = d + minDistance; } } adjustReadPos(); }
void RehearsalMark::layout() { if (autoplace()) setUserOff(QPointF()); setPos(textStyle().offset(spatium())); Text::layout1(); Segment* s = segment(); if (s) { if (!s->rtick()) { // first CR of measure, decide whether to align to barline if (!s->prev() && align() & AlignmentFlags::CENTER) { // measure with no clef / keysig / timesig rxpos() -= s->x(); } else if (align() & AlignmentFlags::RIGHT) { // measure with clef / keysig / timesig, rehearsal mark right aligned // align left edge of rehearsal to barline if that is further to left qreal leftX = bbox().x(); qreal barlineX = -s->x(); rxpos() += qMin(leftX, barlineX) + width(); } } if (autoplace()) { Shape s1 = s->staffShape(staffIdx()).translated(s->pos()); Shape s2 = shape().translated(s->pos()); qreal d = s2.minVerticalDistance(s1); if (d > 0) setUserOff(QPointF(0.0, -d)); } } }
void Dynamic::layout() { if (!readPos().isNull()) { if (score()->mscVersion() <= 114) { setReadPos(QPointF()); // hack: 1.2 boundingBoxes are a bit wider which results // in symbols moved right setUserXoffset(userOff().x() - spatium() * .6); } } setPos(textStyle().offset(spatium())); Text::layout1(); Segment* s = segment(); if (!s) return; for (int voice = 0; voice < VOICES; ++voice) { int t = (track() & ~0x3) + voice; Chord* c = static_cast<Chord*>(s->element(t)); if (!c) continue; if (c->type() == Element::Type::CHORD) { qreal noteHeadWidth = score()->noteHeadWidth() * c->mag(); if (c->stem() && !c->up()) // stem down rxpos() += noteHeadWidth * .25; // center on stem + optical correction else rxpos() += noteHeadWidth * .5; // center on notehead } else rxpos() += c->width() * .5; break; } adjustReadPos(); }
int KoReportItemLabel::renderSimpleData(OROPage *page, OROSection *section, const QPointF &offset, const QVariant &data, KRScriptHandler *script) { Q_UNUSED(data) Q_UNUSED(script) OROTextBox * tb = new OROTextBox(); tb->setPosition(m_pos.toScene() + offset); tb->setSize(m_size.toScene()); tb->setFont(font()); tb->setText(text()); tb->setFlags(textFlags()); tb->setTextStyle(textStyle()); tb->setLineStyle(lineStyle()); if (page) { page->addPrimitive(tb); } if (section) { OROPrimitive *clone = tb->clone(); clone->setPosition(m_pos.toScene()); section->addPrimitive(clone); } if (!page) { delete tb; } return 0; //Item doesn't stretch the section height }
void EllipsisBox::paint(RenderObject::PaintInfo& paintInfo, int tx, int ty) { GraphicsContext* context = paintInfo.context; RenderStyle* style = m_object->style(m_firstLine); if (style->font() != context->font()) context->setFont(style->font()); Color textColor = style->color(); if (textColor != context->fillColor()) context->setFillColor(textColor); bool setShadow = false; if (style->textShadow()) { context->setShadow(IntSize(style->textShadow()->x, style->textShadow()->y), style->textShadow()->blur, style->textShadow()->color); setShadow = true; } const String& str = m_str; TextStyle textStyle(0, 0, 0, false, style->visuallyOrdered()); context->drawText(TextRun(str.impl()), IntPoint(m_x + tx, m_y + ty + m_baseline), textStyle); if (setShadow) context->clearShadow(); if (m_markupBox) { // Paint the markup box tx += m_x + m_width - m_markupBox->xPos(); ty += m_y + m_baseline - (m_markupBox->yPos() + m_markupBox->baseline()); m_markupBox->paint(paintInfo, tx, ty); } }
void SimpleText::draw(QPainter* p) const { drawFrame(p); p->setFont(textStyle().fontPx(spatium())); p->setBrush(Qt::NoBrush); p->setPen(textColor()); foreach(const TLine& t, _text) p->drawText(t.pos, t.text); }
QColor SimpleText::textColor() const { if (!score()->printing()) { QColor color; if (selected()) return MScore::selectColor[0]; if (!visible()) return Qt::gray; } return textStyle().foregroundColor(); }
void RehearsalMark::layout() { setPos(textStyle().offset(spatium())); Text::layout1(); Segment* s = segment(); if (s && !s->rtick()) { // first CR of measure, decide whether to align to barline if (!s->prev()) { // measure with no clef / keysig / timesig rxpos() -= s->x(); } else if (textStyle().align() & AlignmentFlags::RIGHT) { // measure with clef / keysig / timesig, rehearsal mark right aligned // align left edge of rehearsal to barline if that is further to left qreal leftX = bbox().x(); qreal barlineX = -s->x(); rxpos() += qMin(leftX, barlineX) + width(); } } adjustReadPos(); }
void ReportEntityLabel::buildXML(QDomDocument & doc, QDomElement & parent) { kDebug(); //kdDebug() << "ReportEntityLabel::buildXML()"); QDomElement entity = doc.createElement("label"); // bounding rect buildXMLRect(doc, entity, pointRect()); // name QDomElement n = doc.createElement("name"); n.appendChild(doc.createTextNode(entityName())); entity.appendChild(n); // z QDomElement z = doc.createElement("zvalue"); z.appendChild(doc.createTextNode(QString::number(zValue()))); entity.appendChild(z); // font info //buildXMLFont ( doc,entity,font() ); //text style info buildXMLTextStyle(doc, entity, textStyle()); //Line Style buildXMLLineStyle(doc, entity, lineStyle()); // text alignment int align = textFlags(); // horizontal if ((align & Qt::AlignRight) == Qt::AlignRight) entity.appendChild(doc.createElement("right")); else if ((align & Qt::AlignHCenter) == Qt::AlignHCenter) entity.appendChild(doc.createElement("hcenter")); else // Qt::AlignLeft entity.appendChild(doc.createElement("left")); // vertical if ((align & Qt::AlignBottom) == Qt::AlignBottom) entity.appendChild(doc.createElement("bottom")); else if ((align & Qt::AlignVCenter) == Qt::AlignVCenter) entity.appendChild(doc.createElement("vcenter")); else // Qt::AlignTop entity.appendChild(doc.createElement("top")); // the text string QDomElement string = doc.createElement("string"); string.appendChild(doc.createTextNode(text())); entity.appendChild(string); parent.appendChild(entity); }
void Text::createDoc() { _doc = new QTextDocument(0); _doc->setDocumentMargin(-2.0); _doc->setUseDesignMetrics(true); _doc->setUndoRedoEnabled(true); _doc->documentLayout()->setProperty("cursorWidth", QVariant(2)); QTextOption to = _doc->defaultTextOption(); to.setUseDesignMetrics(true); to.setWrapMode(QTextOption::NoWrap); _doc->setDefaultTextOption(to); _doc->setDefaultFont(textStyle().font(spatium())); }
int ZLTextView::ViewStyle::elementWidth(const ZLTextElement &element, unsigned int charNumber) const { switch (element.kind()) { case ZLTextElement::WORD_ELEMENT: return wordWidth((const ZLTextWord&)element, charNumber, -1, false); case ZLTextElement::IMAGE_ELEMENT: return context().imageWidth(((const ZLTextImageElement&)element).image()); case ZLTextElement::INDENT_ELEMENT: return textStyle()->firstLineIndentDelta(); case ZLTextElement::HSPACE_ELEMENT: case ZLTextElement::NB_HSPACE_ELEMENT: return 0; case ZLTextElement::BEFORE_PARAGRAPH_ELEMENT: case ZLTextElement::AFTER_PARAGRAPH_ELEMENT: case ZLTextElement::EMPTY_LINE_ELEMENT: return context().width() + abs(textStyle()->leftIndent()) + abs(textStyle()->rightIndent()) + abs(textStyle()->firstLineIndentDelta()) + 1; case ZLTextElement::FORCED_CONTROL_ELEMENT: case ZLTextElement::CONTROL_ELEMENT: return 0; case ZLTextElement::FIXED_HSPACE_ELEMENT: return context().spaceWidth() * ((const ZLTextFixedHSpaceElement&)element).length(); } return 0; }
bool Text::readProperties(XmlReader* r) { MString8 tag = r->tag(); QString val; int i; qreal d; Color color; if (r->readString("style", &val)) { setTextStyle(score()->style().textStyleType(val)); if (textStyle() != TEXT_STYLE_INVALID) _styled = true; } else if (r->readInt("spatiumSizeDependent", &i)) { setSizeIsSpatiumDependent(i); _styled = false; } else if (r->readInt("frame", &i)) { setHasFrame(i); _styled = false; } else if (r->readString("text", &val)) setText(val); else if (tag == "frameWidth") { setFrameWidth(val.toDouble()); setHasFrame(true); _styled = false; } else if (r->readReal("paddingWidth", &d)) { setPaddingWidth(d); _styled = false; } else if (r->readColor("frameColor", &color)) { // setFrameColor(readColor(e)); _styled = false; } else if (r->readInt("frameRound", &i)) { setFrameRound(i); _styled = false; } else if (r->readInt("circle", &i)) { setCircle(i); _styled = false; } else if (_localStyle.readProperties(r)) _styled = false; else if (!Element::readProperties(r)) return false; return true; }
void Text::writeProperties(Xml& xml, bool writeText) const { Element::writeProperties(xml); if (xml.clipboardmode || styled()) xml.tag("style", textStyle().name()); if (xml.clipboardmode || !styled()) _textStyle.writeProperties(xml); if (writeText) { if (styled()) xml.tag("text", getText()); else { xml.stag("html-data"); xml.writeHtml(_doc->toHtml("utf-8")); xml.etag(); } } }
void loop() { // clears the screen and select font size and style char instr1[] = { clearScreen(), defaultSize(), selectSize(), // tall selectSize(), // wide selectSize(), // big textStyle(), NULL }; const char message[] = "Hi GLO!"; Serial1.print(instr1); // print message according to prior instructions Serial1.print(message); }
void Marker::adjustReadPos() { if (!readPos().isNull()) { QPointF uo; if (score()->mscVersion() <= 114) { // rebase from Measure to Segment uo = userOff(); uo.rx() -= segment()->pos().x(); // 1.2 is always HCENTER aligned if ((textStyle().align() & ALIGN_HMASK) == 0) // ALIGN_LEFT uo.rx() -= bbox().width() * .5; } else uo = readPos() - ipos(); setUserOff(uo); setReadPos(QPointF()); } }
void tGauge::DrawText( QPainter& painter, const QRect& rect, const QString& text, int ptAdjust ) { if( m_OutlineText ) { int fontSize = painter.font().pixelSize(); Assert( fontSize > 0 ); tTextStyleAttributes textStyle( (uchar)(fontSize + ptAdjust), painter.pen().color(), palette().base().color(), Fonts::CENTER_CENTER, painter.font().bold() ); textStyle.m_halo = m_OutlineText; if (m_InvertedText) qSwap( textStyle.m_color, textStyle.m_bkgColor ); tRenderText::renderString( text, painter.font().family(), textStyle, rect.center(), painter ); } else { painter.drawText( rect, text ); } }
void TempoText::layout() { setPos(textStyle().offset(spatium())); Text::layout1(); // tempo text on first chordrest of measure should align over time sig if present // Segment* s = segment(); if (s && !s->rtick()) { Segment* p = segment()->prev(Segment::Type::TimeSig); if (p) { rxpos() -= s->x() - p->x(); Element* e = p->element(staffIdx() * VOICES); if (e) rxpos() += e->x(); } } if (placement() == Element::Placement::BELOW) rypos() = -rypos() + 4 * spatium(); adjustReadPos(); }
void KoReportDesignerItemLabel::buildXML(QDomDocument & doc, QDomElement & parent) { //kDebug(); QDomElement entity = doc.createElement("report:label"); // properties addPropertyAsAttribute(&entity, m_name); addPropertyAsAttribute(&entity, m_text); addPropertyAsAttribute(&entity, m_verticalAlignment); addPropertyAsAttribute(&entity, m_horizontalAlignment); entity.setAttribute("report:z-index", zValue()); // bounding rect buildXMLRect(doc, entity, &m_pos, &m_size); //text style info buildXMLTextStyle(doc, entity, textStyle()); //Line Style buildXMLLineStyle(doc, entity, lineStyle()); parent.appendChild(entity); }
void KoReportDesignerItemText::buildXML(QDomDocument & doc, QDomElement & parent) { //kdDebug() << "ReportEntityText::buildXML()"); QDomElement entity = doc.createElement("report:text"); // properties addPropertyAsAttribute(&entity, m_name); addPropertyAsAttribute(&entity, m_controlSource); addPropertyAsAttribute(&entity, m_verticalAlignment); addPropertyAsAttribute(&entity, m_horizontalAlignment); entity.setAttribute("report:bottom-padding", m_bottomPadding); entity.setAttribute("report:z-index", zValue()); // bounding rect buildXMLRect(doc, entity, &m_pos, &m_size); //text style info buildXMLTextStyle(doc, entity, textStyle()); //Line Style buildXMLLineStyle(doc, entity, lineStyle()); parent.appendChild(entity); }
qreal Text::yoff() const { return textStyle().offset().y(); }
int KReportItemText::renderSimpleData(OROPage *page, OROSection *section, const QPointF &offset, const QVariant &data, KReportScriptHandler *script) { Q_UNUSED(script); QString qstrValue; QString cs = itemDataSource(); if (!cs.isEmpty()) { if (cs.left(1) == QLatin1String("$")) { //Everything past $ is treated as a string qstrValue = cs.mid(1); } else { qstrValue = data.toString(); } } else { qstrValue = m_itemValue->value().toString(); } QPointF pos = m_pos.toScene(); QSizeF size = m_size.toScene(); pos += offset; QRectF trf(pos, size); qreal intStretch = trf.top() - offset.y(); if (qstrValue.length()) { QRectF rect = trf; int pos = 0; QChar separator; QRegExp re(QLatin1String("\\s")); QPrinter prnt(QPrinter::HighResolution); QFontMetrics fm(font(), &prnt); // int intRectWidth = (int)(trf.width() * prnt.resolution()) - 10; int intRectWidth = (int)((m_size.toPoint().width() / 72) * prnt.resolution()); int intLineCounter = 0; qreal intBaseTop = trf.top(); qreal intRectHeight = trf.height(); while (qstrValue.length()) { int idx = re.indexIn(qstrValue, pos); if (idx == -1) { idx = qstrValue.length(); separator = QLatin1Char('\n'); } else separator = qstrValue.at(idx); if (fm.boundingRect(qstrValue.left(idx)).width() < intRectWidth || pos == 0) { pos = idx + 1; if (separator == QLatin1Char('\n')) { QString line = qstrValue.left(idx); qstrValue.remove(0, idx + 1); pos = 0; rect.setTop(intBaseTop + (intLineCounter * intRectHeight)); rect.setBottom(rect.top() + intRectHeight); OROTextBox * tb = new OROTextBox(); tb->setPosition(rect.topLeft()); tb->setSize(rect.size()); tb->setFont(font()); tb->setText(line); tb->setFlags(textFlags()); tb->setTextStyle(textStyle()); tb->setLineStyle(lineStyle()); if (page) { page->addPrimitive(tb); } if (section) { OROTextBox *tb2 = dynamic_cast<OROTextBox*>(tb->clone()); tb2->setPosition(m_pos.toPoint()); section->addPrimitive(tb2); } if (!page) { delete tb; } intStretch += intRectHeight; intLineCounter++; } } else { QString line = qstrValue.left(pos - 1); qstrValue.remove(0, pos); pos = 0; rect.setTop(intBaseTop + (intLineCounter * intRectHeight)); rect.setBottom(rect.top() + intRectHeight); OROTextBox * tb = new OROTextBox(); tb->setPosition(rect.topLeft()); tb->setSize(rect.size()); tb->setFont(font()); tb->setText(line); tb->setFlags(textFlags()); tb->setTextStyle(textStyle()); tb->setLineStyle(lineStyle()); if (page) page->addPrimitive(tb); intStretch += intRectHeight; intLineCounter++; } } intStretch += (m_bottomPadding / 100.0); } return intStretch; //Item returns its required section height }
qreal Text::lineHeight() const { return QFontMetricsF(textStyle().font(spatium())).height(); }
qreal Text::lineSpacing() const { return QFontMetricsF(textStyle().font(spatium())).lineSpacing(); }
bool Text::systemFlag() const { return textStyle().systemFlag(); }