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