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.

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