--- emfwr1.19.cxx 2006-11-14 16:41:41.000000000 +0100 +++ emfwr.cxx 2008-02-09 10:30:30.462000000 +0100 @@ -153,6 +153,21 @@ #define FILL_SELECT 0x00000002 #define TEXT_SELECT 0x00000004 +/* Text Alignment Options */ +#define TA_NOUPDATECP 0 +#define TA_UPDATECP 1 + +#define TA_LEFT 0 +#define TA_RIGHT 2 +#define TA_CENTER 6 + +#define TA_TOP 0 +#define TA_BOTTOM 8 +#define TA_BASELINE 24 +#define TA_RTLREADING 256 +#define TA_MASK (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING) + + // ------------- // - EMFWriter - // ------------- @@ -456,10 +471,11 @@ void EMFWriter::ImplCheckTextAttr() switch( rFont.GetAlign() ) { - case ALIGN_TOP: nTextAlign = 0; break; - case ALIGN_BOTTOM: nTextAlign = 8; break; - default: nTextAlign = 24; break; + case ALIGN_TOP: nTextAlign = TA_TOP; break; + case ALIGN_BOTTOM: nTextAlign = TA_BOTTOM; break; + default: nTextAlign = TA_BASELINE; break; } + nTextAlign |= mnHorTextAlign; ImplBeginRecord( WIN_EMR_SETTEXTALIGN ); (*mpStm) << nTextAlign; @@ -1272,6 +1288,21 @@ void EMFWriter::ImplWrite( const GDIMeta } break; + case( META_LAYOUTMODE_ACTION ): + { + sal_uInt32 nLayoutMode = ( (MetaLayoutModeAction*) pAction )->GetLayoutMode(); + mnHorTextAlign = 0; + if (nLayoutMode & TEXT_LAYOUT_BIDI_RTL) + { + mnHorTextAlign = TA_RIGHT | TA_RTLREADING; + } + if (nLayoutMode & TEXT_LAYOUT_TEXTORIGIN_RIGHT) + mnHorTextAlign |= TA_RIGHT; + else if (nLayoutMode & TEXT_LAYOUT_TEXTORIGIN_LEFT) + mnHorTextAlign &= ~TA_RIGHT; + break; + } + case( META_MASK_ACTION ): case( META_MASKSCALE_ACTION ): case( META_MASKSCALEPART_ACTION ): @@ -1279,7 +1310,7 @@ void EMFWriter::ImplWrite( const GDIMeta case( META_TEXTLINE_ACTION ): case( META_COMMENT_ACTION ): case( META_GRADIENTEX_ACTION ): - case( META_LAYOUTMODE_ACTION ): + { // !!! >>> we don't want to support these actions }