103
103
static void toggle_switch_draw_background (ToggleSwitch* self, cairo_t* cr);
104
104
static void toggle_switch_draw_text (ToggleSwitch* self);
105
105
static void toggle_switch_draw_slider (ToggleSwitch* self, cairo_t* cr);
106
static void toggle_switch_draw_flat_rounded_rectangle (ToggleSwitch* self, cairo_t* cr, double x, double y, double w, double h, GdkColor* stroke, GdkColor* fill);
107
static void toggle_switch_draw_rounded_rectangle (ToggleSwitch* self, cairo_t* cr, double x, double y, double w, double h, GdkColor* stroke, GdkColor* fill1, GdkColor* fill2);
106
static void toggle_switch_draw_flat_rounded_rectangle (ToggleSwitch* self, cairo_t* cr, gdouble x, gdouble y, gdouble w, gdouble h, GdkColor* stroke, GdkColor* fill);
107
static void toggle_switch_draw_rounded_rectangle (ToggleSwitch* self, cairo_t* cr, gdouble x, gdouble y, gdouble w, gdouble h, GdkColor* stroke, GdkColor* fill1, GdkColor* fill2);
108
108
static void toggle_switch_draw_vertical_lines (ToggleSwitch* self, cairo_t* cr, gint x, gint y, gint width, gint height);
109
static void toggle_switch_draw_centered_text (ToggleSwitch* self, const char* text, const char* gravity);
109
static void toggle_switch_draw_centered_text (ToggleSwitch* self, const gchar* text, const gchar* gravity);
110
110
#define PI 3.1415926535897931
111
111
#define PI_OVER_180 0.017453292519943295
112
112
gboolean toggle_switch_get_active (ToggleSwitch* self);
205
207
static void toggle_switch_calculate_size (ToggleSwitch* self, gint* width, gint* height) {
210
PangoLayout* _tmp0_ = NULL;
207
212
PangoRectangle extents = {0};
213
PangoRectangle _tmp2_ = {0};
209
215
gint text_height;
210
216
g_return_if_fail (self != NULL);
211
self->priv->layout = (_tmp0_ = gtk_widget_create_pango_layout ((GtkWidget*) self, NULL), _g_object_unref0 (self->priv->layout), _tmp0_);
217
_tmp0_ = gtk_widget_create_pango_layout ((GtkWidget*) self, NULL);
219
_g_object_unref0 (self->priv->layout);
220
self->priv->layout = _tmp1_;
212
221
pango_layout_set_text (self->priv->layout, self->priv->values[0], -1);
213
pango_layout_get_pixel_extents (self->priv->layout, NULL, &extents);
222
pango_layout_get_pixel_extents (self->priv->layout, NULL, &_tmp2_);
214
224
text_width = extents.width;
215
225
text_height = extents.height;
216
*width = (gint) ((text_width + ((text_width * self->priv->TEXT_XPAD) * 2)) * 2);
217
*height = (gint) (text_height + ((text_height * self->priv->TEXT_YPAD) * 2));
226
_width = (gint) ((text_width + ((text_width * self->priv->TEXT_XPAD) * 2)) * 2);
227
_height = (gint) (text_height + ((text_height * self->priv->TEXT_YPAD) * 2));
221
237
static void toggle_switch_draw_widget (ToggleSwitch* self) {
238
cairo_t* _tmp0_ = NULL;
223
240
g_return_if_fail (self != NULL);
224
cr = gdk_cairo_create ((GdkDrawable*) ((GtkWidget*) self)->window);
241
_tmp0_ = gdk_cairo_create ((GdkDrawable*) ((GtkWidget*) self)->window);
225
243
toggle_switch_draw_background (self, cr);
226
244
toggle_switch_draw_text (self);
227
245
toggle_switch_draw_slider (self, cr);
251
275
if ((((GtkWidget*) self)->state == GTK_STATE_PRELIGHT) | (((GtkWidget*) self)->state == GTK_STATE_ACTIVE)) {
252
276
state = (guchar) GTK_STATE_NORMAL;
254
bg_fill = gtk_widget_get_style ((GtkWidget*) self)->base[state];
255
bg_stroke = gtk_widget_get_style ((GtkWidget*) self)->dark[state];
256
left_fill = gtk_widget_get_style ((GtkWidget*) self)->light[GTK_STATE_SELECTED];
257
left_stroke = gtk_widget_get_style ((GtkWidget*) self)->mid[GTK_STATE_SELECTED];
258
right_fill = gtk_widget_get_style ((GtkWidget*) self)->base[state];
259
right_stroke = gtk_widget_get_style ((GtkWidget*) self)->dark[state];
260
toggle_switch_draw_flat_rounded_rectangle (self, cr, (double) x, (double) y, (double) width, (double) height, &bg_stroke, &bg_fill);
261
toggle_switch_draw_flat_rounded_rectangle (self, cr, (double) x, (double) y, (double) (width / 2), (double) height, &left_stroke, &left_fill);
262
toggle_switch_draw_flat_rounded_rectangle (self, cr, (double) (x + (width / 2)), (double) y, (double) (width / 2), (double) height, &right_stroke, &right_fill);
278
_tmp0_ = gtk_widget_get_style ((GtkWidget*) self);
279
bg_fill = _tmp0_->base[state];
280
_tmp1_ = gtk_widget_get_style ((GtkWidget*) self);
281
bg_stroke = _tmp1_->dark[state];
282
_tmp2_ = gtk_widget_get_style ((GtkWidget*) self);
283
left_fill = _tmp2_->light[GTK_STATE_SELECTED];
284
_tmp3_ = gtk_widget_get_style ((GtkWidget*) self);
285
left_stroke = _tmp3_->mid[GTK_STATE_SELECTED];
286
_tmp4_ = gtk_widget_get_style ((GtkWidget*) self);
287
right_fill = _tmp4_->base[state];
288
_tmp5_ = gtk_widget_get_style ((GtkWidget*) self);
289
right_stroke = _tmp5_->dark[state];
290
toggle_switch_draw_flat_rounded_rectangle (self, cr, (gdouble) x, (gdouble) y, (gdouble) width, (gdouble) height, &bg_stroke, &bg_fill);
291
toggle_switch_draw_flat_rounded_rectangle (self, cr, (gdouble) x, (gdouble) y, (gdouble) (width / 2), (gdouble) height, &left_stroke, &left_fill);
292
toggle_switch_draw_flat_rounded_rectangle (self, cr, (gdouble) (x + (width / 2)), (gdouble) y, (gdouble) (width / 2), (gdouble) height, &right_stroke, &right_fill);
282
313
if (self->active) {
283
314
x_offset = width / 2;
285
stroke = gtk_widget_get_style ((GtkWidget*) self)->dark[((GtkWidget*) self)->state];
316
_tmp0_ = gtk_widget_get_style ((GtkWidget*) self);
317
stroke = _tmp0_->dark[((GtkWidget*) self)->state];
286
318
if (((GtkWidget*) self)->state == GTK_STATE_INSENSITIVE) {
287
fill1_rectangle = gtk_widget_get_style ((GtkWidget*) self)->bg[((GtkWidget*) self)->state];
288
fill2_rectangle = gtk_widget_get_style ((GtkWidget*) self)->bg[((GtkWidget*) self)->state];
319
GtkStyle* _tmp1_ = NULL;
320
GtkStyle* _tmp2_ = NULL;
321
_tmp1_ = gtk_widget_get_style ((GtkWidget*) self);
322
fill1_rectangle = _tmp1_->bg[((GtkWidget*) self)->state];
323
_tmp2_ = gtk_widget_get_style ((GtkWidget*) self);
324
fill2_rectangle = _tmp2_->bg[((GtkWidget*) self)->state];
290
fill1_rectangle = gtk_widget_get_style ((GtkWidget*) self)->light[((GtkWidget*) self)->state];
291
fill2_rectangle = gtk_widget_get_style ((GtkWidget*) self)->mid[((GtkWidget*) self)->state];
326
GtkStyle* _tmp3_ = NULL;
327
GtkStyle* _tmp4_ = NULL;
328
_tmp3_ = gtk_widget_get_style ((GtkWidget*) self);
329
fill1_rectangle = _tmp3_->light[((GtkWidget*) self)->state];
330
_tmp4_ = gtk_widget_get_style ((GtkWidget*) self);
331
fill2_rectangle = _tmp4_->mid[((GtkWidget*) self)->state];
293
toggle_switch_draw_rounded_rectangle (self, cr, (double) (x + x_offset), (double) y, (double) (width / 2), (double) height, &stroke, &fill1_rectangle, &fill2_rectangle);
333
toggle_switch_draw_rounded_rectangle (self, cr, (gdouble) (x + x_offset), (gdouble) y, (gdouble) (width / 2), (gdouble) height, &stroke, &fill1_rectangle, &fill2_rectangle);
294
334
toggle_switch_draw_vertical_lines (self, cr, x + x_offset, y, width, height);
298
338
static void toggle_switch_draw_vertical_lines (ToggleSwitch* self, cairo_t* cr, gint x, gint y, gint width, gint height) {
339
GtkStyle* _tmp0_ = NULL;
299
340
GdkColor fill_line_dark;
341
GtkStyle* _tmp1_ = NULL;
300
342
GdkColor fill_line_light;
302
344
gint line_spacing;
306
348
g_return_if_fail (self != NULL);
307
349
g_return_if_fail (cr != NULL);
308
fill_line_dark = gtk_widget_get_style ((GtkWidget*) self)->dark[((GtkWidget*) self)->state];
309
fill_line_light = gtk_widget_get_style ((GtkWidget*) self)->light[((GtkWidget*) self)->state];
350
_tmp0_ = gtk_widget_get_style ((GtkWidget*) self);
351
fill_line_dark = _tmp0_->dark[((GtkWidget*) self)->state];
352
_tmp1_ = gtk_widget_get_style ((GtkWidget*) self);
353
fill_line_light = _tmp1_->light[((GtkWidget*) self)->state];
310
354
line_height = ((gint) height) * self->priv->LINE_HEIGHT_RATIO;
311
355
line_spacing = (gint) (self->priv->LINE_SPACING_RATIO * (width / 2));
312
356
x_offset = (((width / 2) - (6 + (line_spacing * 2))) / 2) + 2;
313
357
y_offset = (height - line_height) / 2;
314
c_spacing = (double) 0;
358
c_spacing = (gdouble) 0;
329
cairo_rectangle (cr, ((x + x_offset) + c_spacing) + 1, y + y_offset, (double) 1, line_height);
330
cairo_set_source_rgb (cr, ((double) fill_line_dark.red) / 65535.0, ((double) fill_line_dark.green) / 65535.0, ((double) fill_line_dark.blue) / 65535.0);
332
cairo_rectangle (cr, (x + x_offset) + c_spacing, y + y_offset, (double) 1, line_height);
333
cairo_set_source_rgb (cr, ((double) fill_line_light.red) / 65535.0, ((double) fill_line_light.green) / 65535.0, ((double) fill_line_light.blue) / 65535.0);
335
c_spacing = c_spacing + ((double) line_spacing);
373
cairo_rectangle (cr, ((x + x_offset) + c_spacing) + 1, y + y_offset, (gdouble) 1, line_height);
374
cairo_set_source_rgb (cr, ((gdouble) fill_line_dark.red) / 65535.0, ((gdouble) fill_line_dark.green) / 65535.0, ((gdouble) fill_line_dark.blue) / 65535.0);
376
cairo_rectangle (cr, (x + x_offset) + c_spacing, y + y_offset, (gdouble) 1, line_height);
377
cairo_set_source_rgb (cr, ((gdouble) fill_line_light.red) / 65535.0, ((gdouble) fill_line_light.green) / 65535.0, ((gdouble) fill_line_light.blue) / 65535.0);
379
c_spacing = c_spacing + ((gdouble) line_spacing);
354
398
gint x_offset = 0;
355
399
gint y_offset = 0;
356
400
PangoRectangle extents = {0};
401
PangoRectangle _tmp2_ = {0};
358
403
gint text_height;
360
GdkRectangle _tmp2_ = {0};
404
GtkStyle* _tmp3_ = NULL;
407
GdkRectangle _tmp6_ = {0};
362
409
g_return_if_fail (self != NULL);
363
410
g_return_if_fail (text != NULL);
364
411
g_return_if_fail (gravity != NULL);
365
412
if (self->priv->layout == NULL) {
367
self->priv->layout = (_tmp0_ = gtk_widget_create_pango_layout ((GtkWidget*) self, NULL), _g_object_unref0 (self->priv->layout), _tmp0_);
413
PangoLayout* _tmp0_ = NULL;
415
_tmp0_ = gtk_widget_create_pango_layout ((GtkWidget*) self, NULL);
417
_g_object_unref0 (self->priv->layout);
418
self->priv->layout = _tmp1_;
369
420
x = ((GtkWidget*) self)->allocation.x;
370
421
y = ((GtkWidget*) self)->allocation.y;
371
422
width = ((GtkWidget*) self)->allocation.width;
372
423
height = ((GtkWidget*) self)->allocation.height;
373
424
pango_layout_set_text (self->priv->layout, text, -1);
374
pango_layout_get_pixel_extents (self->priv->layout, NULL, &extents);
425
pango_layout_get_pixel_extents (self->priv->layout, NULL, &_tmp2_);
375
427
text_width = extents.width;
376
428
text_height = extents.height;
377
429
x_offset = ((width / 2) - text_width) / 2;
378
if (_vala_strcmp0 (gravity, "right") == 0) {
430
if (g_strcmp0 (gravity, "right") == 0) {
379
431
x_offset = x_offset + (width / 2);
381
433
y_offset = (height - text_height) / 2;
382
GTK_STYLE_GET_CLASS (_tmp1_ = gtk_widget_get_style ((GtkWidget*) self))->draw_layout (_tmp1_, ((GtkWidget*) self)->window, gtk_widget_get_state ((GtkWidget*) self), TRUE, (_tmp3_ = (_tmp2_.x = x, _tmp2_.y = y, _tmp2_.width = width, _tmp2_.height = height, _tmp2_), &_tmp3_), (GtkWidget*) self, "", x + x_offset, y + y_offset, self->priv->layout);
434
_tmp3_ = gtk_widget_get_style ((GtkWidget*) self);
435
_tmp5_ = gtk_widget_get_state ((GtkWidget*) self);
436
GTK_STYLE_GET_CLASS (_tmp4_ = _tmp3_)->draw_layout (_tmp4_, ((GtkWidget*) self)->window, _tmp5_, TRUE, (_tmp7_ = (_tmp6_.x = x, _tmp6_.y = y, _tmp6_.width = width, _tmp6_.height = height, _tmp6_), &_tmp7_), (GtkWidget*) self, "", x + x_offset, y + y_offset, self->priv->layout);
386
static void toggle_switch_draw_rounded_rectangle (ToggleSwitch* self, cairo_t* cr, double x, double y, double w, double h, GdkColor* stroke, GdkColor* fill1, GdkColor* fill2) {
440
static void toggle_switch_draw_rounded_rectangle (ToggleSwitch* self, cairo_t* cr, gdouble x, gdouble y, gdouble w, gdouble h, GdkColor* stroke, GdkColor* fill1, GdkColor* fill2) {
442
cairo_pattern_t* _tmp0_ = NULL;
388
443
cairo_pattern_t* linear;
389
444
g_return_if_fail (self != NULL);
390
445
g_return_if_fail (cr != NULL);
391
446
r = self->priv->CORNER_RADIUS;
392
447
cairo_new_sub_path (cr);
393
448
cairo_arc (cr, r + x, r + y, r, PI, 270 * PI_OVER_180);
394
cairo_arc (cr, (x + w) - r, r + y, r, 270 * PI_OVER_180, (double) 0);
395
cairo_arc (cr, (x + w) - r, (y + h) - r, r, (double) 0, 90 * PI_OVER_180);
449
cairo_arc (cr, (x + w) - r, r + y, r, 270 * PI_OVER_180, (gdouble) 0);
450
cairo_arc (cr, (x + w) - r, (y + h) - r, r, (gdouble) 0, 90 * PI_OVER_180);
396
451
cairo_arc (cr, r + x, (y + h) - r, r, 90 * PI_OVER_180, PI);
397
452
cairo_close_path (cr);
398
cairo_set_source_rgb (cr, ((double) (*stroke).red) / 65535.0, ((double) (*stroke).green) / 65535.0, ((double) (*stroke).blue) / 65535.0);
453
cairo_set_source_rgb (cr, ((gdouble) (*stroke).red) / 65535.0, ((gdouble) (*stroke).green) / 65535.0, ((gdouble) (*stroke).blue) / 65535.0);
399
454
cairo_stroke_preserve (cr);
400
linear = cairo_pattern_create_linear (x, y, x, y + h);
401
cairo_pattern_add_color_stop_rgba (linear, 0.00, ((double) (*fill1).red) / 65535.0, ((double) (*fill1).green) / 65535.0, ((double) (*fill1).blue) / 65535.0, (double) 1);
402
cairo_pattern_add_color_stop_rgba (linear, 0.8, ((double) (*fill2).red) / 65535.0, ((double) (*fill2).green) / 65535.0, ((double) (*fill2).blue) / 65535.0, (double) 1);
455
_tmp0_ = cairo_pattern_create_linear (x, y, x, y + h);
457
cairo_pattern_add_color_stop_rgba (linear, 0.00, ((gdouble) (*fill1).red) / 65535.0, ((gdouble) (*fill1).green) / 65535.0, ((gdouble) (*fill1).blue) / 65535.0, (gdouble) 1);
458
cairo_pattern_add_color_stop_rgba (linear, 0.8, ((gdouble) (*fill2).red) / 65535.0, ((gdouble) (*fill2).green) / 65535.0, ((gdouble) (*fill2).blue) / 65535.0, (gdouble) 1);
403
459
cairo_set_source (cr, linear);
405
461
_cairo_pattern_destroy0 (linear);
409
static void toggle_switch_draw_flat_rounded_rectangle (ToggleSwitch* self, cairo_t* cr, double x, double y, double w, double h, GdkColor* stroke, GdkColor* fill) {
465
static void toggle_switch_draw_flat_rounded_rectangle (ToggleSwitch* self, cairo_t* cr, gdouble x, gdouble y, gdouble w, gdouble h, GdkColor* stroke, GdkColor* fill) {
411
467
g_return_if_fail (self != NULL);
412
468
g_return_if_fail (cr != NULL);
413
469
r = self->priv->CORNER_RADIUS;
414
470
cairo_new_sub_path (cr);
415
471
cairo_arc (cr, r + x, r + y, r, PI, 270 * PI_OVER_180);
416
cairo_arc (cr, (x + w) - r, r + y, r, 270 * PI_OVER_180, (double) 0);
417
cairo_arc (cr, (x + w) - r, (y + h) - r, r, (double) 0, 90 * PI_OVER_180);
472
cairo_arc (cr, (x + w) - r, r + y, r, 270 * PI_OVER_180, (gdouble) 0);
473
cairo_arc (cr, (x + w) - r, (y + h) - r, r, (gdouble) 0, 90 * PI_OVER_180);
418
474
cairo_arc (cr, r + x, (y + h) - r, r, 90 * PI_OVER_180, PI);
419
475
cairo_close_path (cr);
420
cairo_set_source_rgb (cr, ((double) (*stroke).red) / 65535.0, ((double) (*stroke).green) / 65535.0, ((double) (*stroke).blue) / 65535.0);
476
cairo_set_source_rgb (cr, ((gdouble) (*stroke).red) / 65535.0, ((gdouble) (*stroke).green) / 65535.0, ((gdouble) (*stroke).blue) / 65535.0);
421
477
cairo_stroke_preserve (cr);
422
cairo_set_source_rgb (cr, ((double) (*fill).red) / 65535.0, ((double) (*fill).green) / 65535.0, ((double) (*fill).blue) / 65535.0);
478
cairo_set_source_rgb (cr, ((gdouble) (*fill).red) / 65535.0, ((gdouble) (*fill).green) / 65535.0, ((gdouble) (*fill).blue) / 65535.0);