Kaydet (Commit) 7c7520ba authored tarafından Cédric Bosdonnat's avatar Cédric Bosdonnat

Template Manager: show names on several lines

Change-Id: I6990bb6ac52889de36f3ec2cce33e4dc2f3da2ea
üst 34856077
......@@ -22,6 +22,7 @@
#include <basegfx/vector/b2dvector.hxx>
#include <drawinglayer/attribute/fontattribute.hxx>
#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
#include <osl/mutex.hxx>
#include <vcl/bitmapex.hxx>
#include "sfx2/dllapi.h"
......@@ -106,6 +107,7 @@ public:
virtual void Paint (drawinglayer::processor2d::BaseProcessor2D *pProcessor,
const ThumbnailItemAttributes *pAttrs);
void addTextPrimitives (const rtl::OUString& rText, const ThumbnailItemAttributes *pAttrs, Point aPos, drawinglayer::primitive2d::Primitive2DSequence& rSeq);
static drawinglayer::primitive2d::PolygonHairlinePrimitive2D*
createBorderLine (const basegfx::B2DPolygon &rPolygon);
......
......@@ -84,8 +84,6 @@ void TemplateContainerItem::Paint (drawinglayer::processor2d::BaseProcessor2D *p
Size aThumbSize( ( maThumbnailArea.getWidth() - 3 * nThumbPadding ) / 2, ( maThumbnailArea.getHeight() - 3* nThumbPadding ) / 2 );
// Draw thumbnail
Point aPos = maPrev1Pos;
for (int i=0; i<4; ++i)
{
long nPosX = 0;
......@@ -153,21 +151,7 @@ void TemplateContainerItem::Paint (drawinglayer::processor2d::BaseProcessor2D *p
}
}
// Draw centered text below thumbnail
aPos = maTextPos;
// Create the text primitive
basegfx::B2DHomMatrix aTextMatrix( createScaleTranslateB2DHomMatrix(
pAttrs->aFontSize.getX(), pAttrs->aFontSize.getY(),
double( aPos.X() ), double( aPos.Y() ) ) );
aSeq[nCount++] = Primitive2DReference(
new TextSimplePortionPrimitive2D(aTextMatrix,
maTitle,0,maTitle.getLength(),
std::vector< double >( ),
pAttrs->aFontAttr,
com::sun::star::lang::Locale(),
Color(COL_BLACK).getBColor() ) );
addTextPrimitives(maTitle, pAttrs, maTextPos, aSeq);
pProcessor->process(aSeq);
}
......
......@@ -51,12 +51,6 @@ void TemplateLocalView::Populate ()
{
OUString aRegionName(mpDocTemplates->GetFullRegionName(i));
if ((sal_uInt32)aRegionName.getLength() > mpItemAttrs->nMaxTextLenght)
{
aRegionName = aRegionName.copy(0,mpItemAttrs->nMaxTextLenght-3);
aRegionName += "...";
}
TemplateContainerItem* pItem = new TemplateContainerItem( *this );
pItem->mnId = i+1;
pItem->maTitle = aRegionName;
......@@ -69,12 +63,6 @@ void TemplateLocalView::Populate ()
OUString aName = mpDocTemplates->GetName(i,j);
OUString aURL = mpDocTemplates->GetPath(i,j);
if ((sal_uInt32)aName.getLength() > mpItemAttrs->nMaxTextLenght)
{
aName = aName.copy(0,mpItemAttrs->nMaxTextLenght-3);
aName += "...";
}
TemplateItemProperties aProperties;;
aProperties.nId = j+1;
aProperties.nDocId = j;
......@@ -162,12 +150,6 @@ sal_uInt16 TemplateLocalView::createRegion(const OUString &rName)
OUString aRegionName = rName;
if ((sal_uInt32)aRegionName.getLength() > mpItemAttrs->nMaxTextLenght)
{
aRegionName = aRegionName.copy(0,mpItemAttrs->nMaxTextLenght-3);
aRegionName += "...";
}
TemplateContainerItem* pItem = new TemplateContainerItem( *this );
pItem->mnId = nRegionId+1;
pItem->maTitle = aRegionName;
......
......@@ -108,34 +108,11 @@ void TemplateViewItem::Paint(drawinglayer::processor2d::BaseProcessor2D *pProces
// draw thumbnail borders
aSeq[3] = Primitive2DReference(createBorderLine(aBounds));
// Draw centered text below thumbnail
// Create the text primitive
basegfx::B2DHomMatrix aTitleMatrix( createScaleTranslateB2DHomMatrix(
pAttrs->aFontSize.getX(), pAttrs->aFontSize.getY(),
double( maTextPos.X() ), double( maTextPos.Y() ) ) );
aSeq[4] = Primitive2DReference(
new TextSimplePortionPrimitive2D(aTitleMatrix,
maTitle,0,pAttrs->nMaxTextLenght,
std::vector< double >( ),
pAttrs->aFontAttr,
com::sun::star::lang::Locale(),
Color(COL_BLACK).getBColor() ) );
addTextPrimitives(maTitle, pAttrs, maTextPos, aSeq);
if (!maSubTitle.isEmpty())
{
basegfx::B2DHomMatrix aSubTitleMatrix( createScaleTranslateB2DHomMatrix(
pAttrs->aFontSize.getX()*SUBTITLE_SCALE_FACTOR, pAttrs->aFontSize.getY()*SUBTITLE_SCALE_FACTOR,
double( maSubTitlePos.X() ), double( maSubTitlePos.Y() ) ) );
aSeq[5] = Primitive2DReference(
new TextSimplePortionPrimitive2D(aSubTitleMatrix,
maSubTitle,0,pAttrs->nMaxTextLenght,
std::vector< double >( ),
pAttrs->aFontAttr,
com::sun::star::lang::Locale(),
Color(COL_BLACK).getBColor() ) );
addTextPrimitives(maSubTitle, pAttrs, maSubTitlePos, aSeq);
}
pProcessor->process(aSeq);
......
......@@ -34,6 +34,7 @@
#include <drawinglayer/processor2d/baseprocessor2d.hxx>
#include <vcl/button.hxx>
#include <vcl/svapp.hxx>
#include <vcl/texteng.hxx>
using namespace basegfx;
using namespace basegfx::tools;
......@@ -127,7 +128,8 @@ void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProc
if ( mbSelected || mbHover )
aFillColor = pAttrs->aHighlightColor;
aSeq[0] = Primitive2DReference( new PolyPolygonColorPrimitive2D(
sal_uInt32 nPrimitive = 0;
aSeq[nPrimitive++] = Primitive2DReference( new PolyPolygonColorPrimitive2D(
B2DPolyPolygon(Polygon(maDrawArea,5,5).getB2DPolygon()),
aFillColor));
......@@ -135,7 +137,7 @@ void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProc
Point aPos = maPrev1Pos;
Size aImageSize = maPreview1.GetSizePixel();
aSeq[1] = Primitive2DReference( new FillBitmapPrimitive2D(
aSeq[nPrimitive++] = Primitive2DReference( new FillBitmapPrimitive2D(
createTranslateB2DHomMatrix(aPos.X(),aPos.Y()),
FillBitmapAttribute(maPreview1,
B2DPoint(0,0),
......@@ -156,27 +158,74 @@ void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProc
aBounds.append(B2DPoint(fPosX,fPosY+fHeight));
aBounds.setClosed(true);
aSeq[2] = Primitive2DReference(createBorderLine(aBounds));
aSeq[nPrimitive++] = Primitive2DReference(createBorderLine(aBounds));
// Draw centered text below thumbnail
// Draw text below thumbnail
aPos = maTextPos;
// Create the text primitive
basegfx::B2DHomMatrix aTextMatrix( createScaleTranslateB2DHomMatrix(
pAttrs->aFontSize.getX(), pAttrs->aFontSize.getY(),
double( aPos.X() ), double( aPos.Y() ) ) );
aSeq[3] = Primitive2DReference(
new TextSimplePortionPrimitive2D(aTextMatrix,
maTitle,0,pAttrs->nMaxTextLenght,
std::vector< double >( ),
pAttrs->aFontAttr,
com::sun::star::lang::Locale(),
Color(COL_BLACK).getBColor() ) );
addTextPrimitives( maTitle, pAttrs, maTextPos, aSeq );
pProcessor->process(aSeq);
}
void ThumbnailViewItem::addTextPrimitives (const rtl::OUString& rText, const ThumbnailItemAttributes *pAttrs, Point aPos, Primitive2DSequence& rSeq)
{
drawinglayer::primitive2d::TextLayouterDevice aTextDev;
rtl::OUString aText (rText);
TextEngine aTextEngine;
aTextEngine.SetMaxTextWidth(maDrawArea.getWidth());
aTextEngine.SetText(rText);
sal_Int32 nPrimitives = rSeq.getLength();
rSeq.realloc(nPrimitives + aTextEngine.GetLineCount(0));
// Create the text primitives
sal_uInt16 nLineStart = 0;
for (sal_uInt16 i=0; i<aTextEngine.GetLineCount(0); ++i)
{
sal_uInt16 nLineLength = aTextEngine.GetLineLen(0, i);
double nLineWidth = aTextDev.getTextWidth (aText, nLineStart, nLineLength);
bool bTooLong = (aPos.getY() + aTextEngine.GetCharHeight()) > maDrawArea.Bottom();
if (bTooLong && (nLineLength + nLineStart) < rText.getLength())
{
// Add the '...' to the last line to show, even though it may require to shorten the line
double nDotsWidth = aTextDev.getTextWidth(rtl::OUString("..."),0,3);
sal_uInt16 nLength = nLineLength - 1;
while ( nDotsWidth + aTextDev.getTextWidth(aText, nLineStart, nLength) > maDrawArea.getWidth() && nLength > 0)
{
--nLength;
}
aText = aText.copy(0, nLineStart+nLength);
aText += "...";
nLineLength = nLength + 3;
}
double nLineX = maDrawArea.Left() + (maDrawArea.getWidth() - nLineWidth) / 2.0;
basegfx::B2DHomMatrix aTextMatrix( createScaleTranslateB2DHomMatrix(
pAttrs->aFontSize.getX(), pAttrs->aFontSize.getY(),
nLineX, double( aPos.Y() ) ) );
rSeq[nPrimitives++] = Primitive2DReference(
new TextSimplePortionPrimitive2D(aTextMatrix,
aText,nLineStart,nLineLength,
std::vector< double >( ),
pAttrs->aFontAttr,
com::sun::star::lang::Locale(),
Color(COL_BLACK).getBColor() ) );
nLineStart += nLineLength;
aPos.setY(aPos.getY() + aTextEngine.GetCharHeight());
if (bTooLong)
break;
}
}
drawinglayer::primitive2d::PolygonHairlinePrimitive2D*
ThumbnailViewItem::createBorderLine (const basegfx::B2DPolygon& rPolygon)
{
......
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