gpaint-develop
[Top][All Lists]
Advanced

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

[Gpaint-develop] tool objects


From: Michael A. Meffie III
Subject: [Gpaint-develop] tool objects
Date: Mon, 13 May 2002 22:52:27 -0400

Andy,

I would like to make some changes to gpaint related to the design of the
util.c module. Before I do, I want to make sure it is ok with you, and
you feel it would be change for the better.

I would like to make the gpaint tools modular and object-oriented,
using a similar technique as the GIMP uses. The tool objects would
be implemented as C structures with a few members that are
function pointers.

There would be a base class for all tools, called Tool. The ibuf would
have a pointer to the current tool object by a pointer to a Tool object
(instead of a tool number.) The tool object would be declared in in
tool.h, something like this:

   typedef void (* ButtonPressFunc)    (Tool *, GdkEventButton *);
   typedef void (* ButtonReleaseFunc)  (Tool *, GdkEventButton *);
   typedef void (* MotionFunc)         (Tool *, GdkEventMotion *); 
   struct _Tool
   {
      int    tool_type;
      char*  tool_name;
      struct image_buf *ibuf; /* for draw operations */
      ButtonPressFunc   button_press;
      ButtonReleaseFunc button_release;
      MotionFunc        motion;
   };

The button_press, button_release, and motion methods would be used in
the callback.c module on the current tool object. For example, to handle
the mouse motion event:

   on_drawingarea_motion_notify_event(...)
   {
     ... 
     if (active_tool) {
       (*active_tool->motion)(active_tool, x, y);
     }
     ...
   }
  
Each object would define this methods as needed as well as any tool
context information. For example the text tool would keep the current
text info. Much of the code that is currently in util.c would be moved
to a new home in a tool module. Related tools could be implemented within
a single module as not to create too many small files.

The paint brush and eraser would have a common class called paint_tool,
to deal with the paint interpolation code.

I think this would improve the modularity of the drawing code. This
would not change the user interface, but after the new tool objects are
ready, then we could add features to enhance the brush and line
attributes. For example, we need to add various brush tips. Hopefully
this change would help make it easier to add new tool types in the
future and to use gpaint as the basis for more special purpose programs.

Let me know if you think this would be a good project for gpaint. 

Thanks,
Mike

--
Michael A. Meffie III         http://home.neo.rr.com/meffie
For every truth, there is an equal and opposite truth.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]