summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/sallayout.hxx16
-rw-r--r--vcl/quartz/ctlayout.cxx54
-rw-r--r--vcl/source/outdev/text.cxx26
3 files changed, 69 insertions, 27 deletions
diff --git a/vcl/inc/sallayout.hxx b/vcl/inc/sallayout.hxx
index 03f314fe1c87..d191a38417cf 100644
--- a/vcl/inc/sallayout.hxx
+++ b/vcl/inc/sallayout.hxx
@@ -40,19 +40,6 @@ typedef unsigned short LanguageType;
class SalGraphics;
class PhysicalFontFace;
-// Layout options
-#define SAL_LAYOUT_BIDI_RTL 0x0001
-#define SAL_LAYOUT_BIDI_STRONG 0x0002
-#define SAL_LAYOUT_RIGHT_ALIGN 0x0004
-#define SAL_LAYOUT_KERNING_PAIRS 0x0010
-#define SAL_LAYOUT_KERNING_ASIAN 0x0020
-#define SAL_LAYOUT_VERTICAL 0x0040
-#define SAL_LAYOUT_COMPLEX_DISABLED 0x0100
-#define SAL_LAYOUT_ENABLE_LIGATURES 0x0200
-#define SAL_LAYOUT_SUBSTITUTE_DIGITS 0x0400
-#define SAL_LAYOUT_KASHIDA_JUSTIFICATON 0x0800
-#define SAL_LAYOUT_DISABLE_GLYPH_PROCESSING 0x1000
-#define SAL_LAYOUT_FOR_FALLBACK 0x2000
// used for managing runs e.g. for BiDi, glyph and script fallback
class VCL_PLUGIN_PUBLIC ImplLayoutRuns
@@ -99,7 +86,8 @@ public:
public:
ImplLayoutArgs( const sal_Unicode* pStr, int nLength,
- int nMinCharPos, int nEndCharPos, int nFlags, const LanguageTag& rLanguageTag );
+ int nMinCharPos, int nEndCharPos, int nFlags,
+ const LanguageTag& rLanguageTag );
void SetLayoutWidth( long nWidth ) { mnLayoutWidth = nWidth; }
void SetDXArray( const sal_Int32* pDXArray ) { mpDXArray = pDXArray; }
diff --git a/vcl/quartz/ctlayout.cxx b/vcl/quartz/ctlayout.cxx
index cf440990f3e4..ea6d406bddef 100644
--- a/vcl/quartz/ctlayout.cxx
+++ b/vcl/quartz/ctlayout.cxx
@@ -380,6 +380,60 @@ void CTLayout::drawCTLine(AquaSalGraphics& rAquaGraphics, CTLineRef ctline, cons
// draw the text
CTLineDraw( ctline, rAquaGraphics.mrContext );
+ if(mnLayoutFlags & SAL_LAYOUT_DRAW_BULLET)
+ {
+ CFArrayRef runArray = CTLineGetGlyphRuns(ctline);
+ CFIndex runCount = CFArrayGetCount(runArray);
+
+ CFIndex runIndex = 0;
+ CTLineRef ctlinebullet = 0;
+ OUString sBullet((sal_Unicode)0xb7); // centered bullet
+
+ for (; runIndex < runCount; runIndex++)
+ {
+
+ CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(runArray, runIndex);
+ CFIndex runGlyphCount = CTRunGetGlyphCount(run);
+
+ CGPoint position;
+ CFIndex runGlyphIndex = 0;
+ CFIndex stringIndice = 0;
+
+ for (; runGlyphIndex < runGlyphCount; runGlyphIndex++)
+ {
+ CFRange glyphRange = CFRangeMake(runGlyphIndex, 1);
+
+ CTRunGetStringIndices( run, glyphRange, &stringIndice );
+ UniChar curChar = CFStringGetCharacterAtIndex (CFAttributedStringGetString(mpAttrString), stringIndice);
+ if(curChar == ' ')
+ {
+ CTRunGetPositions(run, glyphRange, &position);
+ // print a dot
+ if(!ctlinebullet)
+ {
+ CFStringRef aCFText = CFStringCreateWithCharactersNoCopy( NULL,
+ sBullet.getStr(),
+ 1,
+ kCFAllocatorNull );
+ // CFAttributedStringCreate copies the attribues parameter
+ CFAttributedStringRef bulletAttrString = CFAttributedStringCreate( NULL, aCFText, mpTextStyle->GetStyleDict() );
+ ctlinebullet = CTLineCreateWithAttributedString( bulletAttrString );
+ CFRelease( aCFText);
+ CFRelease( bulletAttrString);
+ RGBAColor bulletColor(MAKE_SALCOLOR(0x26, 0x8b, 0xd2 )); // NON_PRINTING_CHARACTER_COLOR
+ CGContextSetFillColor( rAquaGraphics.mrContext, bulletColor.AsArray() );
+ }
+ CGContextSetTextPosition( rAquaGraphics.mrContext, aTextPos.x + position.x, position.y + aTextPos.y );
+ CTLineDraw(ctlinebullet, rAquaGraphics.mrContext);
+ }
+ }
+ }
+ if(ctlinebullet)
+ {
+ CFRelease(ctlinebullet);
+ }
+ }
+
// restore the original graphic context transformations
SAL_INFO( "vcl.ct", "CGContextRestoreGState(" << rAquaGraphics.mrContext << ")" );
CGContextRestoreGState( rAquaGraphics.mrContext );
diff --git a/vcl/source/outdev/text.cxx b/vcl/source/outdev/text.cxx
index 1c20f7f08050..93a0e919d2a2 100644
--- a/vcl/source/outdev/text.cxx
+++ b/vcl/source/outdev/text.cxx
@@ -281,8 +281,8 @@ bool OutputDevice::ImplDrawRotateText( SalLayout& rSalLayout )
}
bool OutputDevice::ImplDrawTextDirect( SalLayout& rSalLayout,
- bool bTextLines,
- sal_uInt32 flags )
+ bool bTextLines,
+ sal_uInt32 flags )
{
if( mpFontEntry->mnOwnOrientation )
if( ImplDrawRotateText( rSalLayout ) )
@@ -950,7 +950,7 @@ float OutputDevice::approximate_char_width() const
void OutputDevice::DrawTextArray( const Point& rStartPt, const OUString& rStr,
const sal_Int32* pDXAry,
- sal_Int32 nIndex, sal_Int32 nLen )
+ sal_Int32 nIndex, sal_Int32 nLen, int flags )
{
if(nLen == 0x0FFFF)
{
@@ -973,7 +973,7 @@ void OutputDevice::DrawTextArray( const Point& rStartPt, const OUString& rStr,
if( mbOutputClipped )
return;
- SalLayout* pSalLayout = ImplLayout(rStr, nIndex, nLen, rStartPt, 0, pDXAry);
+ SalLayout* pSalLayout = ImplLayout(rStr, nIndex, nLen, rStartPt, 0, pDXAry, flags);
if( pSalLayout )
{
ImplDrawText( *pSalLayout );
@@ -981,7 +981,7 @@ void OutputDevice::DrawTextArray( const Point& rStartPt, const OUString& rStr,
}
if( mpAlphaVDev )
- mpAlphaVDev->DrawTextArray( rStartPt, rStr, pDXAry, nIndex, nLen );
+ mpAlphaVDev->DrawTextArray( rStartPt, rStr, pDXAry, nIndex, nLen, flags );
}
long OutputDevice::GetTextArray( const OUString& rStr, sal_Int32* pDXAry,
@@ -1101,7 +1101,7 @@ bool OutputDevice::GetCaretPositions( const OUString& rStr, sal_Int32* pCaretXAr
void OutputDevice::DrawStretchText( const Point& rStartPt, sal_uLong nWidth,
const OUString& rStr,
- sal_Int32 nIndex, sal_Int32 nLen )
+ sal_Int32 nIndex, sal_Int32 nLen)
{
if(nIndex < 0 || nIndex == 0x0FFFF || nLen == 0x0FFFF)
{
@@ -1131,8 +1131,9 @@ void OutputDevice::DrawStretchText( const Point& rStartPt, sal_uLong nWidth,
}
ImplLayoutArgs OutputDevice::ImplPrepareLayoutArgs( OUString& rStr,
- const sal_Int32 nMinIndex, const sal_Int32 nLen,
- long nPixelWidth, const sal_Int32* pDXArray ) const
+ const sal_Int32 nMinIndex, const sal_Int32 nLen,
+ long nPixelWidth, const sal_Int32* pDXArray,
+ int nLayoutFlags ) const
{
assert(nMinIndex >= 0);
assert(nLen >= 0);
@@ -1146,7 +1147,6 @@ ImplLayoutArgs OutputDevice::ImplPrepareLayoutArgs( OUString& rStr,
if( nEndIndex < nMinIndex )
nEndIndex = nMinIndex;
- int nLayoutFlags = 0;
if( mnTextLayoutMode & TEXT_LAYOUT_BIDI_RTL )
nLayoutFlags |= SAL_LAYOUT_BIDI_RTL;
if( mnTextLayoutMode & TEXT_LAYOUT_BIDI_STRONG )
@@ -1244,9 +1244,9 @@ ImplLayoutArgs OutputDevice::ImplPrepareLayoutArgs( OUString& rStr,
}
SalLayout* OutputDevice::ImplLayout(const OUString& rOrigStr,
- sal_Int32 nMinIndex, sal_Int32 nLen,
- const Point& rLogicalPos, long nLogicalWidth,
- const sal_Int32* pDXArray) const
+ sal_Int32 nMinIndex, sal_Int32 nLen,
+ const Point& rLogicalPos, long nLogicalWidth,
+ const sal_Int32* pDXArray, int flags) const
{
// we need a graphics
if( !mpGraphics )
@@ -1292,7 +1292,7 @@ SalLayout* OutputDevice::ImplLayout(const OUString& rOrigStr,
pDXArray = pTempDXAry;
}
- ImplLayoutArgs aLayoutArgs = ImplPrepareLayoutArgs( aStr, nMinIndex, nLen, nPixelWidth, pDXArray );
+ ImplLayoutArgs aLayoutArgs = ImplPrepareLayoutArgs( aStr, nMinIndex, nLen, nPixelWidth, pDXArray, flags);
// get matching layout object for base font
SalLayout* pSalLayout = mpGraphics->GetTextLayout( aLayoutArgs, 0 );