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() =.... } 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 > >