t_draw.cpp

Go to the documentation of this file.
00001 // Implementation Details:
00002 //
00003 // Author: Chris Koeritz
00004 
00005 #include <basis/chaos.h>
00006 #include <opsystem/application_shell.h>
00007 #include <loggers/console_logger.h>
00008 #include <data_struct/static_memory_gremlin.h>
00009 #include <wp_passive/box.h>
00010 #include <wp_passive/manager.h>
00011 #include <wp_passive/visible_line.h>
00012 #include <wp_passive/wp_implementation.h>
00013 
00014 #include <stdio.h>
00015 
00016 class t_draw : public application_shell
00017 {
00018 public:
00019   t_draw() : application_shell(class_name()) {}
00020   IMPLEMENT_CLASS_NAME("t_draw");
00021   virtual int execute();
00022 };
00023 
00024 int t_draw::execute()
00025 {
00026   FUNCDEF("execute");
00027   manager root("t_draw");
00028   canvas testwin(root, c_rectangle(100,100,900,900));
00029 
00030   color fore(root.lookup("gold"));
00031 log(istring("color gold has: ") + fore.text_form());
00032   const bool put_on_canvas = false;
00033   visible_line bow
00034     (testwin, c_line(c_point(0, 0), c_point(100, 0)), fore, put_on_canvas);
00035   visible_line prow
00036     (testwin, c_line(c_point(0, 0), c_point(10, -25)), fore, put_on_canvas);
00037   visible_line keel
00038     (testwin, c_line(c_point(10, -25), c_point(95, -32)), fore, put_on_canvas);
00039   visible_line stern
00040     (testwin, c_line(c_point(95, -32), c_point(100, 0)), fore, put_on_canvas);
00041   visible_line mast
00042     (testwin, c_line(c_point(60, 0), c_point(60, 93)), fore, put_on_canvas);
00043   visible_line high_yard
00044     (testwin, c_line(c_point(50, 62), c_point(70, 62)), fore, put_on_canvas);
00045   visible_line low_yard
00046     (testwin, c_line(c_point(35, 31), c_point(85,31)), fore, put_on_canvas);
00047 
00048   if (put_on_canvas) {
00049     bow.draw();
00050     prow.draw();
00051     keel.draw();
00052     stern.draw();
00053     mast.draw();
00054     high_yard.draw();
00055     low_yard.draw();
00056   }
00057 
00058   picture boat(c_point(100, 100));
00059   boat.add(&bow); boat.add(&prow); boat.add(&keel); boat.add(&stern);
00060   boat.add(&mast); boat.add(&high_yard); boat.add(&low_yard);
00061   testwin.add(&boat);
00062 
00063   if (put_on_canvas) boat.draw();
00064 
00065 //  keyboard my_keys;
00066 //  my_keys.get(WAIT);
00067 
00068   if (put_on_canvas) {
00069     boat.erase();
00070     boat.set_origin(c_point(90, 120));
00071     boat.draw();
00072     box boat_house(testwin, boat.dimensions());
00073     boat_house.draw();
00074 //  my_keys.get(WAIT);
00075   }
00076 
00077   chaos rando;
00078   c_point increment
00079     (rando.inclusive(3, 15), rando.inclusive(3, 12));
00080   while (true) {
00082     boat.set_origin(boat.drawable::origin() + increment);
00083     c_rectangle windim(testwin.world());
00084     c_rectangle boatdim(boat.dimensions());
00085     if (!windim.inside(boatdim.vertex_1())
00086         || !windim.inside(boatdim.vertex_2()) ) {
00087 LOG("not inside!");
00088 LOG(istring("win dim ") + windim.text_form() + " boat dim " + boatdim.text_form());
00089       boat.set_origin(boat.drawable::origin() - increment);
00090       bool flip_x = bool((boatdim.minimum_x() < windim.minimum_x())
00091         || (boatdim.maximum_x() > windim.maximum_x()));
00092       bool flip_y = bool((boatdim.minimum_y() < windim.minimum_y())
00093         || (boatdim.maximum_y() > windim.maximum_y()));
00094       if (flip_x) increment.set(-increment.x(), increment.y());
00095       if (flip_y) increment.set(increment.x(), -increment.y());
00096 LOG(isprintf("flipx=%s flipy=%s", flip_x? "true" : "false", flip_y? "true" : "false"));
00097       boat.set_origin(boat.drawable::origin() + increment);
00098     }
00099     root.poll_and_return(100);
00100 //    XFlush(root.display());
00101   }
00102   testwin.remove(&boat);
00103   return 0;
00104 }
00105 
00106 HOOPLE_MAIN(t_draw, )
00107 

Generated on Fri Nov 28 04:29:34 2008 for HOOPLE Libraries by  doxygen 1.5.1