Commit 1036b211 authored by Johannes Bergmeier's avatar Johannes Bergmeier

- Fixed a highlighting bug

- Added back the markers feature
- Added back value selection by mouse wheel

svn path=/trunk/KDE/kdegames/ksudoku/; revision=795986
parent d4496703
......@@ -7,6 +7,8 @@
#include <QPixmap>
#include <QPainter>
#include <QtDebug>
namespace ksudoku {
Renderer* Renderer::instance() {
......@@ -66,6 +68,8 @@ void Renderer::fillNameHashes() {
m_specialNames << "cell";
m_specialNames << "cell_mistake";
m_specialNames << "cursor";
// TODO get this hardcoded values from the SVG file
// m_markerName << "markers9" << "markers9" //...
}
QPixmap Renderer::renderBackground(const QSize& size) const {
......@@ -173,6 +177,59 @@ QPixmap Renderer::renderSymbolOn(QPixmap pixmap, int symbol, int color) const {
}
}
QPixmap Renderer::renderMarker(int symbol, int range, int size) const {
if(!m_renderer->isValid() || size == 0) return QPixmap();
QString groupName = QString("markers%1").arg(range);
QString cacheName = QString("%1_%2_%3").arg(groupName).arg(symbol).arg(size);
QPixmap pix;
if(!m_cache->find(cacheName, pix)) {
qDebug() << cacheName;
pix = QPixmap(size, size);
pix.fill(Qt::transparent);
QPainter p(&pix);
// NOTE fix for Qt's QSvgRenderer size reporting bug
QRectF r(m_renderer->boundsOnElement(QString("%1_%2").arg(groupName).arg(symbol)));
QRectF from(m_renderer->boundsOnElement(QString("cell_%1").arg(groupName)));
from.adjust(+0.5,+0.5,-0.5,-0.5); // << this is the fix
QRectF to(QRectF(0,0,size,size));
qDebug() << r << from << to;
r.setTopLeft(fromRectToRect(r.topLeft(), from, to));
r.setBottomRight(fromRectToRect(r.bottomRight(), from, to));
qDebug() << r;
m_renderer->render(&p, QString("symbol_%1").arg(symbol), r);
p.end();
m_cache->insert(cacheName, pix);
}
return pix;
}
QPixmap Renderer::renderMarkerOn(QPixmap pixmap, int symbol, int range, int color) const {
int size = pixmap.width();
QPixmap symbolPixmap = renderMarker(symbol, range, size);
if(color) {
QPainter p(&symbolPixmap);
p.setCompositionMode(QPainter::CompositionMode_Multiply);
p.setBrush(QBrush(QColor(128,128,128,255)));
p.drawRect(0, 0, size, size);
p.setCompositionMode(QPainter::CompositionMode_DestinationOver);
p.drawPixmap(0, 0, pixmap);
p.end();
return symbolPixmap;
} else {
QPainter p(&pixmap);
p.drawPixmap(0, 0, symbolPixmap);
p.end();
return pixmap;
}
}
QPixmap Renderer::renderBorder(int border, GroupTypes type, int size) const {
if(!m_renderer->isValid() || size == 0) return QPixmap();
......
......@@ -58,6 +58,9 @@ public:
QPixmap renderSymbol(int symbol, int size) const;
QPixmap renderSymbolOn(QPixmap pixmap, int symbol, int color) const;
QPixmap renderMarker(int symbol, int range, int size) const;
QPixmap renderMarkerOn(QPixmap pixmap, int symbol, int range, int color) const;
private:
Renderer();
~Renderer();
......@@ -73,6 +76,7 @@ private:
QVector<QString> m_borderNames;
QVector<QString> m_borderTypes;
QVector<QString> m_specialNames;
QVector<QString> m_markerNames;
KSvgRenderer* m_renderer;
KPixmapCache* m_cache;
};
......
......@@ -3,6 +3,7 @@
#include "view2d.moc"
#include <QGraphicsPixmapItem>
#include <QGraphicsSceneEvent>
#include <QtDebug>
// #include <QFile> // TODO only for debug
// #include <QEvent> // TODO only for debug
......@@ -43,6 +44,7 @@ private:
QVector<ColoredValue> m_values;
int m_id;
int m_size;
int m_range;
};
CellGraphicsItem::CellGraphicsItem(QPoint pos, int id, View2DScene* scene) {
......@@ -53,6 +55,7 @@ CellGraphicsItem::CellGraphicsItem(QPoint pos, int id, View2DScene* scene) {
m_scene = scene;
m_id = id;
m_type = SpecialCell;
m_range = 9; // TODO change this hardcoded value
}
void CellGraphicsItem::resize(int gridSize) {
......@@ -73,8 +76,16 @@ void CellGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent* event) {
}
void CellGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent* event) {
// TODO make action dependant on button
m_scene->press(m_id);
switch(event->button()) {
case Qt::LeftButton:
m_scene->press(m_id);
break;
case Qt::RightButton:
m_scene->press(m_id, true);
break;
default:
break;
}
}
void CellGraphicsItem::setType(SpecialType type) {
......@@ -108,9 +119,11 @@ void CellGraphicsItem::updatePixmap() {
pic = Renderer::instance()->renderSymbolOn(pic, m_values[0].value, 0);
}
break;
case SpecialCellMarkers:
// TODO add marker rendering
break;
case SpecialCellMarkers: {
for(int i = m_values.size()-1; i >= 0; --i) {
pic = Renderer::instance()->renderMarkerOn(pic, m_values[i].value, m_range, 0);
}
} break;
default: break; // TODO maybe assert as this is not allowed to occur
}
setPixmap(pic);
......@@ -173,7 +186,7 @@ void GroupGraphicsItem::detectType() {
if(x != m_cells[i].x()) x = -1;
if(y != m_cells[i].y()) y = -1;
}
m_type = GroupHighlight;
m_type = GroupNone;
if(x==-1) m_type |= GroupRow;
if(y==-1) m_type |= GroupColumn;
......@@ -258,6 +271,7 @@ void GroupGraphicsItem::setHighlight(bool highlight) {
if(segment->highlighted) segment->highlighted->setVisible(highlight);
if(segment->standard) segment->standard->setVisible(!highlight);
}
m_type ^= GroupHighlight;
}
void GroupGraphicsItem::setHighlight(const QPoint& pos) {
......@@ -412,33 +426,53 @@ void View2DScene::hover(int cell) {
m_cells[cell]->showCursor(m_cursor);
}
void View2DScene::press(int cell) {
m_game.setValue(cell, m_selectedValue);
void View2DScene::press(int cell, bool rightButton) {
if(rightButton) {
m_game.flipMarker(cell, m_selectedValue);
} else {
m_game.setValue(cell, m_selectedValue);
}
}
void View2DScene::update(int cell) {
if(cell < 0) {
for(int i = 0; i < m_game.size(); ++i) {
if(m_cells[i] == 0) continue;
if(m_game.given(i))
m_cells[i]->setType(SpecialCellPreset);
else
m_cells[i]->setType(SpecialCell);
if(m_game.value(i))
m_cells[i]->setValues(QVector<ColoredValue>() << ColoredValue(m_game.value(i),0));
else
m_cells[i]->setValues(QVector<ColoredValue>());
update(i);
}
} else {
if(m_game.given(cell))
m_cells[cell]->setType(SpecialCellPreset);
else
m_cells[cell]->setType(SpecialCell);
if(m_game.value(cell))
m_cells[cell]->setValues(QVector<ColoredValue>() << ColoredValue(m_game.value(cell),0));
else
m_cells[cell]->setValues(QVector<ColoredValue>());
}
if(m_cells[cell] == 0) return;
CellInfo cellInfo = m_game.cellInfo(cell);
QVector<ColoredValue> values;
switch(cellInfo.state()) {
case GivenValue:
m_cells[cell]->setType(SpecialCellPreset);
if(cellInfo.value()) values << ColoredValue(cellInfo.value(),0);
m_cells[cell]->setValues(values);
break;
case CorrectValue:
m_cells[cell]->setType(SpecialCell);
if(cellInfo.value()) values << ColoredValue(cellInfo.value(),0);
m_cells[cell]->setValues(values);
break;
case WrongValue:
case ObviouslyWrong:
m_cells[cell]->setType(SpecialCellMistake);
if(cellInfo.value()) values << ColoredValue(cellInfo.value(),0);
m_cells[cell]->setValues(values);
break;
case Marker: {
m_cells[cell]->setType(SpecialCellMarkers);
for(int i = 1; i <= m_game.size(); ++i) {
if(cellInfo.marker(i))
values << ColoredValue(i,0);
}
m_cells[cell]->setValues(values);
} break;
}
}
}
void View2DScene::selectValue(int value) {
......@@ -461,6 +495,38 @@ void View2DScene::enterValue(int value, int cell) {
}
}
void View2DScene::markValue(int value, int cell, bool set) {
if(value >= 0) {
if(cell >= 0) {
m_game.setMarker(cell, value, set);
} else {
m_game.setMarker(m_cursorPos, value, set);
}
} else {
if(cell >= 0) {
m_game.setMarker(cell, m_selectedValue, set);
} else {
m_game.setMarker(m_cursorPos, m_selectedValue, set);
}
}
}
void View2DScene::flipMarkValue(int value, int cell) {
if(value >= 0) {
if(cell >= 0) {
m_game.flipMarker(cell, value);
} else {
m_game.flipMarker(m_cursorPos, value);
}
} else {
if(cell >= 0) {
m_game.flipMarker(cell, m_selectedValue);
} else {
m_game.flipMarker(m_cursorPos, m_selectedValue);
}
}
}
void View2DScene::moveCursor(int dx, int dy) {
Graph* g = m_game.puzzle()->solver()->g;
QPoint oldPos = m_cells[m_cursorPos]->pos();
......@@ -492,6 +558,22 @@ void View2DScene::moveCursor(int dx, int dy) {
hover(newCursorPos);
}
void View2DScene::wheelEvent(QGraphicsSceneWheelEvent* event) {
if(event->orientation() != Qt::Vertical) return;
if(event->delta() < 0) {
m_selectedValue++;
if(m_selectedValue > m_game.order())
m_selectedValue = 1;
} else if(event->delta() > 0) {
m_selectedValue--;
if(m_selectedValue < 1)
m_selectedValue = m_game.order();
}
emit valueSelected(m_selectedValue);
}
View2D::View2D(QWidget *parent, const Game& game, GameActions* gameActions) : QGraphicsView(parent) {
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
......@@ -503,6 +585,8 @@ View2D::View2D(QWidget *parent, const Game& game, GameActions* gameActions) : QG
setScene(m_scene);
gameActions->associateWidget(this);
connect(m_scene, SIGNAL(valueSelected(int)), this, SIGNAL(valueSelected(int)));
}
View2D::~View2D() {
......
......@@ -27,14 +27,19 @@ public:
void setSceneSize(const QSize& size);
void hover(int cell);
void press(int cell);
void press(int cell, bool rightButton = false);
public slots:
void selectValue(int val);
void enterValue(int val, int cell=-1);
void markValue(int val, int cell=-1, bool set=true);
void flipMarkValue(int val, int cell=-1);
void moveCursor(int dx, int dy);
void update(int cell = -1);
signals:
void valueSelected(int val);
protected:
void wheelEvent(QGraphicsSceneWheelEvent* event);
private:
QGraphicsPixmapItem* m_background;
QGraphicsItem* m_groupLayer;
......
......@@ -42,12 +42,12 @@
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:zoom="2.8284272"
inkscape:cx="270.82937"
inkscape:cy="19.323187"
inkscape:zoom="11.313709"
inkscape:cx="245.8467"
inkscape:cy="28.676153"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:current-layer="svg2"
inkscape:current-layer="cell_markers9"
showgrid="true"
inkscape:snap-global="true">
<inkscape:grid
......@@ -8680,8 +8680,8 @@
id="rect4490"
width="95"
height="50"
x="230"
y="305" />
x="195"
y="10" />
<g
id="cell_symbol"
inkscape:label="#g4462">
......@@ -8726,7 +8726,7 @@
</g>
<g
id="symbol_2"
transform="translate(210,-140)"
transform="translate(175,-435)"
inkscape:label="#g3646">
<rect
y="445"
......@@ -8746,7 +8746,7 @@
</g>
<g
id="symbol_3"
transform="translate(210,-140)"
transform="translate(175,-435)"
inkscape:label="#g3650">
<rect
y="445"
......@@ -8766,7 +8766,7 @@
</g>
<g
id="symbol_4"
transform="translate(210,-140)"
transform="translate(175,-435)"
inkscape:label="#g3654">
<rect
y="445"
......@@ -8782,7 +8782,7 @@
</g>
<g
id="symbol_5"
transform="translate(210,-140)"
transform="translate(175,-435)"
inkscape:label="#g3658">
<rect
y="445"
......@@ -8798,7 +8798,7 @@
</g>
<g
id="symbol_6"
transform="translate(210,-140)"
transform="translate(175,-435)"
inkscape:label="#g3674">
<rect
y="475"
......@@ -8814,7 +8814,7 @@
</g>
<g
id="symbol_7"
transform="translate(210,-140)"
transform="translate(175,-435)"
inkscape:label="#g3670">
<rect
y="475"
......@@ -8830,7 +8830,7 @@
</g>
<g
id="symbol_8"
transform="translate(210,-140)"
transform="translate(175,-435)"
inkscape:label="#g3666">
<rect
y="475"
......@@ -8846,7 +8846,7 @@
</g>
<g
id="symbol_9"
transform="translate(210,-140)"
transform="translate(175,-435)"
inkscape:label="#g3662">
<rect
y="475"
......@@ -8860,4 +8860,180 @@
d="M 104.32634,475.1939 C 99.105136,475.69886 96.507998,481.97824 99.62768,485.63042 C 101.51114,488.27456 105.38138,488.47836 108.12464,487.04466 C 108.57133,488.65908 107.64758,491.49312 105.36824,491.74318 C 103.12083,491.63876 101.89705,488.3845 99.375,490.125 C 98.353774,491.96798 100.90713,494.1738 102.89832,494.61306 C 106.73408,495.64988 111.20519,493.37704 111.94476,489.78534 C 112.8768,486.52808 112.82999,483.00262 111.85161,479.76394 C 110.86293,476.88292 107.73198,474.78504 104.32634,475.1939 z M 104.46869,478.2931 C 107.65646,477.93046 108.87202,481.73288 107.7109,483.8689 C 106.17987,486.60714 101.92451,484.91896 102.30973,482.10462 C 102.16839,480.66146 102.79353,478.80128 104.46869,478.2931 z"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1;display:inline" />
</g>
<g
id="cell_markers9">
<rect
style="fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3442"
width="40"
height="40"
x="230"
y="310" />
<path
id="path3444"
style="fill:#babdb6;fill-opacity:0.50196078;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.75294118"
d="M 233,345 C 233,344 233,315.99996 233,314.99996 C 233,313.99996 234,312.99996 235,312.99996 C 236,312.99996 264,312.99996 265,312.99996 C 266,312.99996 267,313.99996 267,314.99996 C 267,315.99996 267,344 267,345 C 267,346 266,347 265,347 C 264,347 236,347 235,347 C 234,347 233,346 233,345 z"
inkscape:tile-w="35"
inkscape:tile-h="35.00004"
inkscape:tile-cx="19.5"
inkscape:tile-cy="300.37498" />
<g
transform="matrix(0.4,0,0,0.4,160,188)"
inkscape:label="#g3642"
id="markers9_1">
<rect
y="460"
x="-20"
height="20"
width="20"
id="rect3448"
style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="translate(210,-140)" />
<path
inkscape:tile-cy="13.927869"
inkscape:tile-cx="21.246839"
inkscape:tile-h="10.7525"
inkscape:tile-w="4.617"
id="path3450"
d="M -9.0715,460.39459 L -5.76522,460.39459 L -5.76522,479.71297 L -9.75556,479.71297 L -9.75556,465.86985 L -15,468.65913 L -15,465.25 L -11.57971,463.49379 C -10.36361,462.59847 -9.52754,461.56541 -9.0715,460.39459 z"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
transform="translate(210,-140)" />
</g>
<g
inkscape:label="#g3646"
transform="matrix(0.4,0,0,0.4,238,138)"
id="markers9_2">
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3461"
width="20"
height="20"
x="20"
y="445" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1;display:inline"
d="M 23.277272,451 C 23.505292,449.00272 24.265356,447.55642 25.557464,446.6611 C 26.773566,445.76578 28.331698,445.31811 30.231858,445.31811 C 32.360016,445.31811 34.032156,445.83466 35.24828,446.86772 C 36.464382,447.9008 37.072432,449.17492 37.072432,450.69008 L 36.502364,453.16944 L 34.90625,455.6488 L 32.17,458.02486 L 29.775798,460.1943 L 28.977752,461.22736 L 37.072432,461.22736 L 37.072432,464.6365 L 22.707224,464.6365 C 22.935224,463.32794 23.429266,462.08826 24.18935,460.91744 L 28.749732,456.37194 L 32.05599,453.16944 C 32.664042,452.41184 32.968068,451.65428 32.968068,450.89668 C 32.968068,450.1391 32.702064,449.51926 32.17,449.03716 C 31.713982,448.62394 31.067908,448.41731 30.231858,448.41731 C 29.31978,448.41731 28.635724,448.62394 28.179684,449.03716 C 27.64764,449.51926 27.343614,450.31128 27.267608,451.41321 L 23.277272,451 z"
id="path3463"
inkscape:tile-w="7.182005"
inkscape:tile-h="10.7525"
inkscape:tile-cx="101.71575"
inkscape:tile-cy="13.927869" />
</g>
<g
inkscape:label="#g3650"
transform="matrix(0.4,0,0,0.4,238,138)"
id="markers9_3">
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3467"
width="20"
height="20"
x="45"
y="445" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1;display:inline"
d="M 52.114008,450.83876 L 48.351692,450.32222 C 48.655717,449.15142 49.073753,448.22166 49.605797,447.53294 L 51.77198,445.88004 C 52.684056,445.4668 53.748145,445.2602 54.964248,445.2602 C 56.940413,445.2602 58.536548,445.8456 59.752652,447.01642 C 60.740733,447.98062 61.234776,449.0481 61.234776,450.21892 C 61.234776,451.87184 60.208689,453.21482 58.156517,454.24788 C 59.37262,454.4545 60.360701,454.97104 61.120765,455.79748 C 61.804824,456.62394 62.146852,457.62256 62.146852,458.79338 C 62.146852,460.51516 61.500797,461.96146 60.208689,463.13228 C 58.840573,464.30308 57.130429,464.88848 55.078257,464.88848 C 53.178097,464.88848 51.581964,464.4064 50.289856,463.4422 C 48.997745,462.40912 48.275685,461.10058 48.123673,459.51654 L 52,459 C 52.152012,459.9642 52.49404,460.68734 53.026085,461.16944 C 53.558129,461.65154 54.242188,461.89258 55.078257,461.89258 C 55.914328,461.89258 56.598385,461.58266 57.130429,460.96282 C 57.738481,460.41186 58.042508,459.65428 58.042508,458.69008 C 58.042508,457.72588 57.776485,456.9683 57.24444,456.41732 C 56.636389,455.86636 55.952332,455.59088 55.192268,455.59088 L 53.368113,455.9008 L 53.824152,452.9049 L 56.332364,452.28506 L 57.130429,450.42554 L 56.560381,448.87594 C 56.104344,448.4627 55.534296,448.2561 54.850237,448.2561 C 54.166181,448.2561 53.558129,448.49714 53.026085,448.97924 L 52.114008,450.83876 z"
id="path3469"
inkscape:tile-w="7.011"
inkscape:tile-h="10.925"
inkscape:tile-cx="182.1913"
inkscape:tile-cy="14.198529" />
</g>
<g
inkscape:label="#g3654"
transform="matrix(0.4,0,0,0.4,208,148)"
id="markers9_4">
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3473"
width="20"
height="20"
x="70"
y="445" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1;display:inline"
d="M 80.875,445.375 C 77.7872,449.4427 74.69942,453.5104 71.61164,457.5781 C 71.783714,458.60252 71.26159,460.2505 71.883302,460.87102 C 74.69052,460.87102 77.497716,460.87102 80.304932,460.87102 C 80.468124,462.06894 79.976504,463.855 80.554332,464.68048 C 81.71955,464.52768 83.569546,464.98996 84.295266,464.44238 C 84.403356,463.30102 84.079888,461.772 84.4556,460.87102 C 85.358676,460.68774 87.287458,461.42578 86.860482,460.04778 C 86.660126,459.0685 87.54362,457.11566 85.738208,457.5781 C 84.829372,457.64464 83.925676,457.70654 84.295266,456.62474 C 84.295266,452.87482 84.295266,449.12492 84.295266,445.375 C 83.15517,445.375 82.015076,445.375 80.875,445.375 z M 80.304932,451.05688 C 80.304932,453.23062 80.304932,455.40436 80.304932,457.5781 C 78.666054,457.5781 77.027196,457.5781 75.388318,457.5781 C 77.027196,455.40436 78.666074,453.23062 80.304932,451.05688 z"
id="path3475" />
</g>
<g
inkscape:label="#g3658"
transform="matrix(0.4,0,0,0.4,208,148)"
id="markers9_5">
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3479"
width="20"
height="20"
x="95"
y="445" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1;display:inline"
d="M 105.99661,451.56136 C 109.88527,451.47864 112.84984,455.04646 112.50495,458.37496 C 112.3927,461.60658 109.4511,464.716 105.73248,464.78064 C 102.8726,465.0108 99.700756,463.70694 98.714674,461.15538 C 98.013394,460.20864 98.31632,459.13888 99.75,459.375 C 101.28391,458.84378 102.93353,459.18574 103.0991,460.87432 C 104.18811,462.59086 107.39466,461.97066 107.88322,460.11898 C 108.59959,458.39078 108.52,455.87658 106.53213,454.86498 C 104.5512,453.71322 103.07884,455.62918 101.31727,455.82116 C 99.85475,455.84814 97.935548,455.493 99.070884,453.83888 C 99.572746,451.04506 100.19738,448.25722 100.75221,445.46626 C 104.32449,445.46626 107.89679,445.46626 111.46907,445.46626 C 111.10746,446.52914 112.342,448.9721 110.53661,448.9787 C 108.3012,448.9787 106.06581,448.9787 103.8304,448.9787 C 103.83988,450.08936 102.36866,452.86164 104.71402,451.85192 C 105.14153,451.75506 105.56907,451.6582 105.99661,451.56136 z"
id="path3481" />
</g>
<g
inkscape:label="#g3674"
transform="matrix(0.4,0,0,0.4,248,136)"
id="markers9_6">
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3485"
width="20"
height="20"
x="20"
y="475" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1;display:inline"
d="M 29.63228,475.22404 C 26.25542,475.5513 23.68744,478.31758 23.24178,481.24438 C 22.65316,484.12686 22.7236,487.13488 23.45778,489.98958 C 24.04478,492.10144 25.75748,494.0223 28.16616,494.58818 C 31.14118,495.43604 34.86324,494.35258 36.18782,491.69628 C 37.69174,488.849 37.1237,484.96678 34.1847,483.02448 C 32.23202,481.63888 29.05724,481.59422 27.375,483.375 C 26.73212,483.40178 27.3994,481.87984 27.37136,481.30678 C 27.62518,479.92768 28.57496,478.2434 30.34038,478.19892 C 31.43004,478.11662 32.20856,478.9205 32.39528,479.81924 C 33.07408,480.99344 34.90068,479.7654 36.07538,480.02582 C 37.2212,479.48398 35.75902,477.85512 35.2482,477.11202 C 34.02786,475.64058 31.91444,475.11288 29.9524,475.21784 L 29.79224,475.2205 L 29.63228,475.22404 L 29.63228,475.22404 z M 29.7747,484.71536 C 31.57868,484.47748 32.99442,486.08386 32.96466,487.60172 C 32.89138,488.85906 32.69874,490.27816 31.93978,491.34148 C 30.67328,492.3392 28.66654,491.6672 27.98426,490.4004 C 27.25244,489.15364 27.23396,487.59514 27.76704,486.28448 C 28.10924,485.5179 28.85992,484.87866 29.7747,484.71536 z"
id="path3487" />
</g>
<g
inkscape:label="#g3670"
transform="matrix(0.4,0,0,0.4,218,146)"
id="markers9_7">
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3491"
width="20"
height="20"
x="45"
y="475" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1;display:inline"
d="M 57.459032,479.16276 C 54.380812,479.16276 51.302594,479.16276 48.224374,479.16276 C 48.583724,478.10864 47.381384,475.72608 49.083526,475.65032 C 53.433512,475.65032 57.783518,475.65032 62.133504,475.65032 C 62.07978,476.95122 62.528478,478.4773 61.125,479.375 C 57.531758,483.41488 55.586374,488.50608 55.001024,493.60962 C 55.238824,495.4351 52.527856,494.46166 51.304554,494.58642 C 50.825114,493.1811 51.523972,491.35648 51.778754,489.82716 C 52.768376,485.95516 54.726462,482.28594 57.459032,479.16276 z"
id="path3493" />
</g>
<g
inkscape:label="#g3666"
transform="matrix(0.4,0,0,0.4,218,146)"
id="markers9_8">
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3497"
width="20"
height="20"
x="70"
y="475" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1;display:inline"
d="M 79.001178,475.22562 C 75.836032,475.34962 73.038476,478.2182 73.839124,481.08038 C 73.959254,482.55266 75.644376,483.4681 76.443962,484.31116 C 74.856288,484.87612 73.68037,486.19284 73.364504,487.70624 C 72.742932,490.25892 74.03336,493.26688 76.867778,494.25432 C 80.021984,495.49358 84.38239,494.92852 86.257408,492.11412 C 87.35182,490.28746 87.536716,487.82648 86.230766,486.0469 C 85.496564,485.29196 82.552616,484.41498 84.431754,483.47812 C 85.7014,482.9079 86.04117,481.66948 86.367976,480.54214 C 86.962226,477.98146 84.347148,475.5707 81.605276,475.30976 C 80.740664,475.22496 79.87049,475.19746 79.001178,475.22562 z M 79.428694,478.13112 C 80.948262,477.83856 82.379922,478.80042 82.441526,480.20152 C 82.800096,481.81498 80.853374,483.10708 79.211956,482.6534 C 76.840196,482.01722 77.162982,478.68718 79.428694,478.13112 z M 79.5,485.75 C 81.328214,485.43328 83.134626,486.77444 83.127164,488.45612 C 83.626466,490.52686 81.155738,492.83262 78.897928,491.6471 C 76.382078,490.5269 76.708824,486.3813 79.5,485.75 z"
id="path3499" />
</g>
<g
inkscape:label="#g3662"
transform="matrix(0.4,0,0,0.4,218,146)"
id="markers9_9">
<rect
style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3503"
width="20"
height="20"
x="95"
y="475" />
<path
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-opacity:1;display:inline"
d="M 104.32634,475.1939 C 99.105136,475.69886 96.507998,481.97824 99.62768,485.63042 C 101.51114,488.27456 105.38138,488.47836 108.12464,487.04466 C 108.57133,488.65908 107.64758,491.49312 105.36824,491.74318 C 103.12083,491.63876 101.89705,488.3845 99.375,490.125 C 98.353774,491.96798 100.90713,494.1738 102.89832,494.61306 C 106.73408,495.64988 111.20519,493.37704 111.94476,489.78534 C 112.8768,486.52808 112.82999,483.00262 111.85161,479.76394 C 110.86293,476.88292 107.73198,474.78504 104.32634,475.1939 z M 104.46869,478.2931 C 107.65646,477.93046 108.87202,481.73288 107.7109,483.8689 C 106.17987,486.60714 101.92451,484.91896 102.30973,482.10462 C 102.16839,480.66146 102.79353,478.80128 104.46869,478.2931 z"
id="path3505" />
</g>
</g>
</svg>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment