/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "tests/test_main.h" #include "base/invoke_queued.h" #include "base/integration.h" #include "ui/effects/animations.h" #include "ui/text/text.h" #include "ui/text/text_utilities.h" #include "ui/widgets/rp_window.h" #include "ui/painter.h" #include #include #include #include namespace Test { QString name() { return u"text"_q; } void test(not_null window, not_null body) { auto text = new Ui::Text::String(scale(64)); const auto like = QString::fromUtf8("\xf0\x9f\x91\x8d"); const auto dislike = QString::fromUtf8("\xf0\x9f\x91\x8e"); const auto hebrew = QString() + QChar(1506) + QChar(1460) + QChar(1489); auto data = TextWithEntities(); data.append( u"Lorem ipsu7m dolor sit amet, "_q ).append(Ui::Text::Bold( u"consectetur adipiscing: "_q + hebrew + u" elit, sed do eiusmod tempor incididunt test"_q )).append(Ui::Text::Wrapped(Ui::Text::Bold( u". ut labore et dolore magna aliqua."_q + like + dislike + u"Ut enim ad minim veniam"_q ), EntityType::Italic)).append( u", quis nostrud exercitation ullamco laboris nisi ut aliquip ex \ ea commodo consequat. Duis aute irure dolor in reprehenderit in \ voluptate velit esse cillum dolore eu fugiat nulla pariatur. \ Excepteur sint occaecat cupidatat non proident, sunt in culpa \ qui officia deserunt mollit anim id est laborum."_q ).append(u"\n\n"_q).append(hebrew).append("\n\n").append( "Duisauteiruredolorinreprehenderitinvoluptatevelitessecillumdoloreeu\ fugiatnullapariaturExcepteursintoccaecatcupidatatnonproident, sunt in culpa \ qui officia deserunt mollit anim id est laborum. \ Duisauteiruredolorinreprehenderitinvoluptate."); data.append(data); //data.append("hi\n\nguys"); text->setMarkedText(st::defaultTextStyle, data); body->paintRequest() | rpl::start_with_next([=](QRect clip) { auto p = QPainter(body); auto hq = PainterHighQualityEnabler(p); const auto width = body->width(); const auto height = body->height(); p.fillRect(clip, QColor(255, 255, 255)); const auto border = QColor(0, 128, 0, 16); auto skip = scale(20); p.fillRect(0, 0, skip, height, border); p.fillRect(skip, 0, width - skip, skip, border); p.fillRect(skip, height - skip, width - skip, skip, border); p.fillRect(width - skip, skip, skip, height - skip * 2, border); const auto inner = body->rect().marginsRemoved( { skip, skip, skip, skip }); p.fillRect(QRect{ inner.x(), inner.y(), inner.width(), text->countHeight(inner.width()) }, QColor(128, 0, 0, 16)); auto widths = text->countLineWidths(inner.width()); auto top = 0; for (const auto width : widths) { p.fillRect(QRect{ inner.x(), inner.y() + top, width, st::defaultTextStyle.font->height }, QColor(0, 0, 128, 16)); top += st::defaultTextStyle.font->height; } text->draw(p, { .position = inner.topLeft(), .availableWidth = inner.width(), }); //const auto to = QRectF( // inner.marginsRemoved({ 0, inner.height() / 2, 0, 0 })); //const auto t = u"hi\n\nguys"_q; //p.drawText(to, t); }, body->lifetime()); } } // namespace Test