[prev in list] [next in list] [prev in thread] [next in thread]
List: kfm-devel
Subject: Re: khtml/khtmlw and getSelected()/getSelectedText()
From: Waldo Bastian <bastian () ens ! ascom ! ch>
Date: 1999-06-17 13:30:13
[Download RAW message or body]
Dawit Alemayehu wrote:
>
> On Wed, 16 Jun 1999, Waldo Bastian wrote:
> [snipped]
> > I had a look at this the other day. The problem seems to be that select() isn't
> > working correctly for HTMLText objects. You might have noted that Ctrl-A
> > does select all other objects (e.g. images, links) on a page.
>
> Correct. This is what I actually meant. It does not select the text objects
> at all. But what is wierd is that HTMLLinkText inherts from HTMLText and
> does not override the select() method at all. Why would it then work for
> hyper-links and not regular text objects.
Well... We have several text classes... there is a README about that I guess.
Most text is not actually a HTMLText but a HTMLTextMaster.
This HTMLTextMaster spawns of HTMLTextSlaves during layout.
The HTMLTextMaster contains the actual text as well as selection
start and end. The HTMLTextSlave contains a pointer to the Master and
info about where which part of the text should be drawn.
> > I think that we should add a select(...) method to HTMLText which takes into
> > account the selStart and selEnd fields of the HTMLText object.
>
> >From one of the select() methods in HTMLText :
>
> void HTMLText::select( KHTMLWidget *_htmlw, HTMLChain *_chain,
> bool _select, int _tx, int _ty )
> {
> const char *u = getURL();
> if ( (u == 0) || (*u == '\0') || (_select == isSelected()) )
> return;
>
> setSelected( _select );
>
> selStart = 0;
> selEnd = strlen( text );
>
> _chain->push( this );
> _htmlw->paint(_chain, x + _tx, y - ascent + _ty, width, ascent+descent);
> _chain->pop();
> }
>
> setStart and selEnd values that contain the length of the text within the
> HTMLText object are indeed already in both select methods, but they are not used
> at all in these methods. Could this be the problem ??
Unlikely. They are used in the paint methods of the object.
(htmlw->paint descents the object tree to paint the object)
> The reason
> I am unsure is because HTMLLinkText inherts from HTMLText and does not override
> the select() methods, however the select() function works okay for it.
The problem most likely doesn't lie in HTMLText but in HTMLTextMaster/Slave.
(Sorry for stating otherwise)
Basically there are two clases of HTMLText functions:
HTMLText and HTMLTextMaster/HTMLTextSlave.
Derived from these is HTMLLinkText and (I guess) HTMLLinkTextMaster
(used for links)
The difference between HTMLText and HTMLTextMaster/Slave is that HTMLText
is used for words without any spaces or with only non-breaking spaces.
HTMLTextMaster is a specialized object which can contain a whole paragraph
of text and which can fit itself into a flow thereby breaking itself up into
HTMLTextSlaves for each line.
This is done to reduce the number of objects needed to render text.
Having a paragraph consisting of text with 100 words which needs to be
spread across 5 lines would take 100 HTMLText objects. Using HTMLTextMaster/
Slave objects, we only need 1 HTMLTextMaster and 5 HTMLTextSlaves.
Unfortunately these Master/Slaves objects are slightly more complex than
the other objects in KHTML(W).
Cheers,
Waldo
--
KDE, A New Millenium, A New Desktop http://www.kde.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic