00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <gdkmm/drawable.h>
00024 #include <gdkmm/general.h>
00025 #include <cairomm-1.0/cairomm/cairomm.h>
00026
00027 #include "../gtk-lumiera.hpp"
00028
00029 #include "../output/xvdisplayer.hpp"
00030 #include "../output/gdkdisplayer.hpp"
00031
00032 #include "video-display-widget.hpp"
00033
00034 namespace gui {
00035 namespace widgets {
00036
00037 VideoDisplayWidget::VideoDisplayWidget() :
00038 displayer(NULL)
00039 {
00040 }
00041
00042 VideoDisplayWidget::~VideoDisplayWidget()
00043 {
00044 if(displayer != NULL)
00045 delete displayer;
00046 }
00047
00048 void
00049 VideoDisplayWidget::on_realize()
00050 {
00051
00052 Gtk::Widget::on_realize();
00053
00054
00055 modify_bg(Gtk::STATE_NORMAL, Gdk::Color("black"));
00056
00057 if(displayer != NULL)
00058 delete displayer;
00059 displayer = createDisplayer(this, 320, 240);
00060
00061 add_events(Gdk::ALL_EVENTS_MASK);
00062 }
00063
00064 bool
00065 VideoDisplayWidget::on_button_press_event (GdkEventButton* event)
00066 {
00067 unsigned char buffer[320 * 240 * 4];
00068
00069 for(int i = 0; i < 320*240*4; i++)
00070 buffer[i] = rand();
00071
00072 displayer->put((void*)buffer);
00073
00074 return true;
00075 }
00076
00077 Displayer*
00078 VideoDisplayWidget::createDisplayer( Gtk::Widget *drawingArea, int width, int height )
00079 {
00080 REQUIRE(drawingArea != NULL);
00081 REQUIRE(width > 0 && height > 0);
00082
00083 Displayer *displayer = NULL;
00084
00085 displayer = new XvDisplayer( drawingArea, width, height );
00086 if ( !displayer->usable() )
00087 {
00088 delete displayer;
00089 displayer = NULL;
00090 }
00091
00092 if ( displayer == NULL )
00093 {
00094 displayer = new GdkDisplayer( drawingArea, width, height );
00095 }
00096
00097 return displayer;
00098 }
00099
00100 }
00101 }