$ git clone https://tcclient.ion.nu/tc_client.git
commit 104d8e833de3eec799737b69dcbb516f957c6572
Author: Alicia <...>
Date: Wed Oct 5 20:06:44 2016 +0200
tc_client-gtk: added an option to pick the greenscreen "green" color from the camera.
diff --git a/ChangeLog b/ChangeLog
index 2c9cace..a58651d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,7 @@ tc_client-gtk: turn URLs mentioned in chat into clickable links.
tc_client-gtk: reimplemented automatic scrolling using a state to keep track of whether the GtkTextView is scrolled to the bottom and using gtk_text_view_scroll_to_mark() to scroll.
tc_client-gtk: when keeping HTTP cookies, use separate cookies per account and one for no account to avoid serverside issues.
tc_client-gtk: stop trying to send video data if our media stream was closed.
+tc_client-gtk: added an option to pick the greenscreen "green" color from the camera.
tc_client-gtk and camviewer: updated to libavcodec's avcodec_{send,receive}_{frame,packet} API.
libcamera(v4l2): cache the frame and if there is no data to be read, return the cache instead of blocking.
0.39:
diff --git a/gtkgui.glade b/gtkgui.glade
index a56a5cf..b481225 100644
--- a/gtkgui.glade
+++ b/gtkgui.glade
@@ -1031,6 +1031,26 @@
</object>
</child>
</object>
+ <object class="GtkMenu" id="link_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkMenuItem" id="link_menu_open">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Open Link</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkMenuItem" id="link_menu_copy">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Copy Link</property>
+ <property name="use_underline">True</property>
+ </object>
+ </child>
+ </object>
<object class="GtkWindow" id="main">
<property name="can_focus">False</property>
<property name="title" translatable="yes">tc_client</property>
@@ -1412,6 +1432,19 @@
<property name="position">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkToggleButton" id="greenscreen_eyedropper">
+ <property name="label" translatable="yes">Pick color from cam</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -1535,24 +1568,4 @@
</object>
</child>
</object>
- <object class="GtkMenu" id="link_menu">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkMenuItem" id="link_menu_open">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Open Link</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="link_menu_copy">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Copy Link</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- </object>
</interface>
diff --git a/utilities/gtk/gui.c b/utilities/gtk/gui.c
index 0303173..e0599e9 100644
--- a/utilities/gtk/gui.c
+++ b/utilities/gtk/gui.c
@@ -418,8 +418,13 @@ void fontsize_set(double size)
const char* menu_context_cam=0;
gboolean gui_show_cam_menu(GtkWidget* widget, GdkEventButton* event, const char* id)
{
- if(event->button!=3){return 0;} // Only act on right-click
struct camera* cam=camera_find(id);
+ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(gui, "greenscreen_eyedropper"))))
+ {
+ gui_set_greenscreen_color_cam(event->x, event->y, cam);
+ return 1;
+ }
+ if(event->button!=3){return 0;} // Only act on right-click
free((void*)menu_context_cam);
menu_context_cam=strdup(cam->id);
GtkMenu* menu=GTK_MENU(gtk_builder_get_object(gui, "cam_menu"));
@@ -614,6 +619,23 @@ void gui_set_greenscreen_color(GtkColorButton* button, void* x)
rgb_to_hsv(cam->postproc.greenscreen_color[0], cam->postproc.greenscreen_color[1], cam->postproc.greenscreen_color[2], &cam->postproc.greenscreen_hsv[0], &cam->postproc.greenscreen_hsv[1], &cam->postproc.greenscreen_hsv[2]);
}
+void gui_set_greenscreen_color_cam(unsigned int x, unsigned int y, struct camera* cam)
+{
+ GdkPixbuf* pixbuf=gtk_image_get_pixbuf(GTK_IMAGE(cam->cam));
+ unsigned int rowstride=gdk_pixbuf_get_rowstride(pixbuf);
+ const guint8* pixels=gdk_pixbuf_read_pixels(pixbuf);
+ GdkRGBA color={
+ .red=(double)pixels[y*rowstride+x*3]/255,
+ .green=(double)pixels[y*rowstride+x*3+1]/255,
+ .blue=(double)pixels[y*rowstride+x*3+2]/255,
+ .alpha=1.0
+ };
+ GtkColorChooser* button=GTK_COLOR_CHOOSER(gtk_builder_get_object(gui, "greenscreen_colorpicker"));
+ gtk_color_chooser_set_rgba(button, &color);
+ gui_set_greenscreen_color(GTK_COLOR_BUTTON(button), 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(gui, "greenscreen_eyedropper")), 0);
+}
+
void gui_set_greenscreen_tolerance(GtkAdjustment* adjustment, void* x)
{
if(!menu_context_cam){return;}
diff --git a/utilities/gtk/gui.h b/utilities/gtk/gui.h
index e0071fb..939e90a 100644
--- a/utilities/gtk/gui.h
+++ b/utilities/gtk/gui.h
@@ -53,6 +53,7 @@ extern void camcolors_toggle_flip(GtkToggleButton* button, void* vertical);
extern void gui_hide_cam(GtkMenuItem* menuitem, void* x);
extern void gui_set_greenscreen_img(GtkButton* button, void* x);
extern void gui_set_greenscreen_color(GtkColorButton* button, void* x);
+extern void gui_set_greenscreen_color_cam(unsigned int x, unsigned int y, struct camera* cam);
extern void gui_set_greenscreen_tolerance(GtkAdjustment* adjustment, void* x);
extern void gui_insert_link(GtkTextBuffer* buffer, GtkTextIter* iter, const char* url, int length);
extern gboolean gui_click_link(GtkTextView* textview, GdkEventButton* event, void* data);