#include "displaytoolbox.h" #include #include #include #ifdef PAINTER_OP #include #include #include #include #endif #include #define LINE_SPACING 5 DisplayToolBox::DisplayToolBox() {} #ifdef PAINTER_OP QString DisplayToolBox::makeImage(QByteArray svgCode) { QSvgRenderer svg(svgCode); QImage image(500, 60, QImage::Format_ARGB32); image.fill(QColor(255, 255, 255, 100)); // partly transparent red-ish background // Get QPainter that paints to the image QPainter painter(&image); svg.render(&painter); QByteArray ba; QBuffer buffer(&ba); buffer.open(QIODevice::WriteOnly); image.save(&buffer, "PNG"); return ba.toBase64(); } #endif QString DisplayToolBox::colorToIntCode(QString str) { if(str.isEmpty() || str == QStringLiteral("black")) { return QStringLiteral("0;31"); } else if(str == QStringLiteral("white")) { return QStringLiteral("97"); } else if(str == QStringLiteral("blue")) { return QStringLiteral("34"); } else if(str == QStringLiteral("red")) { return QStringLiteral("31"); } else if(str == QStringLiteral("black")) { return QStringLiteral("30"); } else if(str == QStringLiteral("green")) { return QStringLiteral("32"); } else if(str == QStringLiteral("yellow")) { return QStringLiteral("33"); } else if(str == QStringLiteral("cyan")) { return QStringLiteral("36"); } else if(str == QStringLiteral("reset")) { return QStringLiteral("0"); } return {}; } QString DisplayToolBox::colorToTermCode(QString str) { return QStringLiteral("\e[").append(DisplayToolBox::colorToIntCode(str)).append("m"); } QString DisplayToolBox::diceToSvg(QJsonArray array, bool withColor, bool allSameColor, bool allSameFaceCount) { Q_UNUSED(allSameColor) if(allSameFaceCount) { QStringList result; for(auto item : array) { QStringList subResult; auto obj= item.toObject(); auto values= obj["values"].toArray(); for(auto valRef : values) { subResult.append(diceResultToString(valRef.toObject(), Output::Svg, withColor)); } result.append(subResult.join(',')); } return result.join(""); } else { QStringList result; for(auto item : array) { QStringList subResult; auto obj= item.toObject(); auto values= obj["values"].toArray(); for(auto valRef : values) { subResult.append(diceResultToString(valRef.toObject(), Output::Svg, withColor)); } result.append(QStringLiteral("d%1:(").arg(obj["face"].toInt())); if(withColor) { result.append(QStringLiteral("").arg(obj["color"].toString())); } result.append(subResult.join(',')); if(withColor) { result.append(QStringLiteral(")")); } else { result.append(QStringLiteral(")")); } } return result.join(""); } } #include QString DisplayToolBox::diceResultToString(QJsonObject val, Output type, bool hasColor) { auto total= QString::number(val["total"].toDouble()); auto color= val["color"].toString(); auto subvalues= val["subvalues"].toArray(); QStringList subStr; for(auto subval : subvalues) { subStr << QString::number(subval.toDouble()); } if(!subStr.isEmpty()) { total.append(QStringLiteral(" [%1]").arg(subStr.join(','))); } if(hasColor && !color.isEmpty()) { if(type == Output::Terminal) { total= QStringLiteral("%1%2%3") .arg(DisplayToolBox::colorToTermCode(color)) .arg(total) .arg(DisplayToolBox::colorToTermCode(QStringLiteral("reset"))); } else if(type == Output::Svg) { total= QStringLiteral("%1%2%3") .arg(QStringLiteral("").arg(color)) .arg(total) .arg(QStringLiteral("")); } } return total; }