[Libreoffice-commits] .: Branch 'libreoffice-4-0' - sfx2/inc sfx2/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Thu Jan 17 02:17:25 PST 2013
sfx2/inc/sfx2/thumbnailviewitem.hxx | 2
sfx2/source/control/templatecontaineritem.cxx | 18 -----
sfx2/source/control/templatelocalview.cxx | 18 -----
sfx2/source/control/templateviewitem.cxx | 27 --------
sfx2/source/control/thumbnailviewitem.cxx | 81 ++++++++++++++++++++------
5 files changed, 70 insertions(+), 76 deletions(-)
New commits:
commit 8c682f8ecf64527d44380276697c13b9b0185599
Author: Cédric Bosdonnat <cedric.bosdonnat at free.fr>
Date: Wed Jan 16 13:51:45 2013 +0100
Template Manager: show names on several lines
Change-Id: I6990bb6ac52889de36f3ec2cce33e4dc2f3da2ea
Reviewed-on: https://gerrit.libreoffice.org/1715
Reviewed-by: Noel Power <noel.power at suse.com>
Tested-by: Noel Power <noel.power at suse.com>
diff --git a/sfx2/inc/sfx2/thumbnailviewitem.hxx b/sfx2/inc/sfx2/thumbnailviewitem.hxx
index 9609667..18b7eae 100644
--- a/sfx2/inc/sfx2/thumbnailviewitem.hxx
+++ b/sfx2/inc/sfx2/thumbnailviewitem.hxx
@@ -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);
diff --git a/sfx2/source/control/templatecontaineritem.cxx b/sfx2/source/control/templatecontaineritem.cxx
index 25fa5fe..febd87f 100644
--- a/sfx2/source/control/templatecontaineritem.cxx
+++ b/sfx2/source/control/templatecontaineritem.cxx
@@ -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);
}
diff --git a/sfx2/source/control/templatelocalview.cxx b/sfx2/source/control/templatelocalview.cxx
index 7956101..76516d7 100644
--- a/sfx2/source/control/templatelocalview.cxx
+++ b/sfx2/source/control/templatelocalview.cxx
@@ -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;
@@ -182,12 +170,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;
diff --git a/sfx2/source/control/templateviewitem.cxx b/sfx2/source/control/templateviewitem.cxx
index 51a2862..9f06ebb 100644
--- a/sfx2/source/control/templateviewitem.cxx
+++ b/sfx2/source/control/templateviewitem.cxx
@@ -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);
diff --git a/sfx2/source/control/thumbnailviewitem.cxx b/sfx2/source/control/thumbnailviewitem.cxx
index e5a07db..2e6eb96 100644
--- a/sfx2/source/control/thumbnailviewitem.cxx
+++ b/sfx2/source/control/thumbnailviewitem.cxx
@@ -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)
{
More information about the Libreoffice-commits
mailing list