Hi Malte, Thank you very much to answer my questions. 2009/12/14 Malte Timmermann <malte.timmerm...@sun.com>
> LiuTao, > > as I wrote, my patch works in edit mode as well as in non edit mode. > > I have tested it in plane OOo320m7. > > Of course you need to remove all your hacks where you manipulate font > align. > > I tried again and removed all my codes and it is successful now. > If you still insist on your font align manipulations and the > introduction of ALIGN_CENTER, go ahead but don't expect me to answer any > future questions on this. > > I 've learned so many things from you.This let me very happy. :-) Thank you again. With Best Regards, LiuTao > Malte. > > JiaXiang Liu wrote, On 12/14/09 09:33: > > Hi Malte, > > 2009/12/11 Malte Timmermann <malte.timmerm...@sun.com> > > > >> Hi LiuTao, > >> > >> I couldn't resist to prove that my suggestion would work as expected... > ;) > >> > >> The attached patch works in edit mode as well as in paint mode. > >> > >> I only did some quick test and verified the values in the debugger (for > >> lines w/o font changes, nAdjust must always be 0, in all modes). > >> > >> NO manipulations of font align and NO addition to VCL's enum > >> needed/wanted. NO extra work in drawing layer needed, because everything > >> still is baseline. > >> > >> Note: TOP will only look as expected when using upper case (or Chinese) > >> characters. Lower case characters will have some space above. > >> > >> HTH, > >> Malte. > >> > >> > >> > > > > you are right,The patch works in non-edit mode.but it is wrong in edit > mode. > > I don't know why. I added some code without your patch in seekcursor > > function like this: > > > > enum TextAlign at = ALIGN_BASELINE; > > SvxFontAlign eFontAlign = > > ((SvxFontAlignItem&)pNode->GetContentAttribs().GetItem( EE_PARA_FONTALIGN > > )).GetFontAlign(); > > if (eFontAlign == SVX_FONT_ALIGN_TOP) > > { > > at = ALIGN_TOP; > > } > > else if (eFontAlign == SVX_FONT_ALIGN_BOTTOM) > > { > > at = ALIGN_BOTTOM; > > } > > else if (eFontAlign == SVX_FONT_ALIGN_CENTER) > > { > > at = ALIGN_CENTER; > > } > > else > > { > > at = ALIGN_BASELINE; > > } > > rFont.SetAlign(at); > > > > it will display right in edit mode but not in non-edit mode. > > > > if I added this code and your patch. it will display right in non-edit > mode > > but not in edit mode. > > > > BTW,if I use your patch,first I set alignment as TOP,then I set BOTTOM,It > > will not align BOTTOM immediately,I should exit the edit mode and > relocate > > the cursor in edit box.I don't know why. > > > > Another question: > > > > what is the mean of aTmpPos and aRealOutPos mean? > > > > With Best Regards, > > LiuTao > > > > > >> JiaXiang Liu wrote, On 12/10/09 04:28: > >> > 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 > >>>> > >>>> > >> --- /cygdrive/o/ooo320/src.m7/svx/source/editeng/impedit3.cxx > 2009-09-25 > >> 13:22:28.000000000 +0200 > >> +++ impedit3.cxx 2009-12-11 15:37:47.567886500 +0100 > >> @@ -2994,6 +2994,40 @@ > >> { > >> SeekCursor( pPortion->GetNode(), > nIndex+1, > >> aTmpFont, pOutDev ); > >> > >> + // For LineAdjustModes != baseline keep > the > >> baseline position, need to be restored later > >> + Point aTmpPosBaseline( aTmpPos ); > >> + static int nTestLineAlignMode = 0; > >> + if ( nTestLineAlignMode ) > >> + { > >> + aTmpFont.SetPhysFont( GetRefDevice() > ); > >> + FormatterFontMetric > aFormatterMetrics; > >> + RecalcFormatterFontMetrics( > >> aFormatterMetrics, aTmpFont ); > >> + > >> + long nAdjust = 0; > >> + > >> + if ( nTestLineAlignMode == 1 ) // > TOP > >> + { > >> + nAdjust = > -pLine->GetMaxAscent(); > >> // TOP Most > >> + nAdjust += > >> aFormatterMetrics.nMaxAscent; // Now we have the baseline > >> + } > >> + else if ( nTestLineAlignMode == 2 ) > // > >> BOTTOM > >> + { > >> + nAdjust = -pLine->GetMaxAscent() > + > >> pLine->GetHeight(); // BOTTOM most > >> + nAdjust -= > >> aFormatterMetrics.nMaxDescent; // Now we have the baseline > >> + } > >> + else if ( nTestLineAlignMode == 3 ) > // > >> CENTER > >> + { > >> + long nGlypHeight = > >> aFormatterMetrics.nMaxAscent + aFormatterMetrics.nMaxDescent; > >> + nAdjust = -pLine->GetMaxAscent() > + > >> pLine->GetHeight() / 2 - nGlypHeight / 2; > >> + nAdjust += > >> aFormatterMetrics.nMaxAscent; // Now we have the baseline > >> + } > >> + > >> + if ( !IsVertical() ) > >> + aTmpPos.Y() += nAdjust; > >> + else > >> + aTmpPos.X() += nAdjust; > >> + } > >> + > >> BOOL bDrawFrame = FALSE; > >> > >> if ( ( pTextPortion->GetKind() == > >> PORTIONKIND_FIELD ) && !aTmpFont.IsTransparent() && > >> @@ -3464,6 +3498,7 @@ > >> } > >> > >> pOutDev->Pop(); > >> + aTmpPos = aTmpPosBaseline; > >> > >> if ( pTmpDXArray ) > >> delete[] pTmpDXArray; > >> > >> > >> > >> --------------------------------------------------------------------- > >> 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 > >