Hello Malte,

Thank you for your answer.

What I puzzled now is:

Why I can not set the new attribute in no edit mode?

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.

Do you know Are there somebody in OpenOffice team is developing or will
develop this feature?

2009/12/4 Malte Timmermann <malte.timmerm...@sun.com>

> Hi LiuTao,
>
> JiaXiang Liu wrote, On 12/04/09 09:36:
> > Hello Malte,
> >
> > Thank you for your anwser first!
> >
> > 2009/12/4 Malte Timmermann <malte.timmerm...@sun.com>
> >
> >> Hi LiuTao...
> >>
> >> JiaXiang Liu wrote, On 12/04/09 03:19:
> >>> Hello Malte,
> >>>
> >>> 2009/12/3 Malte Timmermann <malte.timmerm...@sun.com>
> >>>
> >>>> Hi LiuTao,
> >>>>
> >>>> you don't need to touch VCL for this, because VCL can't help you with
> >>>> this feature.
> >>>>
> >>>> VCL only sees single text portions, so it can't calculate the correct
> >>>> positions when it comes to complete text lines.
> >>>>
> >>>> This needs to be done in the EditEngine.
> >>>>
> >>>> For TOP and BOTTOM it should be easy.
> >>>>
> >>>> No changes needed in calculation, only in output.
> >>>>
> >>>> In ImpEditEngine::Paint:
> >>>>
> >>>> TOP: Instead of adding nMaxAscent to Y postions, don't manipulate Y
> and
> >>>> tell VCL to use ALIGN_TOP.
> >>>>
> >>>> BOTTOM: Instead of adding nMaxAscent to Y postions, add line height
> and
> >>>> tell VCL to use ALIGN_BOTTOM.
> >>>>
> >>>> Please recognize the different manipulations needed for
> >>>> horizontal/vertical writing.
> >>>>
> >>>> CENTER: Can be more complicated, but also might be simple.
> >>>> One solution could be to calculate the font metrics for the portion
> that
> >>>> you want to draw, handle Y postions like for TOP, but now add
> >>>> (lineheight - textheight) to Y position.
> >>>>
> >>> I have already add codes in In ImpEditEngine::Paint like this:
> >>>
> >>>     enum TextAlign eTmpAline = ALIGN_BASELINE;
> >>>             SvxFontAlign eFontAlign =
> >>> ((SvxFontAlignItem&)pNode->GetContentAttribs().GetItem(
> EE_PARA_FONTALIGN
> >>> )).GetFontAlign();
> >>>             if (eFontAlign == SVX_FONT_ALIGN_TOP)
> >>>             {
> >>>                 eTmpAline = ALIGN_TOP;
> >>>             }
> >>>             else if (eFontAlign == SVX_FONT_ALIGN_BOTTOM)
> >>>             {
> >>>                 eTmpAline = ALIGN_BOTTOM;
> >>>             }
> >>>             else if (eFontAlign == SVX_FONT_ALIGN_CENTER)
> >>>             {
> >>>                 eTmpAline = ALIGN_CENTER;
> >> As I said: There is no ALIGN_CENTER in VCL, and your also shouldn't
> >> introduce it, because it makes no sense in that layer.
> >>
> >>>             }
> >>>             else
> >>>             {
> >>>                 eTmpAline = ALIGN_BASELINE;
> >>>             }
> >>>         rFont.SetAlign( eTmpAline );
> >>>
> >>> I think this is what you mean.
> >>>
> >>> In vcl\source\gdi\outdev3.cxx
> >>>
> >>>     TextAlign eAlign = maFont.GetAlign();
> >>>     if ( eAlign == ALIGN_BASELINE )
> >>>     {
> >>>         mnTextOffX = 0;
> >>>         mnTextOffY = 0;
> >>>     }
> >>>     else if ( eAlign == ALIGN_TOP )
> >>>     {
> >>>         mnTextOffX = 0;
> >>>         mnTextOffY = +pFontEntry->maMetric.mnAscent + mnEmphasisAscent;
> >>>         if ( pFontEntry->mnOrientation )
> >>>             ImplRotatePos( 0, 0, mnTextOffX, mnTextOffY,
> >>> pFontEntry->mnOrientation );
> >>>     }
> >>> ...
> >>> ...
> >>> ...
> >> Unfortunately you didn't show how you would implement CENTER here in a
> >> meaningful way. Also, as I said, VCL only gets portions of the text, so
> >> TOP and BOTTOM in VCL can't align your complete text line.
> >>
> >> Oh,I just add a caculate CENTER  like this:
> >
> > +    else if (eAlign == ALIGN_CENTER)
> > +    {
> > +        mnTextOffX = 0;
> > +        mnTextOffY = (pFontEntry->maMetric.mnAscent -
> > pFontEntry->maMetric.mnDescent)/2 + (mnEmphasisAscent +
> > mnEmphasisDescent)/2;
> > +        if ( pFontEntry->mnOrientation )
> > +            ImplRotatePos( 0, 0, mnTextOffX, mnTextOffY,
> > pFontEntry->mnOrientation );
> > +    }
> >
> >>> this is the calculation about ALIGN_BASELINE
> >>> ,ALIGN_TOP,ALIGN_BOTTOM,ALIGN_CENTER(I added this calculation).
> >>>
> >>>
> >>>
> >>>
> >>>> This should work in Draw/Impress only.
> >>>> Maybe even only in edit mode - it might be that Draw use some special
> >>>> routines for repainting text objects which are not in edit mode (not
> >>>> sure). I also can't say if it would automatically works in
> presentation
> >>>> mode.
> >>>>
> >>>>
> >>> it is OK in edit mode but it seems can not repaint not in edit mode.you
> >> can
> >>> see  the pictures I sent to you.
> >>> It is OK in Outline view but not in normal view. I think that is
> because
> >>> Outline view is also in edit mode.
> >>> What I want to know is how to repaint it not in edit mode in Impress?
> >> This is somewhere in the drawing layer - not sure where...
> >>
> >> This is my puzzle.I want to know how to set the text displayed OK in no
> > edit mode.
> > the different view in edit and no edit is my bigest problem.  :-(
> >
> >> But I really don't understand why you completely ignored my hints how to
> >> implement the feature.
> >> - You have to do the calculations in the EditEngine - it will never look
> >> right with different font sizes if you rely on VCL's align mode only.
> >> - Fonts have the metrics like ascent and descent for good reasons. I am
> >> not sure if the VCL team will accept to have ALIGN_CENTER in VCL,
> >> because it doesn't make much sense.
> >>
> >> Yes,I did not ignore your hints how to implement the feature.
> > I do the calculations in the EditEngine like this:
> > +                                            TextAlign eAlign =
> > aTmpFont.GetAlign();
> > +                                            if ( eAlign == ALIGN_CENTER
> )
> > +                                            {
> > +                                                aRealOutPos.Y() +=
> > -pLine->GetHeight() * 2/5;// + pLine->GetMaxAscent();
> > +                                            }
> > +                                            else if ( eAlign ==
> ALIGN_TOP )
> > +                                            {
> > +                                                aRealOutPos.Y() +=
> > -pLine->GetHeight() * 4/5;// + pLine->GetMaxAscent();
> > +                                            }
> > +                                            else if( eAlign ==
> > ALIGN_BOTTOM)
> > +                                            {
> > +                                                aRealOutPos.Y() +=
> > pLine->GetHeight() * 1/5;// + pLine->GetMaxAscent();
> > +                                            }
>
> Not sure what this random multiplications are good for. Try-and-error
> until one example looked good?
> I didn't try it, but the calculations I suggested look much more logical
> to me...
> And again - please note that you also need to take vertical writing mode
> into consideration. Not sure if the feature makes sense in vertical
> writing. If so, adjust calculations accordingly. If not, make sure to
> not do the calculations in vertical writing mode.
>
>
yes,I already add a if sentence to implement the vertical writing mode.
It is OK for me.



> >
> > It can dispaly correctly in edit mode but not in unedit mode.
> >
> > Last but not least: Make sure that ODF covers your new attribute, or
> >> bring a proposal for this to the OASIS TC. Otherwise you can't have
> >> persistence for your new feature w/o having invalid ODF documents.
> >>
> > OK,Thank you.how to bring a proposal to the OASIS TC? Are there somebody
> in
> > OpenOffice team do this feature?
>
> Well, it seems CS2C is working on OOo features, so C2SC should become an
> OASIS member, and someone of you (maybe you?) should join the OASIS ODF
> TC. Submitting suggestions to OASIS TCs always needs to be done directly
> from the people who want to have something. This has something to do
> with intellectually property stuff.
>
>
I will ask someone else about this. I just join CS2C 2 month and do not know
many things .


> Malte.
>
>
With Best Regards,
LiuTao

> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@gsl.openoffice.org
> For additional commands, e-mail: dev-h...@gsl.openoffice.org
>
>

Reply via email to