Well, the main thing is that they'll be readable and writeable both by the user interactively and by the program. I'd like the program to see the text as just text, not cluttered with html or whatever, even if there's html in the implementation. I see a need for two kinds of interaction. One is the text editor style, in which there's a body of text that you jump around and add to throughout the document. The other is the conversation style, in which new text is added at the end, and the stuff above there doesn't change. So if you start editing a line earlier in the document, it gets copied down to the bottom and your edits happen in the copy.
My ideas for this are based on what we implemented in Object Logo 30 years ago...
But you'll be able to choose fonts and colors and all that. I think a text box should be considered a costume, so that it can be attached to a sprite which can then move, turn, etc., around the stage.
But none of this is official! I'm guessing Jens will want something simpler, but I don't really know yet.
I understand your frustration. But, look, if you're trying to learn something you don't already understand, you have to be able to tolerate some temporary frustration. I'm not saying not to ask for explanations! But don't make it sound as if everyone else is conspiring to frustrate you.
So, just to clear it out of the way, Logo is a programming language for kids, the immediate ancestor of Scratch and so the indirect ancestor of Snap!. Object Logo was an advanced version of Logo, way ahead of its time, to which I was a minor contributor. (It's in the past tense because it was designed to be really fast, so it included a JIT compiler to the Motorola 68000 processor that was used in the very first Macs. So when Apple moved away from the 68000, Object Logo stopped working.) One reason Object Logo is important to us is that it was the source of the object system Snap! uses for sprites and their clones. But it also had a great design for text boxes that I want to reimplement for Snap!.
Okay, you don't actually have to know or care about Object Logo for the discussion of text boxes. What's a text box? Answer:
A picture is worth 1K words. :~)
Why do I want text boxes to be costumes? So that I can do this:
and, you know, move it around the stage, all the things you can do with sprites and their costumes.
What's left is the part about the two categories of text boxes. The first category is a text editor, just like the editing program you use all the time, TextEdit if you're a Mac user, or umm Notepad? if you're a Windows user. (If you're a Linux user you know what a text editor is... :~) )
The second category is an interactive conversation window:
In this sort of program it would be meaningless to insert text anywhere other than at the end of the conversation, and you want what the user types to be visually distinguished from what the program types.
Oh interesting. I hadn't thought of exposing underlying representations to the user. Remember that one use of this would be for the program to read text entered by the user, so that text should be just the meaning part -- the characters -- not the formatting part. I'm envisioning that the formatting part would be available too, somehow, on a character-by-character basis, as metadata, so a character that would ordinarily appear as "r" in a text string might be "r: blue 14 point Baskerville semibold italic" or something when read in some special way. The goal is for users not to have to write HTML (etc) parsers. But I suppose an alternate approach would be to have a just-the-text reporter that would take HTML (etc) as input and report just the meaningful bits. On the third hand, the program should be able to say "select characters 49 to 87 of the box" and have that selection be highlighted, so it has to be able to say that directly about the text box's data structure.
At the moment I'm thinking that it'd only support text, not green circles as in your example, for simplicity. (But of course a sprite wearing a text box could be attached to a sprite wearing a green circle.)