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
>
>

Reply via email to