Hello there,
I've been trying to work on getting the word wrap work in the input
bar of ScTextWnd and come up with following inferences.
In the Paint() function the 'if' part is executed when we the focus is
on input bar after mouse button down event, which invokes the
StartEditEngine() function creating objects necessary for making use
of the EditEngine class. EditEngine stops as the focus shifts from the
input bar to spreadsheet cells. Incase if we click on the cell and
type the string the else part is executed where the OutputDevice's
DrawText() method is called and EditEngine will not be used.
Since the logic for wrapping the text is to set the paper size using
the function SetPaperSize() in EditEngine which takes width and height
parameters. I tried passing the width and height of the inputbar but
I'm not able to get the proper scroll height offered by it, i.e. after
wrapping the cursor shifts a bit down showing the lower portion of the
upper line and hiding that of the current line. That's what I've
modified, but Couldn't get the desired result.
Size barSize=GetOutputSizePixel();
Size pSize =LogicToPixel(pEditEngine->GetPaperSize());
long barHeight=barSize.Height();
long textHeight=LogicToPixel( Size( 0, GetTextHeight() ) ).Height();
long nDiff = (barHeight - textHeight)/2;
barSize.Height()+=2*nDiff + barHeight;
barSize.Width() -= 2*TEXT_STARTPOS-4;
pEditEngine->SetUpdateMode( false );
pEditEngine->SetPaperSize( PixelToLogic(Size(barSize)) );
@Kohei as you suggested to use the upper corner of the input bar to
draw the string, which I guess is the same as set by the DrawText in
Paint itself. Also I tried going for using the EditEngine completely
so I replaced everything inside Paint() with this code.
void ScTextWnd::Paint( const Rectangle& rRec )
{
SetFont( aTextFont );
long a = GetOutputSizePixel().Height();
long b = GetOutputSizePixel().Width();
long c = LogicToPixel( Size( 0, GetTextHeight() ) ).Height();
long d = LogicToPixel( Size( 0, GetTextHeight() ) ).Width();
long nDiff = GetOutputSizePixel().Height()
- LogicToPixel( Size( 0, GetTextHeight() ) ).Height();
long nStartPos = TEXT_STARTPOS;
if ( bIsRTL )
{
// right-align
nStartPos += GetOutputSizePixel().Width() - 2*TEXT_STARTPOS -
LogicToPixel( Size( GetTextWidth( aString ), 0
) ).Width();
}
StartEditEngine(); //starting edit engine
pEditEngine->Draw(this, rRec, Point( nStartPos, nDiff/2 ),false);
}
After doing so, the wrap happens for the first line only without
scroll and things turned messy afterwards
I think I'm missing something here, may be I need to work on some more
methods and manipulate them accordingly. I'd like to have suggestions
about this thing, so that I can improvise more and more.
Thanks and regards.
--
Anurag Jain
Final yr B.Tech CSE
SASTRA University
Thanjavur(T.N.)-613402
Context
- [Libreoffice] [GSOC] Multi line input bar · Anurag Jain
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.