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.

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

Reply via email to