On Apr 6, 8:04 pm, Kenneth McDonald <[EMAIL PROTECTED]> wrote: > I'm attempting to write a "pure DOM" text editor, i.e. one that doesn't > make any use of special features that are used (I think) by all of the > current WYSIWYG in-browser editors. The problem I'm trying to resolve > right now is; when the user moves the cursor vertically, how do I > determine where to position it? > > For example, let's say they press the up arrow key to move the cursor up > one line. Assume for the time being that the text will be in a linear > left to right, top to bottom Western layout. Moving the cursor up should > leave it in the line that is visually above the line the cursor was > previously on, with its x-position as near as possible to its previous > x-position. > > However, there doesn't seem in JS to be any way of finding the bounding > box of individual characters within text nodes. The two solutions I've > come up with are > > 1) Using a 0-width SPAN element, successively move it backwards one > character at a time, testing its coordinates at each position, until a > suitable position is found. normalize text nodes as the SPAN element > "leaves" them. > 2) Move backwards one text node at a time; at each text node, "explode" > that node by placing each character into a single SPAN element, and then > test the bounding box of each character. When leaving a text node, > "implode" it back to its previous state. > > Aside from being a bit of a pain to program, my main concern with these > methods is that they might be too computationally intensive. The first > will require a lot of splitting and rejoining of text node contents, > while the second may require (depending on the size of the text node) > creating a great many one-character DOM elements. > > More importantly, I'm worried about how much rendering time this might > take; if the browser does a full re-render each time (even though, > theoretically, neither of the above methods should actually cause any > visible change in the page (I think), that could chew up some > significant time. If anyone familiar with the internals of Gecko could > comment, I'd greatly appreciate it. > > And, if anyone knows of a simpler method of doing this, please let me know! > > Thanks, > Ken
If you know a piece of text does not wrap and you are using xhtml, you could try overlaying it with the same invisible(opacity="0") text and font in SVG and then use the SVG DOM to get the positions of individual characters. _______________________________________________ dev-tech-layout mailing list [EMAIL PROTECTED] https://lists.mozilla.org/listinfo/dev-tech-layout

