~noskcaj/ubuntu/vivid/xfce4-whiskermenu-plugin/1.5.0

« back to all changes in this revision

Viewing changes to panel-plugin/resizer-widget.cpp

  • Committer: Jackson Doak
  • Date: 2015-02-18 19:32:33 UTC
  • mfrom: (1.3.3)
  • Revision ID: noskcaj@ubuntu.com-20150218193233-e0yz6rm35agg7wx5
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
#include "resizer-widget.h"
19
19
 
 
20
#include "settings.h"
20
21
#include "slot.h"
21
22
 
22
23
using namespace WhiskerMenu;
26
27
ResizerWidget::ResizerWidget(GtkWindow* window) :
27
28
        m_window(window),
28
29
        m_cursor(NULL),
29
 
        m_shape(3)
 
30
        m_shape(3),
 
31
        m_supports_alpha(false)
30
32
{
31
33
        m_alignment = GTK_ALIGNMENT(gtk_alignment_new(1,0,0,0));
32
34
 
39
41
        g_signal_connect_slot(m_drawing, "enter-notify-event", &ResizerWidget::on_enter_notify_event, this);
40
42
        g_signal_connect_slot(m_drawing, "leave-notify-event", &ResizerWidget::on_leave_notify_event, this);
41
43
        g_signal_connect_slot(m_drawing, "expose-event", &ResizerWidget::on_expose_event, this);
 
44
        g_signal_connect_slot(m_window, "screen-changed", &ResizerWidget::on_screen_changed_event, this);
 
45
        on_screen_changed_event(GTK_WIDGET(m_drawing), NULL);
 
46
 
42
47
 
43
48
        set_corner(TopRight);
44
49
}
135
140
 
136
141
//-----------------------------------------------------------------------------
137
142
 
 
143
void ResizerWidget::on_screen_changed_event(GtkWidget* widget, GdkScreen*)
 
144
{
 
145
        GdkScreen* screen = gtk_widget_get_screen(widget);
 
146
        GdkColormap* colormap = gdk_screen_get_rgba_colormap(screen);
 
147
        if (!colormap)
 
148
        {
 
149
                colormap = gdk_screen_get_system_colormap(screen);
 
150
                m_supports_alpha = false;
 
151
        }
 
152
        else
 
153
        {
 
154
                m_supports_alpha = true;
 
155
        }
 
156
        gtk_widget_set_colormap(widget, colormap);
 
157
}
 
158
 
 
159
//-----------------------------------------------------------------------------
 
160
 
138
161
gboolean ResizerWidget::on_expose_event(GtkWidget* widget, GdkEvent*)
139
162
{
140
163
        cairo_t* cr = gdk_cairo_create(gtk_widget_get_window(widget));
141
164
 
142
165
        GtkStyle* style = gtk_widget_get_style(widget);
 
166
 
 
167
        // Draw semi-transparent background to match window
 
168
        if (m_supports_alpha)
 
169
        {
 
170
                const GdkColor& color = style->bg[GTK_STATE_NORMAL];
 
171
                cairo_set_source_rgba(cr, color.red / 65535.0, color.green / 65535.0, color.blue / 65535.0, wm_settings->menu_opacity / 100.0);
 
172
                cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
 
173
                cairo_paint(cr);
 
174
        }
 
175
 
 
176
        // Draw resize triangle
143
177
        const GdkColor& color = style->text_aa[gtk_widget_get_state(widget)];
144
178
        cairo_set_source_rgb(cr, color.red / 65535.0, color.green / 65535.0, color.blue / 65535.0);
145
179