[Xfce4-commits] <xfwm4:ochosi/tabwin> Add some fancy cairo-drawing if the compositor is in use FIXME: add theming possibilities for roundness, colors, border-width and alpha
Simon Steinbeiss
noreply at xfce.org
Thu Jul 11 10:54:01 CEST 2013
Updating branch refs/heads/ochosi/tabwin
to 0e363f4329d4bce56788b94274239562d255a459 (commit)
from 71fc0de4b3f4da1e6de43a89fdd7d9761e358d4d (commit)
commit 0e363f4329d4bce56788b94274239562d255a459
Author: Simon Steinbeiss <simon.steinbeiss at elfenbeinturm.at>
Date: Thu Jul 11 10:53:33 2013 +0200
Add some fancy cairo-drawing if the compositor is in use
FIXME: add theming possibilities for roundness, colors, border-width and alpha
src/tabwin.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/src/tabwin.c b/src/tabwin.c
index 3111fb0..ad949df 100644
--- a/src/tabwin.c
+++ b/src/tabwin.c
@@ -96,6 +96,44 @@ get_color (GtkWidget *win, GtkStateType state_type)
}
static gboolean
+tabwin_expose (GtkWidget *tbw, GdkEventExpose *event, gpointer data)
+{
+ GtkWindow *window;
+ GdkScreen *screen;
+ cairo_t *cr;
+ gint radius = 10.0;
+ double degrees = 3.14 / 180.0;
+ double width = tbw->allocation.width;
+ double height = tbw->allocation.height;
+
+ window = GTK_WINDOW(tbw);
+ screen = gtk_window_get_screen(window);
+
+ cr = gdk_cairo_create (tbw->window);
+ cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR);
+ gdk_cairo_region(cr, event->region);
+ cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 0.0);
+ cairo_fill_preserve(cr);
+ cairo_clip(cr);
+ cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
+
+ //Draw a filled rounded rectangle with an outline
+ cairo_set_line_width (cr, 1.0);
+ cairo_arc (cr, width - radius - 0.5, radius + 0.5, radius, -90 * degrees, 0 * degrees);
+ cairo_arc (cr, width - radius - 0.5, height - radius - 0.5, radius, 0 * degrees, 90 * degrees);
+ cairo_arc (cr, radius + 0.5, height - radius - 0.5, radius, 90 * degrees, 180 * degrees);
+ cairo_arc (cr, radius + 0.5, radius + 0.5, radius, 180 * degrees, 270 * degrees);
+ cairo_close_path(cr);
+ cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.8);
+ cairo_fill_preserve (cr);
+ cairo_set_source_rgba (cr, 0.95, 0.95, 0.95, 0.3);
+ cairo_stroke (cr);
+
+ cairo_destroy (cr);
+ return FALSE;
+}
+
+static gboolean
paint_selected (GtkWidget *w, GdkEventExpose *event, gpointer data)
{
g_return_val_if_fail (GTK_IS_WIDGET(w), FALSE);
@@ -351,6 +389,7 @@ static TabwinWidget *
tabwinCreateWidget (Tabwin *tabwin, ScreenInfo *screen_info, gint monitor_num)
{
TabwinWidget *tbw;
+ GdkScreen *screen;
GtkWidget *vbox;
GtkWidget *windowlist;
GdkRectangle monitor;
@@ -370,8 +409,19 @@ tabwinCreateWidget (Tabwin *tabwin, ScreenInfo *screen_info, gint monitor_num)
gtk_widget_style_get (GTK_WIDGET (tbw), "border-width", &border_width, NULL);
gtk_window_set_screen (GTK_WINDOW (tbw), screen_info->gscr);
gtk_widget_set_name (GTK_WIDGET (tbw), "xfwm4-tabwin");
+
+ /* Only do the rounded corners and transparency if a compositor is in use */
+ screen = gtk_widget_get_screen(GTK_WIDGET(tbw));
+ if(gdk_screen_is_composited(screen)) {
+ g_signal_connect (tbw, "expose-event", GTK_SIGNAL_FUNC (tabwin_expose), (gpointer) tbw);
+ GdkColormap *cmap = gdk_screen_get_rgba_colormap(screen);
+ if(cmap)
+ gtk_widget_set_colormap(GTK_WIDGET(tbw), cmap);
+ }
+
gtk_widget_realize (GTK_WIDGET (tbw));
gtk_container_set_border_width (GTK_CONTAINER (tbw), 6);
+ gtk_widget_set_app_paintable(GTK_WIDGET(tbw), TRUE);
gtk_window_set_position (GTK_WINDOW (tbw), GTK_WIN_POS_NONE);
gdk_screen_get_monitor_geometry (screen_info->gscr, tbw->monitor_num, &monitor);
gtk_window_move (GTK_WINDOW(tbw), monitor.x + monitor.width / 2,
More information about the Xfce4-commits
mailing list