00001
00017 #include "vetWindowGTK.h"
00018 #include "../vetUtility.h"
00019
00020
00022
00023 void destroy (GtkWidget *widget, gpointer data) {
00024
00025 }
00026 void expose (GtkWidget *widget, gpointer data) {
00027
00028 }
00029
00031
00032
00038 vetWindowGTK::vetWindowGTK(GtkWidget *mainWindow) : vetOutput()
00039 {
00040 INFO("vetWindowGTK::vetWindowGTK() : vetOutput() [CONTRUCTOR]")
00041
00042 image = NULL;
00043 window = mainWindow;
00044 height = VETWGTK_DEF_HEIGHT;
00045 width = VETWGTK_DEF_WIDTH;
00046 v_sleeptime = 0;
00047 setDithering();
00048 init();
00049 }
00050
00059 vetWindowGTK::vetWindowGTK(unsigned int w, unsigned int h, GtkWidget *mainWindow) : vetOutput()
00060 {
00061 INFO("vetWindowGTK::vetWindowGTK() : vetOutput() [CONTRUCTOR]")
00062
00063 image = NULL;
00064 window = mainWindow;
00065 height = h;
00066 width = w;
00067 v_sleeptime = 0;
00068 setDithering();
00069 init();
00070 }
00071
00075 vetWindowGTK::~vetWindowGTK()
00076 {
00077 while ( gtk_events_pending() )
00078 gtk_main_iteration();
00079
00080 gdk_flush();
00081
00082 }
00083
00088 int vetWindowGTK::init()
00089 {
00090 gtk_init(NULL,NULL);
00091
00092 gtk_widget_set_default_colormap(gdk_rgb_get_cmap());
00093 gtk_widget_set_default_visual(gdk_rgb_get_visual());
00094
00095 if (window == NULL)
00096 {
00097 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
00098 gtk_window_set_title(GTK_WINDOW (window), "vetWindowGTK 1.0");
00099 gtk_signal_connect(GTK_OBJECT (window), "destroy_event", GTK_SIGNAL_FUNC (destroy), NULL);
00100 }
00101
00102 image = gtk_drawing_area_new();
00103 gtk_signal_connect (GTK_OBJECT (image), "expose_event", GTK_SIGNAL_FUNC (expose), NULL);
00104
00105 gtk_container_add(GTK_CONTAINER(window),image);
00106 gtk_drawing_area_size(GTK_DRAWING_AREA(image),width,height);
00107 gtk_widget_set_usize(GTK_WIDGET(image),width,height);
00108
00109
00110 gdk_flush();
00111 while (gtk_events_pending())
00112 gtk_main_iteration();
00113 gdk_flush();
00114
00115 return VETRET_OK;
00116 }
00117
00118
00124 VETRESULT vetWindowGTK::setHeight(unsigned int value)
00125 {
00126 if (image == NULL)
00127
00128 return VETRET_ILLEGAL_USE;
00129
00130 height = value;
00131 gtk_drawing_area_size(GTK_DRAWING_AREA(image),width,height);
00132 gtk_widget_set_usize(GTK_WIDGET(image),width,height);
00133
00134 return VETRET_OK;
00135 }
00136
00142 VETRESULT vetWindowGTK::setWidth(unsigned int value)
00143 {
00144 if (image == NULL)
00145 return VETRET_ILLEGAL_USE;
00146
00147 width = value;
00148 gtk_drawing_area_size(GTK_DRAWING_AREA(image),width,height);
00149 gtk_widget_set_usize(GTK_WIDGET(image),width,height);
00150
00151 return VETRET_OK;
00152 }
00153
00154
00155
00156
00164 VETRESULT vetWindowGTK::setFrameRate(float fps)
00165 {
00166 if (fps < 0.)
00167 return VETRET_PARAM_ERR;
00168
00169 if ( fps == 0 )
00170 v_sleeptime = 0;
00171 else
00172 v_sleeptime = (long)( (float)1000 / fps );
00173
00174 return VETRET_OK;
00175 }
00176
00185 VETRESULT vetWindowGTK::show(bool doShowWindow)
00186 {
00187 gtk_widget_show(image);
00188
00189 if (doShowWindow)
00190
00191 gtk_widget_show(window);
00192
00193 return VETRET_OK;
00194 }
00195
00204 VETRESULT vetWindowGTK::hide(bool doHideWindow)
00205 {
00206 gtk_widget_hide(image);
00207
00208 if (doHideWindow)
00209 gtk_widget_hide(window);
00210
00211 return VETRET_OK;
00212 }
00213
00221 void vetWindowGTK::setDithering(int value)
00222 {
00223 switch (value)
00224 {
00225 case 1:
00226 currDith = GDK_RGB_DITHER_NORMAL;
00227 break;
00228 case 2:
00229 currDith = GDK_RGB_DITHER_MAX;
00230 break;
00231 default:
00232 currDith = GDK_RGB_DITHER_NONE;
00233 }
00234 }
00235
00236
00247 VETRESULT vetWindowGTK::importFrom(vetFrameYUV420& img)
00248 {
00249 INFO("int vetWindowGTK::importFrom(vetFrameYUV420& img) [reading data]")
00250
00251 if (image == NULL)
00252 return VETRET_INTERNAL_ERR;
00253
00254 vetFrameRGB24 tmp(img.width, img.height);
00255
00256 img >> tmp;
00257
00258 importFrom(tmp);
00259
00260 return VETRET_OK_DEPRECATED;
00261 }
00262
00263
00274 VETRESULT vetWindowGTK::importFrom(vetFrameRGB24& img)
00275 {
00276 INFO("int vetWindowGTK::importFrom(vetFrameRGB24& img) [reading data]")
00277
00278 if (image == NULL)
00279 return VETRET_INTERNAL_ERR;
00280
00281 gdk_draw_rgb_image( image->window,
00282 image->style->fg_gc[image->state],
00283 0,0,
00284 img.width,img.height,
00285 currDith,
00286 (guchar*)img.data[0],
00287 img.width*3
00288 );
00289
00290 return VETRET_OK;
00291 }
00292
00293
00305 VETRESULT vetWindowGTK::importFrom(vetFrameT<unsigned char>& img)
00306 {
00307 INFO("int vetWindowGTK::importFrom(vetFrameT& img) [reading data]")
00308
00309 if (image == NULL)
00310 return VETRET_INTERNAL_ERR;
00311
00312 return VETRET_NOT_IMPLEMENTED;
00313 }
00314
00315
00316
00317
00318