Hi Malte,

Thank you very much to answer my questions.
2009/12/14 Malte Timmermann <malte.timmerm...@sun.com>

> LiuTao,
>
> as I wrote, my patch works in edit mode as well as in non edit mode.
>
> I have tested it in plane OOo320m7.
>
> Of course you need to remove all your hacks where you manipulate font
> align.
>
>
I tried again and removed all my codes and it is successful now.



> If you still insist on your font align manipulations and the
> introduction of ALIGN_CENTER, go ahead but don't expect me to answer any
> future questions on this.
>
>
I 've learned so many things from you.This let me very happy. :-)
Thank you again.

With Best Regards,

LiuTao


> Malte.
>
> JiaXiang Liu wrote, On 12/14/09 09:33:
>  > Hi Malte,
> > 2009/12/11 Malte Timmermann <malte.timmerm...@sun.com>
> >
> >> 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 <malte.timmerm...@sun.com>
> >>>> JiaXiang Liu wrote, On 12/09/09 12:10:
> >>>>  > Hi all
> >>>>> 2009/12/9 Malte Timmermann <malte.timmerm...@sun.com>
> >>>>>
> >>>>>> JiaXiang Liu wrote, On 12/09/09 10:24:
> >>>>>>> Hello all,
> >>>>>>>
> >>>>>>> 2009/12/8 Malte Timmermann <malte.timmerm...@sun.com>
> >>>>>>>
> >>>>>>>> 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 <armin.le.gr...@sun.com
> >>>>>>>>> <mailto:armin.le.gr...@sun.com>>
> >>>>>>>>>
> >>>>>>>>>     JiaXiang Liu schrieb:
> >>>>>>>>>
> >>>>>>>>>         Hi All,
> >>>>>>>>>
> >>>>>>>>>         2009/12/7 Malte Timmermann <malte.timmerm...@sun.com
> >>>>>>>>>         <mailto:malte.timmerm...@sun.com>
> >>>>>>>>>         <mailto:malte.timmerm...@sun.com <mailto:
> >>>>>>>> malte.timmerm...@sun.com>>>
> >>>>>>>>>            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 <liujiaxi...@gmail.com
> >>>>>>>>>         <mailto:liujiaxi...@gmail.com>
> >>>>>>>>>            <mailto:liujiaxi...@gmail.com <mailto:
> >>>> liujiaxi...@gmail.com
> >>>>>>>>>            >> <mailto:liujiaxi...@gmail.com
> >>>>>>>>>         <mailto:liujiaxi...@gmail.com> <mailto:
> >> liujiaxi...@gmail.com
> >>>>>>>>>         <mailto:liujiaxi...@gmail.com>>>>
> >>>>>>>>>
> >>>>>>>>>            >>
> >>>>>>>>>            >> 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 <liujiaxi...@gmail.com
> >>>>>>>>>         <mailto:liujiaxi...@gmail.com>
> >>>>>>>>>            <mailto:liujiaxi...@gmail.com <mailto:
> >>>> liujiaxi...@gmail.com
> >>>>>>>>>            >> <mailto:liujiaxi...@gmail.com
> >>>>>>>>>         <mailto:liujiaxi...@gmail.com> <mailto:
> >> liujiaxi...@gmail.com
> >>>>>>>>  >         <mailto:liujiaxi...@gmail.com>>>>
> >>>>>>>>>            >>
> >>>>>>>>>            >> 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 <
> malte.timmerm...@sun.com
> >>>>>>>>>         <mailto:malte.timmerm...@sun.com>
> >>>>>>>>>            <mailto:malte.timmerm...@sun.com
> >>>>>>>>>         <mailto:malte.timmerm...@sun.com>>
> >>>>>>>>>            >> <mailto:malte.timmerm...@sun.com
> >>>>>>>>>         <mailto:malte.timmerm...@sun.com>
> >>>>>>>>>            <mailto:malte.timmerm...@sun.com
> >>>>>>>>>         <mailto:malte.timmerm...@sun.com>>>>
> >>>>>>>>>            >>
> >>>>>>>>>            >> 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:
> >>>>>> dev-unsubscr...@gsl.openoffice.org
> >>>>>>>>>         <mailto:dev-unsubscr...@gsl.openoffice.org>
> >>>>>>>>>            <mailto:dev-unsubscr...@gsl.openoffice.org
> >>>>>>>>>         <mailto:dev-unsubscr...@gsl.openoffice.org>>
> >>>>>>>>>            >> <mailto:dev-unsubscr...@gsl.openoffice.org
> >>>>>>>>>         <mailto:dev-unsubscr...@gsl.openoffice.org>
> >>>>>>>>>            <mailto:dev-unsubscr...@gsl.openoffice.org
> >>>>>>>>>         <mailto:dev-unsubscr...@gsl.openoffice.org>>>
> >>>>>>>>>            >> For additional commands, e-mail:
> >>>>>>>>>            >> dev-h...@gsl.openoffice.org
> >>>>>>>>>         <mailto:dev-h...@gsl.openoffice.org>
> >>>>>>>>>         <mailto:dev-h...@gsl.openoffice.org
> >>>>>>>>>         <mailto:dev-h...@gsl.openoffice.org>>
> >>>>>>>>>            >> <mailto:dev-h...@gsl.openoffice.org
> >>>>>>>>>         <mailto:dev-h...@gsl.openoffice.org>
> >>>>>>>>>            <mailto:dev-h...@gsl.openoffice.org
> >>>>>>>>>         <mailto:dev-h...@gsl.openoffice.org>>>
> >>>>>>>>>            >>
> >>>>>>>>>            >>
> >>>>>>>>>            >>
> >>>>>>>>>            >>
> >>>>>>>>>            >
> >>>>>>>>>
> >>>>>>>>>         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: dev-unsubscr...@gsl.openoffice.org
> >>>>>>  For additional commands, e-mail: dev-h...@gsl.openoffice.org
> >>>>>>
> >>>>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: dev-unsubscr...@gsl.openoffice.org
> >>>> For additional commands, e-mail: dev-h...@gsl.openoffice.org
> >>>>
> >>>>
> >> --- /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: dev-unsubscr...@gsl.openoffice.org
> >> For additional commands, e-mail: dev-h...@gsl.openoffice.org
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@gsl.openoffice.org
> For additional commands, e-mail: dev-h...@gsl.openoffice.org
>
>

Reply via email to