Re: canvas rich text widget?



On Wed, 31 Jan 2001, Bibek Sahu wrote:

> Howdy all,
> 
> 	I was planning on writing a fancy text-rendering widget for the
> Gnome Canvas (as part of a fancy viewer/editor thing, but we need not get
> into that right now).  I noticed that this has been on the Gnome wishlist
> for some time now (since summer 1999, as I recall), but as near as I can
> tell nothing's actually been done on it.
> 
> 	I noticed some messages in list archives implying that someone was
> planning to create something similar to this using freetype (and I actually
> grabbed the python module which was referenced), but that was from 6 months
> ago and I haven't found anything more recent.
> 
> 	So, my question is: has anything actually been done on this?  If so,
> whom should I contact to offer my assistance?  If not, are there any things
> you recommend I take into account before I begin (I'm using Gnome 1.2, so
> e.g. differences between the GnomeCanvasItem in 1.2, 1.4, and 2.0 would be
> relevant)?

I've written quite a lot of this.  I have a huge backlog of email at the
moment, but will get back to you later today. 

njh

> 	A few notes on what I have in mind:
> 
> 	I intend for this widget to be small, fast, and efficient.  It will
> render text.  It will /only/ render text; any fancy abilities you want can
> be done in separate things -- this widget ought to be appropriate for even
> the smallest text editor.  It will have the ability to include generic
> 'objects' inline in the text but will not render them itself; and it will
> have the ability to flow around generic 'obstructions' (which will initially
> be rectangles, but could theoretically be any shape), but again it will not
> render these itself.  Since it is an editor and not simply a viewer, you
> will be able to change things on the fly; a side-effect of this is that it
> will support progressive loading.
> 
> 	I know this is possible, because I created a widget with these
> properties (and which was small, /very/ fast, and pretty efficient) in QT
> about 3-4 years ago.  I stopped working on it because it was getting to the
> point where I was essentially creating the Gnome Canvas, but the Gnome
> Canvas didn't exist at that time so I didn't have the option of simply using
> it.  However, this time I intend to make it even cleaner and more efficient
> than I did in the past... and I intend to use the canvas to take care of
> many of the low-level details for me (and to do so much better than I would
> have way back when ;-).  I've given a lot of thought to what I did right and
> what I did wrong back then, but since I was in school I didn't have much
> chance to implement my ideas.  Now that I've graduated, I have a little free
> time (though I'm sure that will change once I find a real job... consulting
> doesn't pay well if you don't have paying clients ;-).
> 
> 	I think I'm simply going to use libfreetype2 to do the text
> rendering.  QT took care of text scaling, shearing, yadda yadda yadda for me
> back then; but X fonts don't support that natively.  Freetype2 supports
> TrueType, Type1, OpenType, and a few other font types (and has a generic
> driver interface), so one shall not want for fonts.
> 
> 	I'm also planning for the core text-information structures to be
> generic enough to be used at the console, without needing an X server
> running.  This should be quite doable since freetype doesn't depend on X
> (and in fact XFree 4.x depends on freetype ;-).  Done correctly, this will
> also make it easier to switch to GnomeFont or whatever you folks are
> planning for later versions of Gnome.
> 
> 	This widget I'm planning to write in C, so that it will be usable by
> the Gnome community at large.  The applications I intend to write based on
> it will be in C++, because in my personal opinion that is much better suited
> to GUI programming (since it has support for inheritance, multiple
> inheritance, virtual functions, etc., etc., etc.).
> 
> 	Further down the line:
> 
> 	Once this is in a usable state (which shouldn't take /too/ long,
> after I've finished planning -- and since I've spent the last three years
> planning, there's little left), I'm planning to use it as part of a "text
> processing system" (I can't think of a better way to describe it). 
> Essentially, this is the core of a word processor, but with support for
> plugins (which shall be shared libraries; can't use CORBA components here
> because they're too slow, though you could create a CORBA/bonobo plugin if
> you /really/ wanted).  When I did this in QT years ago, I had everything
> down to cut/copy/paste as plugins.  One of my friends did a font-color
> plugin, another guy did a spell check plugin; in total, there were 14
> plugins available, at least half done by my friend who is not -- and does
> not want to be -- much of a programmer.  Loading this thing with no plugins
> got you something like MS Notepad (but with a smaller memory/resource
> footprint), loading it with all the plugins we had got you something like MS
> Wordpad; theoretically, had more plugins been created, it could have become
> as fancy as MS Word.  The advantage of this design was that I only had to
> contentrate on the core, and other people were able to add whatever features
> they wanted.  But eventually I wanted to make it /too/ abstract (essentially
> creating another GUI API, so I could use both Gtk+ and QT), and it shot me
> in the foot.  I won't make that mistake again.  This time, I'm sticking to
> Gnome-- and libglade. :-)
> 
> 	Also, I intend to later use this as part of a desktop publisher. 
> Really people, the only thing the Canvas is missing to be a basic desktop
> publisher is a usable text component, and a GUI.
> 
> 	Now this "text processing system" /may/ sound a bit far-fetched to
> some, or sound like I'm biting off more than I can chew (which I suppose
> depends on how well you understand what I've said, and how well you know me
> ;-), but it's actually very simple.  The reason it's simple is because I'm
> only planning to make the core, and a nice, flexible module API (in C++,
> though I'll probably put in a wrapper for C plugins).  The features will be
> up to the users.  Doesn't have a feature you want?  Write a plugin for it,
> or get one of your friends to do so; no need to write an entire app.  Need a
> simple text editor?  Just load it without plugins (the QT thing I did years
> ago took up about 2MB of RAM with just the basic plugins loaded).  Need
> something like MS Word?  Install an extra DIMM and activate all plugins. ;-)
> 
> 	Of course, for this to be a usable application, people other than
> myself need to be working on this.  I'm hoping -- praying -- that once
> something usable exists, people will start working with it.  Time will tell.
> 
> ----
> 
> 	So for now, I guess the question is: is anyone already working on a
> Rich Text Widget?
> 
> - Bibek
> 
> 
> _______________________________________________
> gnome-devel-list mailing list
> gnome-devel-list gnome org
> http://mail.gnome.org/mailman/listinfo/gnome-devel-list
> 





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]