Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

canvas.h

Go to the documentation of this file.
00001 // -*- c++ -*-
00002 // Generated by gtkmmproc -- DO NOT MODIFY!
00003 #ifndef _LIBGNOMECANVASMM_CANVAS_H
00004 #define _LIBGNOMECANVASMM_CANVAS_H
00005 
00006 #include <glibmm.h>
00007 
00008 // -*- C++ -*-
00009 /* $Id: canvas.hg,v 1.18 2003/07/21 19:45:07 murrayc Exp $ */
00010 
00011 /* canvas.h
00012  * 
00013  * Copyright (C) 1998 EMC Capital Management Inc.
00014  * Developed by Havoc Pennington <hp@pobox.com>
00015  *
00016  * Copyright (C) 1999 The Gtk-- Development Team
00017  *
00018  * This library is free software; you can redistribute it and/or
00019  * modify it under the terms of the GNU Library General Public
00020  * License as published by the Free Software Foundation; either
00021  * version 2 of the License, or (at your option) any later version.
00022  *
00023  * This library is distributed in the hope that it will be useful,
00024  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00025  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00026  * Library General Public License for more details.
00027  *
00028  * You should have received a copy of the GNU Library General Public
00029  * License along with this library; if not, write to the Free
00030  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00031  */
00032 
00033 #include <libgnomecanvas/gnome-canvas.h>
00034 #include <libgnomecanvasmm/affinetrans.h>
00035 #include <gtkmm/layout.h>
00036 #include <gdkmm/color.h>
00037 
00038 
00039 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00040 typedef struct _GnomeCanvas GnomeCanvas;
00041 typedef struct _GnomeCanvasClass GnomeCanvasClass;
00042 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00043 
00044 
00045 namespace Gnome
00046 {
00047 
00048 namespace Canvas
00049 { class Canvas_Class; } // namespace Canvas
00050 
00051 } // namespace Gnome
00052 namespace Gnome
00053 {
00054 
00055 namespace Canvas
00056 {
00057 
00058 class Item;
00059 class Group;
00060 
00067 class Canvas : public Gtk::Layout
00068 {
00069   public:
00070 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00071   typedef Canvas CppObjectType;
00072   typedef Canvas_Class CppClassType;
00073   typedef GnomeCanvas BaseObjectType;
00074   typedef GnomeCanvasClass BaseClassType;
00075 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00076 
00077   virtual ~Canvas();
00078 
00079 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00080 
00081 protected:
00082   friend class Canvas_Class;
00083   static CppClassType canvas_class_;
00084 
00085   // noncopyable
00086   Canvas(const Canvas&);
00087   Canvas& operator=(const Canvas&);
00088 
00089 protected:
00090   explicit Canvas(const Glib::ConstructParams& construct_params);
00091   explicit Canvas(GnomeCanvas* castitem);
00092 
00093 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00094 
00095 public:
00096 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00097   static GType get_type()      G_GNUC_CONST;
00098   static GType get_base_type() G_GNUC_CONST;
00099 #endif
00100 
00102   GnomeCanvas*       gobj()       { return reinterpret_cast<GnomeCanvas*>(gobject_); }
00103 
00105   const GnomeCanvas* gobj() const { return reinterpret_cast<GnomeCanvas*>(gobject_); }
00106 
00107 
00108 public:
00109   //C++ methods used to invoke GTK+ virtual functions:
00110 
00111 protected:
00112   //GTK+ Virtual Functions (override these to change behaviour):
00113   virtual void request_update_vfunc();
00114 
00115   //Default Signal Handlers::
00116   virtual void on_draw_background(const Glib::RefPtr<Gdk::Drawable>& drawable, int x, int y, int width, int height);
00117   virtual void on_render_background(GnomeCanvasBuf* buf);
00118 
00119 
00120 private:
00121 ;
00122 public:
00123   Canvas();
00124 
00125   //Allow CanvasAA to access the canvas_class_ member.
00126   
00127 
00128   //: Get the root canvas item
00129   
00133   Group* root() const;
00134            
00135   //: Limits of scroll region
00136   
00145   void set_scroll_region(double x1, double y1, double x2, double y2);
00146 
00147   //: Get limits of scroll region
00148   
00155   void get_scroll_region(double& x1, double& y1, double& x2, double& y2) const;
00156 
00157   
00165   void set_center_scroll_region(bool center);
00166 
00167   
00172   bool get_center_scroll_region() const;
00173 
00174   //: Set the pixels/world coordinates ratio
00175   //- With no arguments sets to default of 1.0.
00176   
00189   void set_pixels_per_unit(double n = 1.0);
00190 
00191   //: Shift window.
00192   //- Makes a canvas scroll to the specified offsets, given in canvas pixel
00193   //- units.
00194   //- The canvas will adjust the view so that it is not outside the scrolling
00195   //- region.  This function is typically not used, as it is better to hook
00196   //- scrollbars to the canvas layout's scrolling adjusments.
00197   
00205   void scroll_to(int x, int y);
00206 
00207   //: Scroll offsets in canvas pixel coordinates.
00208   
00214   void get_scroll_offsets(int& cx, int& cy) const;
00215 
00216   //: Repaint immediately, don't wait for idle loop
00217   //- normally the canvas queues repainting and does it in an
00218   //- idle loop
00219   
00225   void update_now();
00226 
00227   //: Find an item at a location.
00228   //- Looks for the item that is under the specified position, which must be
00229   //- specified in world coordinates.  Arguments are in world coordinates.
00230   //- Returns 0 if no item is at that
00231   //- location.
00232   
00240   Item* get_item_at(double x, double y) const;
00241 
00242 
00243   //: Repaint small area (internal)
00244   //- Used only by item implementations. Request an eventual redraw
00245   //- of the region, which includes x1,y1 but not x2,y2
00246   
00256   void request_redraw(int x1, int y1, int x2, int y2);
00257   //TODO: Investigate ArtUta.
00258   
00265   void request_redraw(ArtUta* uta);
00266 
00267   Art::AffineTrans w2c_affine() const;
00268   
00269 
00270   //: Convert from World to canvas coordinates (units for the entire canvas)
00271   //: to Canvas coordinates (pixels starting at 0,0 in the top left
00272   //: of the visible area). The relationship depends on the current
00273   //: scroll position and the pixels_per_unit ratio (zoom factor)
00274   
00281   void w2c(double wx, double wy, int& cx, int& cy) const;
00282   
00290   void w2c(double wx, double wy, double& cx, double& cy) const;
00291 
00292   //: From Canvas to World
00293   
00300   void c2w(int cx, int cy, double& wx, double& wy) const;
00301 
00302   //: Convert from Window coordinates to world coordinates.
00303   //- Window coordinates are based of the widget's GdkWindow.
00304   //- This is fairly low-level and not generally useful.
00305   
00314   void window_to_world (double winx,double winy, double& worldx,double& worldy) const;
00315 
00316   //: Convert from world coordinates to Window coordinates.
00317   //- Window coordinates are based of the widget's GdkWindow.
00318   //- This is fairly low-level and not generally useful.
00319   
00326   void world_to_window (double worldx, double worldy, double& winx, double& winy) const;
00327 
00328   //: Parse color spec string and allocate it into the GdkColor.
00329   bool get_color(const Glib::ustring& spec, Gdk::Color& color) const;
00330   
00331 
00332 /* Allocates a color from the RGB value passed into this function. */
00333   
00339   gulong get_color_pixel(guint rgba) const;
00340   
00346   void set_stipple_origin(const Glib::RefPtr<Gdk::GC>& gc);
00347   
00354   void set_dither(GdkRgbDither dither);
00355   
00359   GdkRgbDither get_dither() const;
00360 
00361 
00362   //TODO: Look at ArtSVP.
00363   
00369   void update_svp(ArtSVP** p_svp, ArtSVP* new_svp);
00370   
00377   void update_svp_clip(ArtSVP** p_svp, ArtSVP* new_svp, ArtSVP* clip_svp);
00378 
00379   // The following are simply accessed via the struct in C,
00380   //  but Federico reports that they are meant to be used.
00381   //: Get the pixels per unit.
00382   double get_pixels_per_unit() const;
00383 
00384   //: Draw the background for the area given.
00385   //- This method is only used for non-antialiased canvases.
00386   
00391   Glib::SignalProxy5<void,const Glib::RefPtr<Gdk::Drawable>&,int,int,int,int> signal_draw_background();
00392 
00393   // Render the background for the buffer given. 
00394   //- The buf data structure contains both a pointer to a packed 24-bit
00395   //- RGB array, and the coordinates.
00396   //- This method is only used for antialiased canvases.
00397   
00402   Glib::SignalProxy1<void,GnomeCanvasBuf*> signal_render_background();
00403 
00404   //: Private Virtual methods for groping the canvas inside bonobo.
00405   
00406 
00407   // Whether the canvas is in antialiased mode or not.
00413 Glib::PropertyProxy<bool> property_aa();
00414 
00415 
00416 };
00417 
00418 //: Antialiased Canvas.
00419 //- Constructor takes care of push/pop actions of the colormap.
00420 class CanvasAA : public Canvas
00421 {
00422   public:
00423     CanvasAA();
00424     virtual ~CanvasAA();
00425 };
00426 
00427 } /* namespace Canvas */
00428 } /* namespace Gnome */
00429 
00430 
00431 namespace Glib
00432 {
00434   Gnome::Canvas::Canvas* wrap(GnomeCanvas* object, bool take_copy = false);
00435 }
00436 #endif /* _LIBGNOMECANVASMM_CANVAS_H */
00437 

Generated on Fri Nov 12 14:55:52 2004 for libgnomecanvasmm by doxygen 1.3.5