Commit fdb7007156894bf9775b322b97c2eb6870b3f404

Authored by Peter Zhigalov
1 parent c7805026

Починил отрисовку текста при сохранении в SVG

src_qt/paintwidget.cpp
... ... @@ -957,6 +957,21 @@ const QColor default_normal_legend_colors[14] =
957 957 QColor( 255, 0, 0 )
958 958 };
959 959  
  960 +// Печать текста с заданным интервалом между символами
  961 +void paintwidget::drawTextWithSpacing(QPainter & painter, const QPoint & coord, const QString & str, bool manual_spacing)
  962 +{
  963 + if(!manual_spacing)
  964 + painter.drawText(coord, str);
  965 + else
  966 + {
  967 + int len = str.size();
  968 + int x = coord.x(), y = coord.y();
  969 + double spacing = (double)QFontMetrics(painter.font()).width(str) / (double)len;
  970 + for(int i = 0; i < len; i++)
  971 + painter.drawText((int)((double)x + spacing * (double)i), y, QString(str[i]));
  972 + }
  973 +}
  974 +
960 975 // Отрисовка сцены на QPaintDevice
961 976 void paintwidget::draw(QPaintDevice * device, bool transparency, bool is_svg)
962 977 {
... ... @@ -1020,14 +1035,14 @@ void paintwidget::draw(QPaintDevice * device, bool transparency, bool is_svg)
1020 1035 float x = (float)i / (float)num_ticks_x;
1021 1036 float x_real = (float)(std::floor((x * size_x + min_x) * 10000.0f + 0.5f)) / 10000.0f;
1022 1037 QString st = QString::number(x_real);
1023   - painter.drawText(to_window(x - 0.01f, -0.04f), st);
  1038 + drawTextWithSpacing(painter, to_window(x - 0.01f, -0.04f), st, is_svg);
1024 1039 }
1025 1040 for(size_t i = 0; i < num_ticks_y; i++)
1026 1041 {
1027 1042 float y = (float)i / (float)num_ticks_y;
1028 1043 float y_real = (float)(std::floor((y * size_y + min_y) * 10000.0f + 0.5f)) / 10000.0f;
1029 1044 QString st = QString::number(y_real);
1030   - painter.drawText(to_window(-0.05f, y - 0.01f), st);
  1045 + drawTextWithSpacing(painter, to_window(-0.05f, y - 0.01f), st, is_svg);
1031 1046 }
1032 1047  
1033 1048 // Раскрашивать будем если запрошено сие
... ... @@ -1316,7 +1331,7 @@ void paintwidget::draw(QPaintDevice * device, bool transparency, bool is_svg)
1316 1331 painter.setFont(fnt_mono);
1317 1332 painter.setPen(QPen(Qt::black));
1318 1333 QString st = QString::number(legend_values[i], 'E', 2);
1319   - painter.drawText(to_window(x0 + dx * i + 0.005f, y0 + dy * i + hy / 2.0f - 0.01f), st);
  1334 + drawTextWithSpacing(painter, to_window(x0 + dx * i + 0.005f, y0 + dy * i + hy / 2.0f - 0.01f), st, is_svg);
1320 1335 }
1321 1336 }
1322 1337  
... ...
src_qt/paintwidget.h
... ... @@ -206,6 +206,9 @@ private:
206 206 // Подгонка осей под реальность и вычисление шагов координатной сетки
207 207 void adjustAxis(float & min, float & max, size_t & numTicks) const;
208 208  
  209 + // Печать текста с заданным интервалом между символами
  210 + void drawTextWithSpacing(QPainter & painter, const QPoint & coord, const QString & str, bool manual_spacing);
  211 +
209 212 // Минимальное и максимальное значения решения
210 213 dynarray_t<float> min_u, max_u;
211 214  
... ...