From 5c1c0a94b40bb45ed7601e23dfc89e95a5895714 Mon Sep 17 00:00:00 2001 From: Steffen Pohle Date: Wed, 7 Dec 2022 20:58:42 +0100 Subject: [PATCH] pre scale buttons are working --- configuration.cc | 3 ++- gui.cc | 10 --------- gui.h | 1 - simpleskycam.ui | 13 +++++++++--- video.cc | 53 +++++++++++++++++++++++++++++++++--------------- videodev.cc | 6 +++--- 6 files changed, 52 insertions(+), 34 deletions(-) diff --git a/configuration.cc b/configuration.cc index 992dec0..08b7705 100644 --- a/configuration.cc +++ b/configuration.cc @@ -283,7 +283,8 @@ void Configuration::LoadConfig(std::string filename) { printf ("%s:%d window '%s' set geometry %d,%d : %d x %d\n", __FILE__, __LINE__, name.c_str(), x, y, w, h); gtk_window_move (GTK_WINDOW(wnd), x, y); gtk_window_resize (GTK_WINDOW(wnd), w, h); - if (show) gtk_widget_show(wnd); + gtk_widget_show(wnd); + if (!show) gtk_widget_hide(wnd); } } } diff --git a/gui.cc b/gui.cc index 20e1199..a48503f 100644 --- a/gui.cc +++ b/gui.cc @@ -59,11 +59,6 @@ void cb_window_show (GtkWidget *widget, gpointer data) { GtkWidget *rboff = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "detect-pos-cboff")); GtkWidget *rbcrossc = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "detect-type-indet2")); -// GtkWidget *win_detect = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "window-detect")); -// GtkWidget *win_input = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "window-input")); -// GtkWidget *win_output = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "window-output")); -// GtkWidget *win_histogram = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "window-histogram")); - // changing the value, will cause the 'change' event to be triggered gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rboff), true); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rbcrossc), true); @@ -87,11 +82,6 @@ void cb_window_show (GtkWidget *widget, gpointer data) { // // update the input video controls every 2 seconds. g_timeout_add(2000, videoctrl_update, NULL); - -// gtk_widget_show (win_detect); -// gtk_widget_show (win_input); -// gtk_widget_show (win_output); -// gtk_widget_show (win_histogram); }; diff --git a/gui.h b/gui.h index 4b0b0bf..0d69763 100644 --- a/gui.h +++ b/gui.h @@ -82,7 +82,6 @@ G_MODULE_EXPORT gboolean cb_thread_video (gpointer data); G_MODULE_EXPORT void cb_input_show_window (GtkWidget *widget, gpointer data); G_MODULE_EXPORT void cb_input_btncapture (GtkWidget *widget, gpointer data); G_MODULE_EXPORT void cb_input_btnsnapshot (GtkWidget *widget, gpointer data); -G_MODULE_EXPORT void cb_input_btnflat (GtkWidget *widget, gpointer data); G_MODULE_EXPORT void cb_input_btnscale (GtkWidget *widget, gpointer data); diff --git a/simpleskycam.ui b/simpleskycam.ui index 297f322..55794dd 100644 --- a/simpleskycam.ui +++ b/simpleskycam.ui @@ -523,13 +523,17 @@ 8 + 96 True False + start + start vertical - + True False + start 6 6 X: 00000 @@ -541,9 +545,12 @@ - + True False + start + 6 + 6 Y: 00000 @@ -555,7 +562,7 @@ False - True + False 0 diff --git a/video.cc b/video.cc index 4213882..69eb607 100644 --- a/video.cc +++ b/video.cc @@ -119,10 +119,13 @@ void cb_videoda_draw(GtkWidget *area, cairo_t *cr, int w, int h, gpointer data) char txt2[255]; GdkRGBA color; - GtkWidget *e_x = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "detect-entry-posx")); - GtkWidget *e_y = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "detect-entry-posy")); - GtkWidget *e_w = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "detect-entry-w")); - GtkWidget *e_h = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "detect-entry-h")); + static GtkWidget *e_x = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "detect-entry-posx")); + static GtkWidget *e_y = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "detect-entry-posy")); + static GtkWidget *e_w = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "detect-entry-w")); + static GtkWidget *e_h = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "detect-entry-h")); + static GtkWidget *lbX = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "lb_input_xdelta")); + static GtkWidget *lbY = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "lb_input_ydelta")); + int x, y, w1, h1; if (video_da == NULL) return; @@ -227,8 +230,11 @@ void cb_videoda_draw(GtkWidget *area, cairo_t *cr, int w, int h, gpointer data) } // draw movement vector to screen - snprintf (txt1, 255, "%f", detectedpos_data.dx); - snprintf (txt2, 255, "%f", detectedpos_data.dy); + snprintf (txt1, 255, "X: %f", detectedpos_data.dx); + snprintf (txt2, 255, "Y: %f", detectedpos_data.dy); + gtk_label_set_text(GTK_LABEL(lbX), txt1); + gtk_label_set_text(GTK_LABEL(lbY), txt2); + /* drawing the text on the screen disabled for (int i = 0; i < 5; i++) { int dx, dy; @@ -265,7 +271,7 @@ void cb_videoda_draw(GtkWidget *area, cairo_t *cr, int w, int h, gpointer data) cairo_move_to (cr, 10+dx, 30+dy); cairo_show_text(cr, txt2); cairo_stroke(cr); - } + } */ }; @@ -806,23 +812,38 @@ void cb_input_btnsnapshot (GtkWidget *widget, gpointer data) { }; -void cb_input_btnflat (GtkWidget *widget, gpointer data) { - printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__); -}; - - +/* + * resize windows depending on the button which was pressed + */ void cb_input_btnscale (GtkWidget *widget, gpointer data) { - printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__); - + int dw, dh, ww, wh; float scale = 1.0; + printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__); + if (videodev == NULL || video_da == NULL) return; + + // + // what scale button was pressed GtkWidget *btn11 = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "btn_inputscale11")); GtkWidget *btn12 = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "btn_inputscale12")); GtkWidget *btn14 = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "btn_inputscale14")); - if (widget == btn11) scale = 1.0; if (widget == btn12) scale = 0.5; if (widget == btn14) scale = 0.25; - scale *= 1.0; + // + // read our video size from gui and calculate size of gui elements + GtkWidget *win = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "window-input")); + gtk_window_get_size(GTK_WINDOW(win), &ww, &wh); + dh = gtk_widget_get_allocated_height(video_da); + dw = gtk_widget_get_allocated_width(video_da); + dw = ww-dw; + dh = wh-dh; + + videodev->GetVideoInfo(&ww, &wh, NULL); + + ww = dw + (scale * ww); + wh = dh + (scale * wh); + + gtk_window_resize(GTK_WINDOW(win), ww, wh); }; diff --git a/videodev.cc b/videodev.cc index 984130e..d8b5d62 100644 --- a/videodev.cc +++ b/videodev.cc @@ -214,9 +214,9 @@ void VideoDev::Stop() { void VideoDev::GetVideoInfo(int *w, int *h, std::string *format) { - *format = conf_format; - *w = conf_width; - *h = conf_height; + if (format != NULL) *format = conf_format; + if (w != NULL) *w = conf_width; + if (h != NULL) *h = conf_height; }