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