[Xfce4-commits] [xfce/xfce4-settings] 01/09: Add a simple find-cursor helper

noreply at xfce.org noreply at xfce.org
Sun Mar 11 13:37:23 CET 2018


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/xfce4-settings.

commit c01a3991f87f600b414502db048b5fbf9b587b84
Author: Simon Steinbeiss <simon.steinbeiss at elfenbeinturm.at>
Date:   Tue Feb 20 00:24:30 2018 +0100

    Add a simple find-cursor helper
---
 dialogs/accessibility-settings/Makefile.am   |  23 ++++-
 dialogs/accessibility-settings/find-cursor.c | 149 +++++++++++++++++++++++++++
 2 files changed, 171 insertions(+), 1 deletion(-)

diff --git a/dialogs/accessibility-settings/Makefile.am b/dialogs/accessibility-settings/Makefile.am
index a523573..78904e6 100644
--- a/dialogs/accessibility-settings/Makefile.am
+++ b/dialogs/accessibility-settings/Makefile.am
@@ -7,7 +7,28 @@ AM_CPPFLAGS = \
 	$(PLATFORM_CPPFLAGS)
 
 bin_PROGRAMS = \
-	xfce4-accessibility-settings
+	xfce4-accessibility-settings \
+	find-cursor
+
+find_cursor_SOURCES = \
+  find-cursor.c
+
+find_cursor_CFLAGS = \
+	$(GTK_CFLAGS) \
+	$(PLATFORM_CFLAGS) \
+    -DGTK_DISABLE_SINGLE_INCLUDES \
+    -DGDK_DISABLE_DEPRECATED \
+    -DGTK_DISABLE_DEPRECATED \
+    -DGSEAL_ENABLE \
+    -DGDK_PIXBUF_DISABLE_DEPRECATED \
+    -DG_DISABLE_DEPRECATED
+
+find_cursor_LDFLAGS = \
+	-no-undefined \
+	$(PLATFORM_LDFLAGS)
+
+find_cursor_LDADD = \
+	$(GTK_LIBS)
 
 xfce4_accessibility_settings_SOURCES = \
 	main.c \
diff --git a/dialogs/accessibility-settings/find-cursor.c b/dialogs/accessibility-settings/find-cursor.c
new file mode 100644
index 0000000..52d58cb
--- /dev/null
+++ b/dialogs/accessibility-settings/find-cursor.c
@@ -0,0 +1,149 @@
+/*
+ *  Copyright (c) 2018 Simon Steinbeiß <simon at xfce.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gtk/gtkx.h>
+
+#include <gdk/gdkx.h>
+#include <math.h>
+
+
+gboolean timeout (gpointer data)
+{
+    GtkWidget *widget = GTK_WIDGET (data);
+    gtk_widget_queue_draw (widget);
+    return TRUE;
+}
+
+
+static void
+screen_changed (GtkWidget *widget, GdkScreen *old_screen, gpointer userdata) {
+    gboolean supports_alpha;
+    GdkScreen *screen = gtk_widget_get_screen(widget);
+    GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
+
+    /* this is a purely informatonal check at the moment. could later be user_data
+     * to call some fallback in non-composited envs */
+    if (!visual) {
+        g_warning ("Your screen does not support alpha channels!");
+        visual = gdk_screen_get_system_visual(screen);
+        supports_alpha = FALSE;
+    } else {
+        g_warning ("Your screen supports alpha channels!");
+        supports_alpha = TRUE;
+    }
+
+    gtk_widget_set_visual (widget, visual);
+}
+
+double px = 10;
+double vx = 3;
+
+static gboolean
+find_cursor_window_draw  (GtkWidget      *window,
+                          cairo_t *cr,
+                          gpointer     user_data) {
+    int width, height;
+    int i = 1;
+    int arcs = 1;
+
+    gtk_window_get_size (GTK_WINDOW (window), &width, &height);
+
+    cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+    cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0);
+    cairo_paint (cr);
+
+    cairo_set_line_width (cr, 3.0);
+    cairo_translate (cr, width / 2, height / 2);
+    if (px > 30.0)
+        arcs = 2;
+    if (px > 60.0)
+        arcs = 3;
+    if (px > 90.0)
+        arcs = 4;
+
+    for (i = 1; i <= arcs; i++) {
+      cairo_arc (cr, 0, 0, px - ((i - 1) * 30.0), 0, 2 * M_PI);
+    }
+    cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 0.5);
+    cairo_fill_preserve (cr);
+    cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 1.0);
+    cairo_stroke (cr);
+
+    /* stop before the circles get bigger than the window */
+    if (px <= 3 || px >= 200-3)
+        gtk_main_quit();
+    px += vx;
+
+    return FALSE;
+}
+
+
+gint
+main (gint argc, gchar **argv)
+{
+    gtk_init (&argc, &argv);
+
+    GtkWidget     *window;
+    GdkDisplay    *display = gdk_display_get_default ();
+    GdkSeat       *seat = gdk_display_get_default_seat (display);
+    GdkDevice     *device = gdk_seat_get_pointer (seat);
+    GdkScreen     *screen = gdk_screen_get_default ();
+    gint           x,y;
+
+    // just get the position of the mouse cursor
+    gdk_device_get_position (device, &screen, &x, &y);
+
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_container_set_border_width (GTK_CONTAINER (window), 0);
+    gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
+    gtk_window_set_default_size (GTK_WINDOW (window), 500, 500);
+    gtk_widget_set_size_request (window, 500, 500);
+    gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
+    gtk_widget_set_app_paintable (window, TRUE);
+    gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), FALSE);
+
+    /* this results in the same as getting the mouse cursor and setting the positions
+       of the window with gtk_window_move */
+    //gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
+    gtk_window_set_gravity (GTK_WINDOW (window), GDK_GRAVITY_NORTH_WEST);
+    gtk_window_move (GTK_WINDOW (window), x - 250, y - 250);
+
+    g_signal_connect (G_OBJECT (window), "draw",
+                      G_CALLBACK (find_cursor_window_draw), NULL);
+    g_signal_connect (G_OBJECT(window), "screen-changed", G_CALLBACK (screen_changed), NULL);
+    g_signal_connect (G_OBJECT(window), "destroy",
+                      G_CALLBACK(gtk_main_quit), NULL);
+    screen_changed (window, NULL, NULL);
+    gtk_widget_show_all (window);
+
+    g_timeout_add (10, timeout, window);
+
+    gtk_main ();
+
+    return 0;
+}

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list