529
560
double borderVertPadding = borderVertTotalPadding / (numImagesVert - 1);
530
561
double borderHorizPadding = borderHorizTotalPadding / (numImagesHoriz - 1);
531
const BorderArtInfo &ba = m_borderImages[maybeBorderImg.get()];
532
if (!ba.m_offsets.empty())
562
if (maybeBorderImg.get() < m_borderImages.size())
534
WPXPropertyList baProps;
535
baProps.insert("draw:stroke", "none");
536
baProps.insert("draw:fill", "solid");
537
baProps.insert("draw:fill-color", "#ffffff");
538
m_painter->setStyle(baProps, WPXPropertyListVector());
539
WPXPropertyList topRectProps;
540
topRectProps.insert("svg:x", x);
541
topRectProps.insert("svg:y", y);
542
topRectProps.insert("svg:height", borderImgWidth);
543
topRectProps.insert("svg:width", width);
544
m_painter->drawRectangle(topRectProps);
545
WPXPropertyList rightRectProps;
546
rightRectProps.insert("svg:x", x + width - borderImgWidth);
547
rightRectProps.insert("svg:y", y);
548
rightRectProps.insert("svg:height", height);
549
rightRectProps.insert("svg:width", borderImgWidth);
550
m_painter->drawRectangle(rightRectProps);
551
WPXPropertyList botRectProps;
552
botRectProps.insert("svg:x", x);
553
botRectProps.insert("svg:y", y + height - borderImgWidth);
554
botRectProps.insert("svg:height", borderImgWidth);
555
botRectProps.insert("svg:width", width);
556
m_painter->drawRectangle(botRectProps);
557
WPXPropertyList leftRectProps;
558
leftRectProps.insert("svg:x", x);
559
leftRectProps.insert("svg:y", y);
560
leftRectProps.insert("svg:height", height);
561
leftRectProps.insert("svg:width", borderImgWidth);
562
m_painter->drawRectangle(leftRectProps);
563
std::vector<unsigned>::const_iterator iOffset = ba.m_offsets.begin();
564
boost::optional<Color> oneBitColor;
565
if (info.m_lineBackColor.is_initialized())
567
oneBitColor = info.m_lineBackColor.get().getFinalColor(m_paletteColors);
570
unsigned iOrdOff = find(ba.m_offsetsOrdered.begin(),
571
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
572
if (iOrdOff < ba.m_images.size())
574
const BorderImgInfo &bi = ba.m_images[iOrdOff];
575
writeImage(x, y, borderImgWidth, borderImgWidth,
576
bi.m_type, bi.m_imgBlob, oneBitColor);
578
if (iOffset + 1 != ba.m_offsets.end())
583
iOrdOff = find(ba.m_offsetsOrdered.begin(),
584
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
585
if (iOrdOff < ba.m_images.size())
587
const BorderImgInfo &bi = ba.m_images[iOrdOff];
588
for (unsigned iTop = 1; iTop < numImagesHoriz - 1; ++iTop)
590
double imgX = stretch ?
591
x + borderImgWidth + (iTop - 1) * stretchedImgWidth :
592
x + iTop * (borderImgWidth + borderHorizPadding);
594
borderImgWidth, stretchedImgWidth,
595
bi.m_type, bi.m_imgBlob, oneBitColor);
598
if (iOffset + 1 != ba.m_offsets.end())
603
iOrdOff = find(ba.m_offsetsOrdered.begin(),
604
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
605
if (iOrdOff < ba.m_images.size())
607
const BorderImgInfo &bi = ba.m_images[iOrdOff];
608
writeImage(x + width - borderImgWidth, y,
609
borderImgWidth, borderImgWidth,
610
bi.m_type, bi.m_imgBlob, oneBitColor);
612
if (iOffset + 1 != ba.m_offsets.end())
617
iOrdOff = find(ba.m_offsetsOrdered.begin(),
618
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
619
if (iOrdOff < ba.m_images.size())
621
const BorderImgInfo &bi = ba.m_images[iOrdOff];
622
for (unsigned iRight = 1; iRight < numImagesVert - 1; ++iRight)
624
double imgY = stretch ?
625
y + borderImgWidth + (iRight - 1) * stretchedImgHeight :
626
y + iRight * (borderImgWidth + borderVertPadding);
564
const BorderArtInfo &ba = m_borderImages[maybeBorderImg.get()];
565
if (!ba.m_offsets.empty())
567
WPXPropertyList baProps;
568
baProps.insert("draw:stroke", "none");
569
baProps.insert("draw:fill", "solid");
570
baProps.insert("draw:fill-color", "#ffffff");
571
m_painter->setStyle(baProps, WPXPropertyListVector());
572
WPXPropertyList topRectProps;
573
topRectProps.insert("svg:x", x);
574
topRectProps.insert("svg:y", y);
575
topRectProps.insert("svg:height", borderImgWidth);
576
topRectProps.insert("svg:width", width);
577
m_painter->drawRectangle(topRectProps);
578
WPXPropertyList rightRectProps;
579
rightRectProps.insert("svg:x", x + width - borderImgWidth);
580
rightRectProps.insert("svg:y", y);
581
rightRectProps.insert("svg:height", height);
582
rightRectProps.insert("svg:width", borderImgWidth);
583
m_painter->drawRectangle(rightRectProps);
584
WPXPropertyList botRectProps;
585
botRectProps.insert("svg:x", x);
586
botRectProps.insert("svg:y", y + height - borderImgWidth);
587
botRectProps.insert("svg:height", borderImgWidth);
588
botRectProps.insert("svg:width", width);
589
m_painter->drawRectangle(botRectProps);
590
WPXPropertyList leftRectProps;
591
leftRectProps.insert("svg:x", x);
592
leftRectProps.insert("svg:y", y);
593
leftRectProps.insert("svg:height", height);
594
leftRectProps.insert("svg:width", borderImgWidth);
595
m_painter->drawRectangle(leftRectProps);
596
std::vector<unsigned>::const_iterator iOffset = ba.m_offsets.begin();
597
boost::optional<Color> oneBitColor;
598
if (!!info.m_lineBackColor)
600
oneBitColor = info.m_lineBackColor.get().getFinalColor(m_paletteColors);
603
unsigned iOrdOff = find(ba.m_offsetsOrdered.begin(),
604
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
605
if (iOrdOff < ba.m_images.size())
607
const BorderImgInfo &bi = ba.m_images[iOrdOff];
608
writeImage(x, y, borderImgWidth, borderImgWidth,
609
bi.m_type, bi.m_imgBlob, oneBitColor);
611
if (iOffset + 1 != ba.m_offsets.end())
616
iOrdOff = find(ba.m_offsetsOrdered.begin(),
617
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
618
if (iOrdOff < ba.m_images.size())
620
const BorderImgInfo &bi = ba.m_images[iOrdOff];
621
for (unsigned iTop = 1; iTop < numImagesHoriz - 1; ++iTop)
623
double imgX = stretch ?
624
x + borderImgWidth + (iTop - 1) * stretchedImgWidth :
625
x + iTop * (borderImgWidth + borderHorizPadding);
627
borderImgWidth, stretchedImgWidth,
628
bi.m_type, bi.m_imgBlob, oneBitColor);
631
if (iOffset + 1 != ba.m_offsets.end())
636
iOrdOff = find(ba.m_offsetsOrdered.begin(),
637
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
638
if (iOrdOff < ba.m_images.size())
640
const BorderImgInfo &bi = ba.m_images[iOrdOff];
641
writeImage(x + width - borderImgWidth, y,
642
borderImgWidth, borderImgWidth,
643
bi.m_type, bi.m_imgBlob, oneBitColor);
645
if (iOffset + 1 != ba.m_offsets.end())
650
iOrdOff = find(ba.m_offsetsOrdered.begin(),
651
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
652
if (iOrdOff < ba.m_images.size())
654
const BorderImgInfo &bi = ba.m_images[iOrdOff];
655
for (unsigned iRight = 1; iRight < numImagesVert - 1; ++iRight)
657
double imgY = stretch ?
658
y + borderImgWidth + (iRight - 1) * stretchedImgHeight :
659
y + iRight * (borderImgWidth + borderVertPadding);
660
writeImage(x + width - borderImgWidth,
662
stretchedImgHeight, borderImgWidth,
663
bi.m_type, bi.m_imgBlob, oneBitColor);
666
if (iOffset + 1 != ba.m_offsets.end())
671
iOrdOff = find(ba.m_offsetsOrdered.begin(),
672
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
673
if (iOrdOff < ba.m_images.size())
675
const BorderImgInfo &bi = ba.m_images[iOrdOff];
627
676
writeImage(x + width - borderImgWidth,
629
stretchedImgHeight, borderImgWidth,
630
bi.m_type, bi.m_imgBlob, oneBitColor);
633
if (iOffset + 1 != ba.m_offsets.end())
638
iOrdOff = find(ba.m_offsetsOrdered.begin(),
639
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
640
if (iOrdOff < ba.m_images.size())
642
const BorderImgInfo &bi = ba.m_images[iOrdOff];
643
writeImage(x + width - borderImgWidth,
644
y + height - borderImgWidth,
645
borderImgWidth, borderImgWidth,
646
bi.m_type, bi.m_imgBlob, oneBitColor);
648
if (iOffset + 1 != ba.m_offsets.end())
653
iOrdOff = find(ba.m_offsetsOrdered.begin(),
654
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
655
if (iOrdOff < ba.m_images.size())
657
const BorderImgInfo &bi = ba.m_images[iOrdOff];
658
for (unsigned iBot = 1; iBot < numImagesHoriz - 1; ++iBot)
660
double imgX = stretch ?
661
x + width - borderImgWidth - iBot * stretchedImgWidth :
662
x + width - borderImgWidth - iBot * (borderImgWidth + borderHorizPadding);
664
imgX, y + height - borderImgWidth,
665
borderImgWidth, stretchedImgWidth,
666
bi.m_type, bi.m_imgBlob, oneBitColor);
669
if (iOffset + 1 != ba.m_offsets.end())
674
iOrdOff = find(ba.m_offsetsOrdered.begin(),
675
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
676
if (iOrdOff < ba.m_images.size())
678
const BorderImgInfo &bi = ba.m_images[iOrdOff];
679
writeImage(x, y + height - borderImgWidth,
680
borderImgWidth, borderImgWidth,
681
bi.m_type, bi.m_imgBlob, oneBitColor);
683
if (iOffset + 1 != ba.m_offsets.end())
688
iOrdOff = find(ba.m_offsetsOrdered.begin(),
689
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
690
if (iOrdOff < ba.m_images.size())
692
const BorderImgInfo &bi = ba.m_images[iOrdOff];
693
for (unsigned iLeft = 1; iLeft < numImagesVert - 1; ++iLeft)
695
double imgY = stretch ?
696
y + height - borderImgWidth - iLeft * stretchedImgHeight :
697
y + height - borderImgWidth -
698
iLeft * (borderImgWidth + borderVertPadding);
699
writeImage(x, imgY, stretchedImgHeight, borderImgWidth,
700
bi.m_type, bi.m_imgBlob, oneBitColor);
677
y + height - borderImgWidth,
678
borderImgWidth, borderImgWidth,
679
bi.m_type, bi.m_imgBlob, oneBitColor);
681
if (iOffset + 1 != ba.m_offsets.end())
686
iOrdOff = find(ba.m_offsetsOrdered.begin(),
687
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
688
if (iOrdOff < ba.m_images.size())
690
const BorderImgInfo &bi = ba.m_images[iOrdOff];
691
for (unsigned iBot = 1; iBot < numImagesHoriz - 1; ++iBot)
693
double imgX = stretch ?
694
x + width - borderImgWidth - iBot * stretchedImgWidth :
695
x + width - borderImgWidth - iBot * (borderImgWidth + borderHorizPadding);
697
imgX, y + height - borderImgWidth,
698
borderImgWidth, stretchedImgWidth,
699
bi.m_type, bi.m_imgBlob, oneBitColor);
702
if (iOffset + 1 != ba.m_offsets.end())
707
iOrdOff = find(ba.m_offsetsOrdered.begin(),
708
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
709
if (iOrdOff < ba.m_images.size())
711
const BorderImgInfo &bi = ba.m_images[iOrdOff];
712
writeImage(x, y + height - borderImgWidth,
713
borderImgWidth, borderImgWidth,
714
bi.m_type, bi.m_imgBlob, oneBitColor);
716
if (iOffset + 1 != ba.m_offsets.end())
721
iOrdOff = find(ba.m_offsetsOrdered.begin(),
722
ba.m_offsetsOrdered.end(), *iOffset) - ba.m_offsetsOrdered.begin();
723
if (iOrdOff < ba.m_images.size())
725
const BorderImgInfo &bi = ba.m_images[iOrdOff];
726
for (unsigned iLeft = 1; iLeft < numImagesVert - 1; ++iLeft)
728
double imgY = stretch ?
729
y + height - borderImgWidth - iLeft * stretchedImgHeight :
730
y + height - borderImgWidth -
731
iLeft * (borderImgWidth + borderVertPadding);
732
writeImage(x, imgY, stretchedImgHeight, borderImgWidth,
733
bi.m_type, bi.m_imgBlob, oneBitColor);