Why does it take 40-50 ms to draw text, and especially set bold/italic...
parent
9a58be4e92
commit
4e8946034a
|
@ -67,6 +67,7 @@
|
|||
"bit": "cpp",
|
||||
"qsizepolicy": "cpp",
|
||||
"qgraphicsscene": "cpp",
|
||||
"qstring": "cpp"
|
||||
"qstring": "cpp",
|
||||
"qtglobal": "cpp"
|
||||
}
|
||||
}
|
|
@ -3,6 +3,10 @@
|
|||
#include "md-parser.h"
|
||||
#include "md-render.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <iostream>
|
||||
|
||||
|
||||
#ifdef LEGACY_CXX
|
||||
#include <experimental/filesystem>
|
||||
namespace n_fs = ::std::experimental::filesystem;
|
||||
|
@ -64,17 +68,31 @@ void MainWindow::setupParser()
|
|||
std::string filePath = exePath.append("/../../test.md");
|
||||
printf("Path: %s\n", filePath.c_str());
|
||||
|
||||
|
||||
typedef std::chrono::high_resolution_clock Time;
|
||||
typedef std::chrono::milliseconds ms;
|
||||
typedef std::chrono::duration<float> fsec;
|
||||
|
||||
cmark_node *root_node = parser->parseFile(filePath);
|
||||
if (root_node != NULL) {
|
||||
htmlOutput = parser->renderHTML(root_node);
|
||||
|
||||
auto t0 = Time::now();
|
||||
|
||||
// Render AST to scene
|
||||
renderer->renderDocument(root_node);
|
||||
|
||||
auto t1 = Time::now();
|
||||
fsec fs = t1 - t0;
|
||||
ms d = std::chrono::duration_cast<ms>(fs);
|
||||
printf("Duration\n");
|
||||
std::cout << "ms: " << d.count() << std::endl;
|
||||
|
||||
cmark_node_free(root_node);
|
||||
}
|
||||
|
||||
setOutputToTextEdit(QString::fromStdString(htmlOutput));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
Renderer::Renderer(Scene* scene) :
|
||||
scene(scene),
|
||||
defaultFontSize(12),
|
||||
sceneMarginX(3.0),
|
||||
sceneMarginY(3.0),
|
||||
bold(false),
|
||||
|
@ -26,6 +27,9 @@ Renderer::Renderer(Scene* scene) :
|
|||
headingHeightOffset(10.0),
|
||||
listXOffset(15.0),
|
||||
bulletWithTemp(0.0) {
|
||||
font = new QFont();
|
||||
font->setPixelSize(defaultFontSize);
|
||||
font->setFamily(fontFamilty);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -207,49 +211,47 @@ QRectF const Renderer::drawText(const QString& text)
|
|||
// We can still extend the QGraphicsSimpleTextItem class (or QAbstractGraphicsShapeItem) and override paint method.
|
||||
// Or just use QPainter with a paint device (like QWidgets), to have maximal control.
|
||||
QGraphicsSimpleTextItem *textItem = new QGraphicsSimpleTextItem(text);
|
||||
QFont font;
|
||||
if (bold)
|
||||
font.setBold(true);
|
||||
if (italic)
|
||||
font.setItalic(true);
|
||||
|
||||
font->setBold(bold);
|
||||
font->setItalic(italic);
|
||||
|
||||
if (headingLevel > 0) {
|
||||
font.setBold(true);
|
||||
font->setBold(true);
|
||||
switch(headingLevel) {
|
||||
case 1:
|
||||
font.setPixelSize(24);
|
||||
font->setPixelSize(24);
|
||||
break;
|
||||
case 2:
|
||||
font.setPixelSize(20);
|
||||
font->setPixelSize(20);
|
||||
break;
|
||||
case 3:
|
||||
font.setPixelSize(16);
|
||||
font->setPixelSize(16);
|
||||
break;
|
||||
case 4:
|
||||
font.setPixelSize(14);
|
||||
font->setPixelSize(14);
|
||||
break;
|
||||
case 5:
|
||||
font.setPixelSize(12);
|
||||
font->setPixelSize(12);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
font.setFamily(fontFamilty);
|
||||
textItem->setFont(font);
|
||||
textItem->setFont(*font);
|
||||
textItem->setPos(currentX, currentY);
|
||||
scene->addItem(textItem);
|
||||
|
||||
if (headingLevel > 0) {
|
||||
font->setPixelSize(defaultFontSize);
|
||||
}
|
||||
|
||||
return textItem->boundingRect();
|
||||
}
|
||||
|
||||
QRectF const Renderer::drawBullet()
|
||||
{
|
||||
QGraphicsSimpleTextItem *bullet = new QGraphicsSimpleTextItem("\u2022");
|
||||
QFont font;
|
||||
font.setFamily(fontFamilty);
|
||||
bullet->setFont(font);
|
||||
bullet->setFont(*font);
|
||||
bullet->setPos(currentX, currentY);
|
||||
scene->addItem(bullet);
|
||||
return bullet->boundingRect();
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
class Scene;
|
||||
class QRectF;
|
||||
class QFont;
|
||||
|
||||
/**
|
||||
* The Renderer will use Qt to render AST directly to a QGraphicsScene
|
||||
|
@ -20,6 +21,8 @@ public:
|
|||
|
||||
private:
|
||||
Scene *scene;
|
||||
QFont *font;
|
||||
int defaultFontSize;
|
||||
qreal sceneMarginX;
|
||||
qreal sceneMarginY;
|
||||
bool bold;
|
||||
|
|
Loading…
Reference in New Issue