Hi Malte,
2009/12/11 Malte Timmermann <[email protected]>
> Hi LiuTao,
>
> I couldn't resist to prove that my suggestion would work as expected... ;)
>
> The attached patch works in edit mode as well as in paint mode.
>
> I only did some quick test and verified the values in the debugger (for
> lines w/o font changes, nAdjust must always be 0, in all modes).
>
> NO manipulations of font align and NO addition to VCL's enum
> needed/wanted. NO extra work in drawing layer needed, because everything
> still is baseline.
>
> Note: TOP will only look as expected when using upper case (or Chinese)
> characters. Lower case characters will have some space above.
>
> HTH,
> Malte.
>
>
>
you are right,The patch works in non-edit mode.but it is wrong in edit mode.
I don't know why. I added some code without your patch in seekcursor
function like this:
enum TextAlign at = ALIGN_BASELINE;
SvxFontAlign eFontAlign =
((SvxFontAlignItem&)pNode->GetContentAttribs().GetItem( EE_PARA_FONTALIGN
)).GetFontAlign();
if (eFontAlign == SVX_FONT_ALIGN_TOP)
{
at = ALIGN_TOP;
}
else if (eFontAlign == SVX_FONT_ALIGN_BOTTOM)
{
at = ALIGN_BOTTOM;
}
else if (eFontAlign == SVX_FONT_ALIGN_CENTER)
{
at = ALIGN_CENTER;
}
else
{
at = ALIGN_BASELINE;
}
rFont.SetAlign(at);
it will display right in edit mode but not in non-edit mode.
if I added this code and your patch. it will display right in non-edit mode
but not in edit mode.
BTW,if I use your patch,first I set alignment as TOP,then I set BOTTOM,It
will not align BOTTOM immediately,I should exit the edit mode and relocate
the cursor in edit box.I don't know why.
Another question:
what is the mean of aTmpPos and aRealOutPos mean?
With Best Regards,
LiuTao
> JiaXiang Liu wrote, On 12/10/09 04:28:
> > 2009/12/9 Malte Timmermann <[email protected]>
> >
> >>
> >> JiaXiang Liu wrote, On 12/09/09 12:10:
> >> > Hi all
> >>> 2009/12/9 Malte Timmermann <[email protected]>
> >>>
> >>>> JiaXiang Liu wrote, On 12/09/09 10:24:
> >>>>> Hello all,
> >>>>>
> >>>>> 2009/12/8 Malte Timmermann <[email protected]>
> >>>>>
> >>>>>> I didn't review the patch, but just took a quick look.
> >>>>>>
> >>>>>> FontAlign is probably the wrong wording here at all.
> >>>>>>
> >>>>>> What you want to achieve is alignment of a text line.
> >>>>>> You should probably better call it TextLineAlignment or something
> like
> >>>>>> that.
> >>>>>>
> >>>>>>
> >>>>> OK,I will modify it.
> >>>>>
> >>>>>> Again - all calculations need to be dome in some upper layer, eg.
> >>>>>> EditEngine. Assuming that we really talk about text lign alignment,
> >>>>>> there is no need/reason to add a new enum in VCL.
> >>>>>>
> >>>>> I only added a item in old enum in VCL. ALIGN_CENTER. you needn't to
> >> care
> >>>>> it. assume it is no use.
> >>>> If it is of no use, it shouldn't be introduced. No one will accept to
> >>>> have it in VCL then.
> >>>>
> >>>>>> As I said, do the implementation in impedit3.cxx.
> >>>>>> Instead of the suggestion in my first email, don't use
> >> ALIGN_TOP/BOTTOM
> >>>>>> at all, but use the font metrics to calculate the correct position
> so
> >>>>>> that the normal output with ALIGN_BASELINE works.
> >>>>>>
> >>>>>>
> >>>>> I want to know where(which function?) can I use the font metrics to
> >>>>> calculate the correct position? and
> >>>>> how to use the font metrics to calculate?
> >>>> Look in impedit3.cxx, CreateLines. There you can see how the Ascent
> and
> >>>> Descent from the FormatterFontMetric is used.
> >>>>
> >>>> Since your alignment doesn't influent the line calculation, you don't
> >>>> need to use the new attr in CreateLines(), but only in Paint().
> >>>> In Paint, the x/y position is calculated, and the DrawText with
> >>>> Align_Baseline is used.
> >>>>
> >>>>> why do not use
> >>>>> ALIGN_TOP/BOTTOM?,the calculation is set in VCL.
> >>>>> I think it should be called by some functions.
> >>>> Because you have to adjust x/y in Paint() anyway.
> >>>> TOP and BOTTOM could help you to not do ascent/descent calculations
> >>>> yourself, but for CENTER you have to do it anyway.
> >>>> If you adjust x/y for all cases (top/bottom/center/baseline) to
> >>>> BASELINE, and don't use ALIGN_TOP/BOTTOM, all the rest should work
> >>>> automatically. Edit Mode as well as repaint mode.
> >>>>
> >>>>
> >>> what your mean about adjust x/y for all cases
> >> (top/bottom/center/baseline)
> >>> to
> >>> BASELINE?
> >>>
> >>> do you mean that I should add some code in paint(...) function like
> this:
> >>>
> >>> TextAlign eAlign = aTmpFont.GetAlign();
> >>> if ( eAlign == ALIGN_TOP )
> >>> {
> >>> aRealOutPos.Y() =......
> >>> aRealOutPos.X() =....
> >>> }
> >>> if ( eAlign == ALIGN_BOTTOM )
> >>> {
> >>> aRealOutPos.Y() =......
> >>> aRealOutPos.X() =....
> >>> }
> >>> if ( eAlign == ALIGN_BASELINE )
> >>> {
> >>> aRealOutPos.Y() =......
> >>> aRealOutPos.X() =....
> >>> }
> >>>
> >> First - use the current para attr, not GetAlign from the Font, because
> >> you shouldn't manipulate the alignment from the font anymore.
> >>
> >> Then look at the loop for ( nLine < nLines ), first switch statement
> >> covering text/field/hypenator. There you can manipulate y (or x in
> >> vertical writing mode). aTmpPos, not aRealOutPos.
> >>
> >>
> >
> > Hi, Malte
> >
> > Do you mean I should modifiy the code like this:in the loop of (nLine <
> > nLines )
> >
> > sal_uInt16 nAscent, nDescent;
> > FontMetric aMetric( pRefDev->GetFontMetric() );
> > nAscent = (sal_uInt16)aMetric.GetAscent();
> >
> > aTmpPos.X() += pLine->GetStartPosX();
> > aTmpPos.Y() += nAscent;
> > ... ... ...
> >
> > I tried but in non-edit mode they can only change the line location but
> not
> > the character location.
> >
> > It is still can not set align in non-edit mode.
> >
> > can you give me some test code to implement the alignment setting in
> > non-edit mode?I really have no idea.
> >
> > LiuTao
> >
> >
> >
> >> Malte.
> >>
> >>> but I think this is still works in edit mode.but not in non-edit mode.
> >>>
> >>> so puzzled.I am afraid I will crash. ;-)
> >>>
> >>>> Malte.
> >>>>
> >>>>> Just like in editmode. in the function
> implEditEngine::print(...).this
> >>>>> function call setAlign(ALIGN_TOP),Then the alignment of text is TOP.
> >>>>> but it is in editmode.
> >>>>> my problem is : I can not set Align in non-edit mode.
> >>>>>
> >>>>>
> >>>>>> Then all the rest in the drawing layer should work automatically.
> >>>>>>
> >>>>>> And wrt. EE_PARA_FONTALIGN: If you decrease EE_ITEMS_START by one,
> and
> >>>>>> insert the new ID at the beginning, you don't have to manipulate the
> >>>>>> Version Maps, IIRC.
> >>>>>>
> >>>>>> The SvxFontAlignItem itself looks strange to me: Its bad design to
> use
> >> 4
> >>>>>> bool values instead of an enum, if only one value can be true, and
> >>>>>> exactly one value needs to be true.
> >>>>>>
> >>>>>>
> >>>>> I will improve.
> >>>>>
> >>>>>> Malte.
> >>>>>>
> >>>>>> JiaXiang Liu wrote, On 12/08/09 12:07:
> >>>>>>> Hello All,
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> 2009/12/8 Armin Le Grand <[email protected]
> >>>>>>> <mailto:[email protected]>>
> >>>>>>>
> >>>>>>> JiaXiang Liu schrieb:
> >>>>>>>
> >>>>>>> Hi All,
> >>>>>>>
> >>>>>>> 2009/12/7 Malte Timmermann <[email protected]
> >>>>>>> <mailto:[email protected]>
> >>>>>>> <mailto:[email protected] <mailto:
> >>>>>> [email protected]>>>
> >>>>>>> Hi LiuTao,
> >>>>>>>
> >>>>>> > given Armins explanation about the text primitive
> stuff,
> >>>> it
> >>>>>>> seems it
> >>>>>>> would be much easier to do the transformation to
> baseline
> >> in
> >>>>>>> impedit3.cxx instead of manipulating the font alignment.
> >>>>>>>
> >>>>>>> you mean I can only modify the impedit3.cxx to implement?
> >>>>>>>
> >>>>>>> I do not know impedit3.cxx, but i would do the adaption (as
> >>>>>>> described) in
> >> impTextBreakupHandler::impCreateTextPortionPrimitive.
> >>>>>>> Nonetheless, even for pure VCL usage it is not sure if all
> usages
> >>>>>>> can use the baseline when it is used. It looks like it was not
> >> used
> >>>>>>> in editengine up to now, but maybe in SW. HDU should know.
> >>>>>>>
> >>>>>>>
> >>>>>>> yes,I have tryed so many times but have no result.I think it is not
> >> so
> >>>>>>> much difficult,just like to set the paragraph adjust left.when we
> set
> >>>> it
> >>>>>>> in edit mode it is ok , when in non-edit mode it is still ok.I
> guess
> >> if
> >>>>>>> there are some message should be transfered.
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> Then it would probably also work out-of-the-box in
> >> non-edit
> >>>>>> mode.
> >>>>>>> Still don't know how to do that. :-(
> >>>>>>>
> >>>>>>> As described: You have a StartPosition (rInfo.mrStartPos) that
> >>>>>>> defines where to draw the text. You have the TextAlign. If
> >>>> TextAlign
> >>>>>>> != ALIGN_BASELINE, adapt StartPosition (use a local copy, of
> >>>> course)
> >>>>>>> as if it is ALIGN_BASELINE. This means to add offsets
> vertically
> >>>> for
> >>>>>>> horizontal text and probably vice-versa. The offsets depend on
> >>>>>>> FontInfo information which You get with the VCL Font and an
> >>>>>>> OutputDevice.
> >>>>>>>
> >>>>>>>
> >>>>>>> the font align is not a attribute of font.so it is painted in edit
> >> mode
> >>>>>>> in impleditengine::paint(...)
> >>>>>>> how to draw the alignment is in VCL.(function setalign)
> >>>>>>> I guess if there have a function called like :
> noeditview::paint(...)
> >>>> to
> >>>>>>> call the VCL to draw the alignment?
> >>>>>>>
> >>>>>>>
> >>>>>>> @Herbert
> >>>>>>>
> >>>>>>> Hello , Armin said you maybe know this.I wish you can help me....
> >>>>>>>
> >>>>>>>
> >>>>>>> Malte.
> >>>>>>>
> >>>>>>> Armin Le Grand wrote, On 12/07/09 12:33:
> >>>>>>> > JiaXiang Liu schrieb:
> >>>>>>> >> Hello Malte,Armin,
> >>>>>>> >>
> >>>>>>> >> Just Forward the email:
> >>>>>>> >>
> >>>>>>> >> 2009/12/7 JiaXiang Liu <[email protected]
> >>>>>>> <mailto:[email protected]>
> >>>>>>> <mailto:[email protected] <mailto:
> >> [email protected]
> >>>>>>> >> <mailto:[email protected]
> >>>>>>> <mailto:[email protected]> <mailto:
> [email protected]
> >>>>>>> <mailto:[email protected]>>>>
> >>>>>>>
> >>>>>>> >>
> >>>>>>> >> Hello Malte,Armin
> >>>>>>> >>
> >>>>>>> >> @Malte
> >>>>>>> >>
> >>>>>>> >> I test that.It is so difficult.
> >>>>>>> >>
> >>>>>>> >> I setted a break point in outliner.cxx
> >>>>>>> >> aDrawPortionHdl.Call(...).
> >>>>>>> >> Then I find the many information is collected but not
> >>>>>>> alignment.
> >>>>>>> >>
> >>>>>>> >> How to record the information about the currently
> used
> >>>>>>> alignment?
> >>>>>>> >> If I should add a Parameter in this area ?
> >>>>>>> >>
> >>>>>>> >> DrawPortionInfo aInfo( rStartPos, rText, nTextStart,
> >>>>>> nTextLen,
> >>>>>>> >> rFont, nPara, nIndex, pDXArray, pWrongSpellVector,
> >>>>>>> >> pFieldData, pLocale, rOverlineColor, rTextLineColor,
> >>>>>>> >> nRightToLeft, bEndOfLine, bEndOfParagraph,
> >> bEndOfBullet);
> >>>>>>> >>
> >>>>>>> >> BTW,
> >>>>>>> >> aDrawPortionHdl.Call(...). is called by
> >>>>>>> >> void ImpEditEngine::Paint( OutputDevice* pOutDev,
> >>>> Rectangle
> >>>>>>> >> aClipRec, Point aStartPos, sal_Bool bStripOnly, short
> >>>>>>> nOrientation )
> >>>>>>> >>
> >>>>>>> >> and the pOutDev saved the alignment.
> >>>>>>> >>
> >>>>>>> >> This area is also not save paragraph adjust.I am so
> >>>>>> puzzled.
> >>>>>>> >>
> >>>>>>> >>
> >>>>>>> >> @Armin
> >>>>>>> >>
> >>>>>>> >> Malte told me that you maybe know that I want to
> know.
> >>>> :-)
> >>>>>>> >>
> >>>>>>> > Maybe; i am responsible for DrawingLayer, not for Text
> >>>>>> engines;
> >>>>>>> i just
> >>>>>>> > have to work with TextEngines since no one really is
> >>>>>>> responsible for
> >>>>>>> > them currently; and Yes, they are somewhat complicated
> >> and
> >>>>>>> grown
> >>>>>>> code.
> >>>>>>> > Malte once was responsible for them, thus in relation
> to
> >>>>>>> > EditEngine/Outliner he may know more than me. I can
> help
> >>>>>> with
> >>>>>>> > DrawingLayer and usage of TextParameters in prmitives,
> >>>>>> though.
> >>>>>>> >>
> >>>>>>> >> the question is :
> >>>>>>> >> I am developing a new feature called "fontalign" It
> can
> >>>>>>> set the
> >>>>>>> >> text align top,center,baseline and bottom.
> >>>>>>> >> In Impress,Create a new document, input some words in
> a
> >>>>>>> text box
> >>>>>>> >> in normal view.
> >>>>>>> >> I can set the alignment successful in edit mode.
> >>>>>>> >>
> >>>>>>> > Is this already possible in the working/current code?
> >>>>>>> > If Yes, where can i change those settings?
> >>>>>>> >
> >>>>>>> > If no (and it's a completely new feature) it has to be
> >>>>>>> implemented not
> >>>>>>> > only inside EditEngine/Outliner, evtl. new items there
> >>>> (not
> >>>>>>> sure if
> >>>>>>> > holding font alignment at the font itself is
> sufficient
> >> in
> >>>>>> all
> >>>>>>> > situations) and in Paint/export/callbacks, but also in
> >>>> text
> >>>>>>> primities,
> >>>>>>> > their decompositions, exports and paintings.
> >>>>>>> > I will set HDU on CC, he may now if holding alignment
> at
> >>>> the
> >>>>>>> font will
> >>>>>>> > be enough (if You use that currently).
> >>>>>>> >
> >>>>>>> >> but it can not store the setting when left the edit
> >> mode.
> >>>>>>> >> It is OK in outline view,bucause in outline view it
> is
> >>>> also
> >>>>>> in
> >>>>>>> >> edit mode.
> >>>>>>> >>
> >>>>>>> > That's right, that new feature has to be represented
> in
> >>>>>>> TextPrimitives
> >>>>>>> > and used by renderers for it.
> >>>>>>> >
> >>>>>>> > In short: DrawPortionInfo is the class which
> >>>>>>> EditEngine/Outliner
> >>>>>>> uses in
> >>>>>>> > callback mode to export it's data (You already located
> >>>>>>> that). The
> >>>>>>> > FontAlignment info will be (i guess) at the
> >>>>>>> DrawPortionInfo::mrFont
> >>>>>>> > member which is also a 'Font' (the VCL class).
> >>>>>>> >
> >>>>>>>
> >>>>>>> yes,it can use the 'Font'(VCL class) member function like:
> >>>>>>> (mrFont).SetAlign(ALIGN_TOP/../../..)
> >>>>>>>
> >>>>>>> > Primitives do not use a Font class (they are designed
> to
> >>>> be
> >>>>>>> transported
> >>>>>>> > over an API later), so they use
> >>>>>>> > drawinglayer::primitive2d::FontAttributes where the
> font
> >>>> is
> >>>>>>> described
> >>>>>>> > using FamilyName/StyleName/Weight and others. There is
> >> no
> >>>>>>> alignment
> >>>>>>> > currently since it was not used yet. FontAttributes is
> >>>> then
> >>>>>>> used in
> >>>>>>> > TextSimplePortionPrimitive2D. At render time, the
> helper
> >>>>>>> > getVclFontFromFontAttributes is used to re-create a
> VCL
> >>>> Font
> >>>>>>> from the
> >>>>>>> > FontAttributes, but this is only ONE way to use/render
> >>>> text
> >>>>>>> in the
> >>>>>>> > future with primitives; to use VCL again. This will
> >>>>>>> probably change.
> >>>>>>> >
> >>>>>>> > The point is that currently, font alignment is not
> part
> >> of
> >>>>>>> > FontAttributes and is not transported. As can be seen
> in
> >>>>>>> > getVclFontFromFontAttributes, ALIGN_BASELINE is
> assumed.
> >> I
> >>>>>>> would
> >>>>>>> not add
> >>>>>>> > a font alignment to FontAttributes to keep it minimal
> >> (and
> >>>>>>> it is not
> >>>>>>> > necessary). The TextSimplePortionPrimitive2D (and it's
> >>>>>>> derivates) are
> >>>>>>> > low-level text portion holders and also have a
> implicit
> >>>>>>> TextPosition
> >>>>>>> > (part of the TextTransform), thus it would be best to
> >>>> adapt
> >>>>>> the
> >>>>>>> implicit
> >>>>>>> > TextStart position inside
> >>>>>>> > impTextBreakupHandler::impCreateTextPortionPrimitive
> to
> >>>>>>> always use
> >>>>>>> > ALIGN_BASELINE.
> >>>>>>> >
> >>>>>>> > This is always possible using the FontInfo class and
> the
> >>>>>>> offsets
> >>>>>>> of the
> >>>>>>> > font (bbaseline, height, etc...). This can be done in
> >>>>>>> > impTextBreakupHandler::impCreateTextPortionPrimitive,
> >> see
> >>>>>>> 'apply
> >>>>>>> local
> >>>>>>> > offset'. rInfo.mrStartPos.Y() would need to be
> >>>>>>> expanded/adapted when
> >>>>>>> > text alignment is != ALIGN_BASELINE.
> >>>>>>> >
> >>>>>>>
> >>>>>>> If that means I would modify something in this area and do
> >> some
> >>>>>>> expand?but how?
> >>>>>>> Still puzzled about that.
> >>>>>>>
> >>>>>>> Wish you can give me more hint to modify and implement the
> >>>>>>> feature. :-)
> >>>>>>>
> >>>>>>> I attach a patch.
> >>>>>>> The Patch is what I have done,It did not contain XMLOFF
> >>>>>>> module,outline view and vertical mode.
> >>>>>>> I have implemented that. only have the non-edit mode
> problem.
> >>>>>>>
> >>>>>>> > HTH!
> >>>>>>> >
> >>>>>>> >> I wish you can help me to solve this problem. Thank
> >> you.
> >>>>>>> >>
> >>>>>>> >> With Best Regards,
> >>>>>>> >> LiuTao
> >>>>>>> >>
> >>>>>>> >>
> >>>>>>> >> 2009/12/4 JiaXiang Liu <[email protected]
> >>>>>>> <mailto:[email protected]>
> >>>>>>> <mailto:[email protected] <mailto:
> >> [email protected]
> >>>>>>> >> <mailto:[email protected]
> >>>>>>> <mailto:[email protected]> <mailto:
> [email protected]
> >>>>>> > <mailto:[email protected]>>>>
> >>>>>>> >>
> >>>>>>> >> Hello Malte,
> >>>>>>> >>
> >>>>>>> >> Thank you very much for the information.
> >>>>>>> >>
> >>>>>>> >> It is too late today fo me.
> >>>>>>> >>
> >>>>>>> >> I will test in Monday morning. if it is not ok, I
> will
> >>>> also
> >>>>>>> >> ask Armin for this.
> >>>>>>> >>
> >>>>>>> >> Have a nice weekend.
> >>>>>>> >>
> >>>>>>> >> With Best Regards,
> >>>>>>> >>
> >>>>>>> >> LiuTao
> >>>>>>> >>
> >>>>>>> >> 2009/12/4 Malte Timmermann <[email protected]
> >>>>>>> <mailto:[email protected]>
> >>>>>>> <mailto:[email protected]
> >>>>>>> <mailto:[email protected]>>
> >>>>>>> >> <mailto:[email protected]
> >>>>>>> <mailto:[email protected]>
> >>>>>>> <mailto:[email protected]
> >>>>>>> <mailto:[email protected]>>>>
> >>>>>>> >>
> >>>>>>> >> Hi LiuTao,
> >>>>>>> >>
> >>>>>>> >>
> >>>>>>> >> JiaXiang Liu wrote, On 12/04/09 10:30:
> >>>>>>> >> > Hello Malte,
> >>>>>>> >> >
> >>>>>>> >> > Thank you for your answer.
> >>>>>>> >> >
> >>>>>>> >> > What I puzzled now is:
> >>>>>>> >> >
> >>>>>>> >> > Why I can not set the new attribute in no edit
> mode?
> >>>>>>> >>
> >>>>>>> >> For redrawing the content, the metrics calculated
> from
> >>>> the
> >>>>>>> >> EditEngine
> >>>>>>> >> are cached somewhere, and the drawing layer uses
> >>>>>>> >> DrawText() directly,
> >>>>>>> >> probably also with ALIGN_BASELINE.
> >>>>>>> >>
> >>>>>>> >> >
> >>>>>>> >> > This is the* biggest problem* now and I want to
> solve
> >>>>>>> >> it. Can you help
> >>>>>>> >> > me?you said it may be the drawing layer.but I can
> not
> >>>> do
> >>>>>>> >> anything about
> >>>>>>> >> > that.
> >>>>>>> >>
> >>>>>>> >> Armin should know more about this...
> >>>>>>> >>
> >>>>>>> >> You might figure out by setting a break point in
> >>>>>> outliner.cxx
> >>>>>>> >> aDrawPortionHdl.Call(...). Then you will at least be
> >> able
> >>>>>>> >> to see how the
> >>>>>>> >> information is collected. You need to record the
> >>>>>>> >> information about the
> >>>>>>> >> currently used alignment, and also use that
> information
> >>>> at
> >>>>>>> >> the place
> >>>>>>> >> where the drawtext() is done.
> >>>>>>> >>
> >>>>>>> >> >
> >>>>>>> >> > Do you know Are there somebody in OpenOffice team
> is
> >>>>>>> >> developing or will
> >>>>>>> >> > develop this feature?
> >>>>>>> >>
> >>>>>>> >> Don't know / think so.
> >>>>>>> >>
> >>>>>>> >> Malte.
> >>>>>>> >>
> >>>>>>> >>
> >>>>>>>
> >>>>>>>
> >>>>>>
> ---------------------------------------------------------------------
> >>>>>>> >> To unsubscribe, e-mail:
> >>>> [email protected]
> >>>>>>> <mailto:[email protected]>
> >>>>>>> <mailto:[email protected]
> >>>>>>> <mailto:[email protected]>>
> >>>>>>> >> <mailto:[email protected]
> >>>>>>> <mailto:[email protected]>
> >>>>>>> <mailto:[email protected]
> >>>>>>> <mailto:[email protected]>>>
> >>>>>>> >> For additional commands, e-mail:
> >>>>>>> >> [email protected]
> >>>>>>> <mailto:[email protected]>
> >>>>>>> <mailto:[email protected]
> >>>>>>> <mailto:[email protected]>>
> >>>>>>> >> <mailto:[email protected]
> >>>>>>> <mailto:[email protected]>
> >>>>>>> <mailto:[email protected]
> >>>>>>> <mailto:[email protected]>>>
> >>>>>>> >>
> >>>>>>> >>
> >>>>>>> >>
> >>>>>>> >>
> >>>>>>> >
> >>>>>>>
> >>>>>>> With Best Regards,
> >>>>>>>
> >>>>>>> LiuTao
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> --
> >>>>>>> Sitz der Gesellschaft: Sun Microsystems GmbH, Sonnenallee 1,
> >>>>>>> D-85551 Kirchheim-Heimstetten|Amtsgericht München: HRB 161028
> >>>>>>> Geschäftsführer: Thomas Schröder, Wolfgang Engels, Wolf Frenkel
> >>>>>>> Vorsitzender des Aufsichtsrates: Martin Häring
> >>>>>>>
> >>>>>>> Regards, Armin Le Grand (AW)|Don't ask what OOo can do for You,
> >>>>>>> Armin.Le.Grand(at)sun.com <http://sun.com/> |better ask what
> >> You
> >>>>>>> can do for ooO!
> >>>>>>>
> >>>>>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: [email protected]
> >>>> For additional commands, e-mail: [email protected]
> >>>>
> >>>>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >>
> >>
> >
>
> --- /cygdrive/o/ooo320/src.m7/svx/source/editeng/impedit3.cxx 2009-09-25
> 13:22:28.000000000 +0200
> +++ impedit3.cxx 2009-12-11 15:37:47.567886500 +0100
> @@ -2994,6 +2994,40 @@
> {
> SeekCursor( pPortion->GetNode(), nIndex+1,
> aTmpFont, pOutDev );
>
> + // For LineAdjustModes != baseline keep the
> baseline position, need to be restored later
> + Point aTmpPosBaseline( aTmpPos );
> + static int nTestLineAlignMode = 0;
> + if ( nTestLineAlignMode )
> + {
> + aTmpFont.SetPhysFont( GetRefDevice() );
> + FormatterFontMetric aFormatterMetrics;
> + RecalcFormatterFontMetrics(
> aFormatterMetrics, aTmpFont );
> +
> + long nAdjust = 0;
> +
> + if ( nTestLineAlignMode == 1 ) // TOP
> + {
> + nAdjust = -pLine->GetMaxAscent();
> // TOP Most
> + nAdjust +=
> aFormatterMetrics.nMaxAscent; // Now we have the baseline
> + }
> + else if ( nTestLineAlignMode == 2 ) //
> BOTTOM
> + {
> + nAdjust = -pLine->GetMaxAscent() +
> pLine->GetHeight(); // BOTTOM most
> + nAdjust -=
> aFormatterMetrics.nMaxDescent; // Now we have the baseline
> + }
> + else if ( nTestLineAlignMode == 3 ) //
> CENTER
> + {
> + long nGlypHeight =
> aFormatterMetrics.nMaxAscent + aFormatterMetrics.nMaxDescent;
> + nAdjust = -pLine->GetMaxAscent() +
> pLine->GetHeight() / 2 - nGlypHeight / 2;
> + nAdjust +=
> aFormatterMetrics.nMaxAscent; // Now we have the baseline
> + }
> +
> + if ( !IsVertical() )
> + aTmpPos.Y() += nAdjust;
> + else
> + aTmpPos.X() += nAdjust;
> + }
> +
> BOOL bDrawFrame = FALSE;
>
> if ( ( pTextPortion->GetKind() ==
> PORTIONKIND_FIELD ) && !aTmpFont.IsTransparent() &&
> @@ -3464,6 +3498,7 @@
> }
>
> pOutDev->Pop();
> + aTmpPos = aTmpPosBaseline;
>
> if ( pTmpDXArray )
> delete[] pTmpDXArray;
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>