src/work/peter/canvas-test.cc
author deba
Fri, 11 Mar 2005 16:44:20 +0000
changeset 1213 6cc106135d31
child 1221 6706c788ebb5
permissions -rw-r--r--
Solve conflict.
     1 // This example was started by Guillaume Laurent.
     2 // It has become a place to dump code that tests parts of the
     3 // gnomemm canvas code. Little thought has been given to the
     4 // actual on-screen output.
     5 
     6 #include <libgnomecanvasmm.h>
     7 #include <libgnomecanvasmm/polygon.h>
     8 #include <iostream>
     9 
    10 class CanvasExample : public Gnome::Canvas::CanvasAA
    11 {
    12 	typedef Gnome::Canvas::CanvasAA Parent;
    13 
    14 public:
    15 	CanvasExample();
    16 	virtual ~CanvasExample();
    17 
    18 private:
    19 	bool event_handler(GdkEvent* e, bool b);
    20 	Gnome::Canvas::Points coos;
    21 	Gnome::Art::Point * wp;
    22 	Gnome::Canvas::Ellipse ** nodes;
    23 	Gnome::Canvas::Polygon * sides;
    24 	Gnome::Canvas::Group triangle;
    25 };
    26 
    27 bool CanvasExample::event_handler(GdkEvent* e, bool b)
    28 {
    29 	bool isbutton=true;
    30 	switch(e->type)
    31 	{
    32 		case GDK_BUTTON_PRESS: printf("Node is pressed!\n"); break;
    33 		//case GDK_BUTTON_RELEASE: printf("Node is released!\n"); break;
    34 		default: isbutton=false; break;
    35 	}
    36 	if(isbutton)
    37 	{
    38 		//(get_item_at(e->button.x, e->button.y))->move(5,5);
    39 		(get_item_at(e->button.x, e->button.y))->hide();
    40 	}
    41 }
    42 
    43 CanvasExample::CanvasExample():triangle(*(root()), 0, 0)
    44 {
    45 	double ax=100;
    46 	double ay=100;
    47 	double bx=-100;
    48 	double by=100;
    49 	double cx=0;
    50 	double cy=-100;
    51 	coos.push_back(Gnome::Art::Point(100, 100));
    52 	coos.push_back(Gnome::Art::Point(-100, 100));
    53 	coos.push_back(Gnome::Art::Point(0, -100));
    54 
    55 	sides=new Gnome::Canvas::Polygon(triangle, coos);
    56 	*sides << Gnome::Canvas::Properties::outline_color("green");
    57 	sides->property_width_pixels().set_value(10);
    58 
    59 	nodes=new ( Gnome::Canvas::Ellipse * ) [4];
    60 
    61 	for(int i=0; i<3;i++)
    62 	{
    63 		nodes[i]= new Gnome::Canvas::Ellipse(triangle, coos[i].get_x()-20, coos[i].get_y()-20, coos[i].get_x()+20, coos[i].get_y()+20);
    64 		*(nodes[i]) << Gnome::Canvas::Properties::fill_color("blue");
    65 		*(nodes[i]) << Gnome::Canvas::Properties::outline_color("black");
    66 		(nodes[i])->signal_event().connect(sigc::bind(sigc::mem_fun(*this, &CanvasExample::event_handler),true));
    67 	}
    68 
    69 	wp=new Gnome::Art::Point((ax+bx+cx)/3,(ay+by+cy)/3);
    70 
    71 	nodes[3]= new Gnome::Canvas::Ellipse(triangle, wp->get_x()-20, wp->get_y()-20, wp->get_x()+20, wp->get_y()+20);
    72 	*(nodes[3]) << Gnome::Canvas::Properties::fill_color("blue");
    73 	*(nodes[3]) << Gnome::Canvas::Properties::outline_color("black");
    74 
    75 
    76 }
    77 
    78 CanvasExample::~CanvasExample()
    79 {
    80 }
    81 
    82 //MainWin:
    83 
    84 class MainWin : public Gtk::Window
    85 {
    86 public:
    87 	MainWin(const std::string& title);
    88 
    89 protected:
    90 	//Member widgets:
    91 	CanvasExample m_canvas;
    92 };
    93 
    94 MainWin::MainWin(const std::string& title)
    95 {
    96 	set_title (title);
    97 	add(m_canvas);
    98 	set_default_size(900,600);
    99 
   100 	show_all();
   101 }
   102 
   103 //main():
   104 
   105 int main(int argc, char *argv[])
   106 {
   107 	Gnome::Canvas::init();
   108 	Gtk::Main app(argc, argv);
   109 
   110 	MainWin mainwin("Gnome::Canvas Example");
   111 	app.run(mainwin);
   112 
   113 	return 0;
   114 }