File indexing completed on 2024-05-12 17:10:55
0001 /* 0002 * zootreeves theme engine 0003 * 0004 * zootreeves.c 0005 * 0006 * Copyright (C) 2006 Quinn Storm <livinglatexkali@gmail.com> (original legacy theme engine) 0007 * Copyright (C) 2006 Ben Reeves <john@reeves160.freeserve.co.uk> 0008 * 0009 * This program is free software; you can redistribute it and/or 0010 * modify it under the terms of the GNU General Public License 0011 * as published by the Free Software Foundation; either version 2 0012 * of the License, or (at your option) any later version. 0013 * 0014 * This program is distributed in the hope that it will be useful, 0015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0017 * GNU General Public License for more details. 0018 * 0019 * You should have received a copy of the GNU General Public License 0020 * along with this program; if not, write to the Free Software 0021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 0022 * 0023 */ 0024 0025 //zootreeves engine 0026 0027 #include <emerald.h> 0028 #include <engine.h> 0029 #include "zootreeves_engine.h" 0030 0031 #define SECT "zootreeves_settings" 0032 0033 #define DIP_ROUND_TRI (1 << 4) 0034 0035 0036 typedef struct _pixmaps { 0037 cairo_surface_t *titlebar_surface; 0038 cairo_surface_t *titlebar_surface_large; 0039 cairo_surface_t *titlebar_surface_buttons; 0040 gboolean buttonpart_enabled; 0041 gboolean buttonpart_repeat_enabled; 0042 gboolean titlebarpart_repeat_enabled; 0043 gboolean titlebarpart_enabled; 0044 gboolean titlebar_enabled; 0045 gboolean titlebar_repeat_enabled; 0046 0047 } pixmaps; 0048 0049 typedef struct _private_fs 0050 { 0051 alpha_color inner; 0052 alpha_color outer; 0053 alpha_color title_inner; 0054 alpha_color title_outer; 0055 alpha_color window_halo; 0056 alpha_color window_frame_halo; 0057 alpha_color window_highlight; 0058 gboolean gradient_repeat_enabled; 0059 gboolean gradient_repeat_direction_vertical; 0060 gboolean gradient_repeat_direction_diagonal; 0061 alpha_color window_shadow; 0062 alpha_color separator_line; 0063 alpha_color contents_highlight; 0064 alpha_color contents_shadow; 0065 alpha_color contents_halo; 0066 double gradient_repeat_height; 0067 } private_fs; 0068 0069 typedef struct _private_ws 0070 { 0071 gboolean done_indent; 0072 gboolean round_top_left; 0073 gboolean enable_maximised_colors; 0074 gboolean round_top_right; 0075 gboolean round_bottom_left; 0076 gboolean round_bottom_right; 0077 gboolean show_border_minimised; 0078 gboolean round_tri; 0079 gboolean show_border_maximised; 0080 gboolean enable_bar_dip_button_part; 0081 gboolean enable_title_bar_dip; 0082 gboolean enable_left_bar_dip; 0083 gboolean enable_left_bar_dip_lower_part; 0084 gboolean gradient_repeat_disabled_maximised; 0085 int left_bar_dip_offset; 0086 double outer_maximised_alpha; 0087 decor_color_t outer_maximised_color; 0088 double inner_maximised_alpha; 0089 decor_color_t inner_maximised_color; 0090 double titlebar_radius; 0091 double frame_radius; 0092 double window_gap; 0093 int minimised_border; 0094 int title_bar_dip_title_width; 0095 int title_bar_dip_radius; 0096 int title_bar_dip_button_width; 0097 int left_bar_dip_radius; 0098 pixmaps pixmaps; 0099 0100 } private_ws; 0101 0102 void get_meta_info (EngineMetaInfo * emi) 0103 { 0104 emi->version = g_strdup("0.1"); 0105 emi->description = g_strdup(_("Evolved from the legacy engine")); 0106 emi->last_compat = g_strdup("0.0"); // old themes marked still compatible for testing-NeOS 0107 emi->icon = gdk_pixbuf_new_from_inline(-1,my_pixbuf,TRUE,NULL); 0108 } 0109 0110 void 0111 rounded_rectangle_independent (cairo_t *cr, 0112 double x, 0113 double y, 0114 double w, 0115 double h, 0116 double title_bar_height, 0117 int corner, 0118 window_settings * ws, 0119 double left_top_radius, 0120 double right_top_radius, 0121 double left_bottom_radius, 0122 double right_bottom_radius, 0123 double radius_tri, 0124 int pane_1_width, 0125 int dip_gap, 0126 gboolean enable_dip, 0127 gboolean enable_button_part, 0128 gboolean left_bar_dip, 0129 int bottom_border_width, 0130 int left_bar_dip_radius, 0131 gboolean enable_left_bar_dip_lower_part, 0132 double left_bar_dip_offset 0133 ) 0134 { 0135 0136 int left_top_radius_on = 1; 0137 int right_top_radius_on = 1; 0138 int left_bottom_radius_on = 1; 0139 int right_bottom_radius_on = 1; 0140 int radius_tri_on = 0; 0141 0142 0143 if (left_top_radius==0) 0144 left_top_radius_on=0; 0145 0146 if (right_top_radius==0) 0147 right_top_radius_on=0; 0148 0149 if (left_bottom_radius==0) 0150 left_bottom_radius_on=0; 0151 0152 if (right_bottom_radius==0) 0153 right_bottom_radius_on=0; 0154 0155 if (radius_tri!=0) { 0156 radius_tri_on=1; 0157 } 0158 0159 0160 int curve, radius2; 0161 double cx, cy; 0162 0163 if (left_top_radius_on == 1) { 0164 if ((corner & CORNER_TOPLEFT)) 0165 cairo_move_to (cr, x + left_top_radius, y); 0166 else 0167 cairo_move_to (cr, x, y); 0168 } 0169 0170 0171 0172 0173 0174 0175 if (radius_tri_on == 1 && (corner & DIP_ROUND_TRI)) { 0176 0177 if (radius_tri > title_bar_height) { 0178 radius_tri = title_bar_height; 0179 } 0180 0181 curve = 2; 0182 0183 radius2 = title_bar_height - radius_tri; 0184 0185 cairo_arc (cr, x + pane_1_width, y + radius_tri, radius_tri, M_PI * 1.5, M_PI * curve); 0186 cairo_get_current_point (cr, &cx, &cy); 0187 cairo_arc_negative (cr, x +pane_1_width + (title_bar_height), cy, radius2, M_PI* (curve - 1), M_PI * 2.5); 0188 0189 0190 radius2 = title_bar_height - radius_tri; 0191 0192 if (enable_button_part == TRUE) { 0193 //Can use h to offset x because it is a square - would be radius - radius2 0194 cairo_arc_negative (cr, x + pane_1_width + dip_gap - radius_tri - radius2, y + radius_tri, radius2, M_PI * 2.5, M_PI * 2.0); 0195 cairo_get_current_point (cr, &cx, &cy); 0196 cairo_arc (cr, cx + radius_tri, cy, radius_tri, M_PI * 1.0, M_PI * 1.5); 0197 } else { 0198 cairo_get_current_point (cr, &cx, &cy); 0199 cairo_line_to (cr, x + w, cy); 0200 } 0201 0202 } 0203 0204 0205 if (enable_dip == TRUE && !(corner & DIP_ROUND_TRI)) { 0206 0207 curve = 2; 0208 0209 radius2 = title_bar_height - radius_tri; 0210 0211 cairo_arc (cr, x + pane_1_width - radius_tri, y + radius_tri, radius_tri, M_PI * 1.5, M_PI * curve); 0212 cairo_get_current_point (cr, &cx, &cy); 0213 cairo_line_to (cr, cx, cy + radius2); 0214 cairo_line_to (cr, cx + dip_gap, cy + radius2); 0215 //cairo_arc_negative (cr, x +pane_1_width + (title_bar_height), cy, radius2, M_PI* (curve - 1), M_PI * 2.5); 0216 0217 0218 if (enable_button_part == TRUE) { 0219 cairo_get_current_point (cr, &cx, &cy); 0220 cairo_line_to (cr, cx, cy - radius2); 0221 cairo_get_current_point (cr, &cx, &cy); 0222 cairo_arc (cr, cx + radius_tri, cy, radius_tri, M_PI, M_PI * 1.5); 0223 //cairo_arc (cr, cx + radius_tri, cy, radius_tri, M_PI * 1.0, M_PI * 1.5); 0224 } else { 0225 cairo_get_current_point (cr, &cx, &cy); 0226 cairo_line_to (cr, x + w, cy); 0227 } 0228 0229 } 0230 0231 0232 if (enable_button_part == TRUE) { 0233 if (right_top_radius_on == 1) { 0234 if ((corner & CORNER_TOPRIGHT)) { 0235 cairo_arc (cr, x + w - right_top_radius, y + right_top_radius, right_top_radius, 0236 M_PI * 1.5, M_PI * 2.0); 0237 } else 0238 cairo_line_to (cr, x + w, y); 0239 } 0240 } 0241 0242 if (right_bottom_radius_on == 1) { 0243 if ((corner & CORNER_BOTTOMRIGHT)) 0244 cairo_arc (cr, x + w - right_bottom_radius, y + h - right_bottom_radius, right_bottom_radius, 0245 0.0, M_PI * 0.5); 0246 else 0247 cairo_line_to (cr, x + w, y + h); 0248 } 0249 0250 if (left_bottom_radius_on == 1 && (corner & CORNER_BOTTOMLEFT)) 0251 cairo_arc (cr, x + left_bottom_radius, y + h - left_bottom_radius, left_bottom_radius, 0252 M_PI * 0.5, M_PI); 0253 else 0254 0255 if (enable_left_bar_dip_lower_part == FALSE && left_bar_dip == TRUE) { 0256 cairo_line_to (cr, x + (2 * left_bar_dip_radius), y + h); 0257 } else { 0258 cairo_line_to (cr, x, y + h); 0259 } 0260 0261 if (left_bar_dip == FALSE) { 0262 if (left_top_radius_on == 1) { 0263 if ((corner & CORNER_TOPLEFT)) { 0264 cairo_arc (cr, x + left_top_radius, y + left_top_radius, left_top_radius, M_PI, M_PI * 1.5); 0265 } else 0266 cairo_line_to (cr, x, y); 0267 } 0268 } 0269 0270 0271 if (left_bar_dip == TRUE) { 0272 left_bar_dip_offset = (((h - bottom_border_width - title_bar_height + 1) /100) * (100 - left_bar_dip_offset)); 0273 0274 cairo_get_current_point (cr, &cx, &cy); 0275 cairo_line_to (cr, cx, cy - bottom_border_width + 2); 0276 cairo_get_current_point (cr, &cx, &cy); 0277 0278 if (enable_left_bar_dip_lower_part == TRUE) { 0279 cairo_arc (cr, cx + left_bar_dip_radius, cy, left_bar_dip_radius, M_PI * 1.0, M_PI * 1.5); 0280 0281 cairo_get_current_point (cr, &cx, &cy); 0282 cairo_arc_negative (cr, cx, cy - left_bar_dip_radius, left_bar_dip_radius, M_PI * 0.5, M_PI * 2.0); 0283 } else { 0284 cairo_line_to (cr, cx, cy - (2 * left_bar_dip_radius)); 0285 } 0286 0287 cairo_get_current_point (cr, &cx, &cy); 0288 cairo_line_to (cr, cx, cy - 1- left_bar_dip_offset + (4* left_bar_dip_radius)); 0289 0290 cairo_get_current_point (cr, &cx, &cy); 0291 cairo_arc_negative (cr, cx - left_bar_dip_radius, cy, left_bar_dip_radius, M_PI * 0, M_PI * 3.5); 0292 0293 cairo_get_current_point (cr, &cx, &cy); 0294 cairo_arc (cr, cx, cy - left_bar_dip_radius, left_bar_dip_radius, M_PI * 2.5, M_PI * 3.0); 0295 0296 0297 if (left_top_radius_on == 1) { 0298 if ((corner & CORNER_TOPLEFT)) { 0299 cairo_arc (cr, x + left_top_radius, y + left_top_radius, left_top_radius, M_PI, M_PI * 1.5); 0300 } else 0301 cairo_line_to (cr, x, y); 0302 } 0303 0304 0305 } 0306 } 0307 0308 0309 void 0310 rounded_square (cairo_t *cr, 0311 double x, 0312 double y, 0313 double w, 0314 double h, 0315 int corner, 0316 window_settings * ws, 0317 double radius_top_left, 0318 double radius_top_right, 0319 double radius_bottom_left, 0320 double radius_bottom_right, 0321 double radius_top_right_tri, 0322 double radius_top_left_tri, 0323 int always_allow, 0324 gboolean left_bar_dip, 0325 int left_bar_dip_radius, 0326 gboolean enable_left_bar_dip_lower_part, 0327 double left_bar_dip_offset 0328 ) 0329 { 0330 0331 // always_allow 1 = radius_top_left 0332 // always_allow 2 = radius_top_right 0333 // always_allow 3 = radius_bottom_left 0334 // always_allow 4 = radius_bottom_right 0335 0336 int radius_top_left_on = 1; 0337 int radius_top_right_on = 1; 0338 int radius_bottom_left_on = 1; 0339 int radius_bottom_right_on = 1; 0340 int radius_top_right_tri_on = 1; 0341 int radius_top_left_tri_on = 1; 0342 0343 0344 if (radius_top_left!=0 && ((corner & CORNER_TOPLEFT) || always_allow == 1)) 0345 radius_top_left_on=0; 0346 0347 if (radius_top_right!=0 && ((corner & CORNER_TOPRIGHT) || always_allow == 2)) 0348 radius_top_right_on=0; 0349 0350 if (radius_bottom_left!=0 && ((corner & CORNER_BOTTOMLEFT) || always_allow == 3)) 0351 radius_bottom_left_on=0; 0352 0353 if (radius_bottom_right!=0 && ((corner & CORNER_BOTTOMRIGHT) || always_allow == 4)) 0354 radius_bottom_right_on=0; 0355 0356 if (radius_top_right_tri!=0 && (corner & DIP_ROUND_TRI)) { 0357 //Can't have both on at the same time! 0358 radius_top_right_tri_on=0; 0359 radius_top_right_on=1; 0360 } 0361 0362 if (radius_top_left_tri!=0 && (corner & DIP_ROUND_TRI)) { 0363 //Can't have both on at the same time! 0364 radius_top_left_tri_on=0; 0365 radius_top_left_on=1; 0366 } 0367 0368 double cx, cy; 0369 double curve, width, height; 0370 double radius2; 0371 0372 if (left_bar_dip == TRUE) { 0373 0374 left_bar_dip_offset = (h /100) * left_bar_dip_offset; 0375 //printf("Left bar heigth = %f, Dip bar offset = %f\n", h, left_bar_dip_offset); 0376 0377 width = w; 0378 height = h; 0379 0380 //if ((left_bar_dip_radius * 2) > left_bar_dip_radius) { 0381 // radius_top_left = 0.5 * (radius_top_left - 1); 0382 //} 0383 0384 //Fix this curve malarcy 0385 curve = 0.5; 0386 0387 cairo_move_to (cr, x, y); 0388 //cairo_line_to (cr, x + 5, y + 5); 0389 0390 cairo_line_to(cr, x, y + left_bar_dip_offset); 0391 cairo_get_current_point (cr, &cx, &cy); 0392 cairo_arc_negative (cr, cx + left_bar_dip_radius, cy, left_bar_dip_radius, M_PI * 1.0, M_PI * curve); 0393 cairo_get_current_point (cr, &cx, &cy); 0394 //x_width = radius - x_width; 0395 //printf("Width %f\n", a_width); 0396 //printf("Height %f\n", a_height); 0397 0398 0399 cairo_arc (cr, cx, cy + left_bar_dip_radius, left_bar_dip_radius, M_PI * (curve + 1), M_PI * 2.0); 0400 0401 cairo_get_current_point (cr, &cx, &cy); 0402 0403 0404 //cairo_arc_negative (cr, cx, cy, radius, M_PI * (curve + 2.5), M_PI * 2.5); 0405 0406 if (enable_left_bar_dip_lower_part == TRUE) { 0407 cairo_line_to (cr, cx, cy + height - left_bar_dip_offset - (4* left_bar_dip_radius)); 0408 cairo_get_current_point (cr, &cx, &cy); 0409 cairo_arc (cr, cx - left_bar_dip_radius, cy, left_bar_dip_radius, M_PI * 2.0, M_PI * (curve + 2.0)); 0410 cairo_get_current_point (cr, &cx, &cy); 0411 cairo_arc_negative (cr, cx, cy + left_bar_dip_radius, left_bar_dip_radius, M_PI * 1.5, M_PI * (curve + 2.5)); 0412 cairo_get_current_point (cr, &cx, &cy); 0413 cairo_line_to (cr, cx + width, cy); 0414 cairo_get_current_point (cr, &cx, &cy); 0415 cairo_line_to (cr, cx, cy - height); 0416 cairo_get_current_point (cr, &cx, &cy); 0417 cairo_line_to (cr, cx - width, cy); 0418 } else { 0419 cairo_line_to (cr, cx, cy + height - left_bar_dip_offset - (2* left_bar_dip_radius)); 0420 cairo_get_current_point (cr, &cx, &cy); 0421 cairo_line_to (cr, cx + width - (2* left_bar_dip_radius), cy); 0422 cairo_get_current_point (cr, &cx, &cy); 0423 cairo_line_to (cr, cx, cy - height); 0424 cairo_get_current_point (cr, &cx, &cy); 0425 cairo_line_to (cr, cx - width + (2* left_bar_dip_radius), cy); 0426 } 0427 0428 0429 0430 0431 0432 0433 } else { 0434 0435 if (radius_top_right_tri_on == 0) { 0436 0437 if (radius_top_right_tri > h) { 0438 radius_top_right_tri = h; 0439 } 0440 0441 curve = 2; 0442 0443 radius2 = h - radius_top_right_tri; 0444 0445 cairo_arc (cr, x + w + radius_top_right_tri- radius_top_right_tri, y + radius_top_right_tri, radius_top_right_tri, M_PI * 1.5, M_PI * curve); 0446 cairo_get_current_point (cr, &cx, &cy); 0447 cairo_arc_negative (cr, x + w + radius_top_right_tri + (h - radius_top_right_tri), cy, radius2, M_PI* (curve - 1), M_PI * 2.5); 0448 0449 cairo_get_current_point (cr, &cx, &cy); 0450 cairo_line_to (cr, cx - radius2 - radius_top_right_tri, cy); 0451 cairo_line_to (cr, cx - radius2 - radius_top_right_tri , y); 0452 } 0453 0454 if (radius_top_left_tri_on == 0) { 0455 0456 if (radius_top_left_tri > h) { 0457 radius_top_left_tri = h; 0458 } 0459 0460 curve = 2; 0461 0462 radius2 = h - radius_top_left_tri; 0463 0464 //Can use h to offset x because it is a square - would be radius - radius2 0465 cairo_arc_negative (cr, x - radius2 - radius_top_left_tri, y + radius_top_left_tri, radius2, M_PI * 2.5, M_PI * 2.0); 0466 cairo_get_current_point (cr, &cx, &cy); 0467 cairo_arc (cr, cx + radius_top_left_tri, cy, radius_top_left_tri, M_PI * 1.0, M_PI * 1.5); 0468 0469 0470 //cairo_get_current_point (cr, &cx, &cy); 0471 cairo_get_current_point (cr, &cx, &cy); 0472 cairo_line_to (cr, cx, cy + radius2 + radius_top_left_tri); 0473 cairo_line_to (cr, cx - radius2 - radius_top_left_tri , cy + radius2 + radius_top_left_tri); 0474 0475 0476 0477 } 0478 0479 0480 if (radius_top_left_on == 0) { 0481 cairo_move_to (cr, x + radius_top_left, y); 0482 } else 0483 cairo_move_to (cr, x, y); 0484 0485 0486 if (radius_top_right_on == 0) { 0487 cairo_arc (cr, x + w - radius_top_right, y + radius_top_right, radius_top_right, M_PI * 1.5, M_PI * 2.0); 0488 } else 0489 cairo_line_to (cr, x + w, y); 0490 0491 if (radius_bottom_right_on == 0) { 0492 cairo_arc (cr, x + w - radius_bottom_right, y + h - radius_bottom_right, radius_bottom_right, 0493 0.0, M_PI * 0.5); 0494 } else 0495 cairo_line_to (cr, x + w, y + h); 0496 0497 if (radius_bottom_left_on == 0) { 0498 cairo_arc (cr, x + radius_bottom_left, y + h - radius_bottom_left, radius_bottom_left, 0499 M_PI * 0.5, M_PI); 0500 } else 0501 cairo_line_to (cr, x, y + h); 0502 0503 if (radius_top_left_on == 0) { 0504 cairo_arc (cr, x + radius_top_left, y + radius_top_left, radius_top_left, M_PI, M_PI * 1.5); 0505 } else 0506 cairo_line_to (cr, x, y); 0507 0508 } 0509 } 0510 0511 void 0512 fill_rounded_square (cairo_t *cr, 0513 double x, 0514 double y, 0515 double w, 0516 double h, 0517 int corner, 0518 alpha_color * c0, 0519 alpha_color * c1, 0520 int gravity, 0521 window_settings * ws, 0522 double radius_top_left, 0523 double radius_top_right, 0524 double radius_bottom_left, 0525 double radius_bottom_right, 0526 double radius_top_right_tri, 0527 double radius_top_left_tri, 0528 int always_allow, 0529 gboolean left_bar_dip, 0530 int left_bar_dip_radius, 0531 gboolean enable_left_bar_dip_lower_part, 0532 double left_bar_dip_offset, 0533 int pattern_size, 0534 int gradient_repeat_direction, 0535 double common_gradient_starting_point_x, 0536 double common_gradient_starting_point_y, 0537 cairo_surface_t *surface, 0538 gboolean enable_pixmaps, 0539 gboolean repeat_pixmap 0540 ) 0541 { 0542 cairo_pattern_t *pattern; 0543 int gradient_offset = 0; 0544 0545 if (corner & DIP_ROUND_TRI && (radius_top_left_tri > 0)) { 0546 gradient_offset = h; 0547 } 0548 0549 0550 rounded_square (cr, x, y, w, h, corner,ws,radius_top_left, radius_top_right, radius_bottom_left, radius_bottom_right, radius_top_right_tri, radius_top_left_tri, always_allow, left_bar_dip, left_bar_dip_radius, enable_left_bar_dip_lower_part, left_bar_dip_offset); 0551 0552 gboolean pattern_vert = TRUE; 0553 if (pattern_size == 0) { 0554 pattern_size = h; 0555 pattern_vert = FALSE; 0556 } 0557 0558 if (gravity & SHADE_RIGHT) 0559 { 0560 common_gradient_starting_point_x = common_gradient_starting_point_x + w; 0561 w = -w; 0562 } 0563 else if (!(gravity & SHADE_LEFT)) 0564 { 0565 common_gradient_starting_point_x = w = 0; 0566 } 0567 0568 if (gravity & SHADE_BOTTOM) 0569 { 0570 common_gradient_starting_point_y = common_gradient_starting_point_y + h; 0571 h = -h; 0572 } 0573 else if (!(gravity & SHADE_TOP)) 0574 { 0575 common_gradient_starting_point_y = h = 0; 0576 } 0577 0578 /* if (w && h) 0579 { 0580 cairo_matrix_t matrix; 0581 0582 pattern = cairo_pattern_create_radial (0.0, 0.0, 0.0, 0.0, 0.0, w); 0583 0584 cairo_matrix_init_scale (&matrix, 1.0, w / h); 0585 cairo_matrix_translate (&matrix, -(x + w), -(y + h)); 0586 0587 cairo_pattern_set_matrix (pattern, &matrix); 0588 } 0589 else 0590 { */ 0591 0592 0593 0594 if (enable_pixmaps == FALSE) { 0595 if (gradient_repeat_direction == 1 && pattern_vert == TRUE) { 0596 pattern = cairo_pattern_create_linear (common_gradient_starting_point_x, common_gradient_starting_point_y, common_gradient_starting_point_x + pattern_size, common_gradient_starting_point_y); 0597 //pattern = cairo_pattern_create_linear (x + w, y + pattern_size, x, y); 0598 } else if (gradient_repeat_direction == 2 && pattern_vert == TRUE) { 0599 pattern = cairo_pattern_create_linear (common_gradient_starting_point_x, common_gradient_starting_point_y, common_gradient_starting_point_x + pattern_size, common_gradient_starting_point_y + pattern_size); 0600 } else { 0601 pattern = cairo_pattern_create_linear (common_gradient_starting_point_x, common_gradient_starting_point_y, common_gradient_starting_point_x, common_gradient_starting_point_y + pattern_size); 0602 } 0603 0604 0605 cairo_pattern_add_color_stop_rgba (pattern, 0.0, c0->color.r, c0->color.g, 0606 c0->color.b,c0->alpha); 0607 0608 cairo_pattern_add_color_stop_rgba (pattern, 1.0, c1->color.r, c1->color.g, 0609 c1->color.b,c1->alpha); 0610 cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REFLECT); 0611 0612 } else { 0613 0614 0615 cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); 0616 cairo_set_source_surface (cr, surface, x - gradient_offset, y); 0617 pattern = cairo_pattern_reference(cairo_get_source(cr)); 0618 if (repeat_pixmap == TRUE) { 0619 cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT); 0620 } else { 0621 cairo_pattern_set_extend(pattern, CAIRO_EXTEND_NONE); 0622 } 0623 } 0624 0625 cairo_set_source (cr, pattern); 0626 cairo_fill (cr); 0627 cairo_pattern_destroy (pattern); 0628 } 0629 0630 void engine_draw_frame (decor_t * d, cairo_t * cr) 0631 { 0632 double x1, y1, x2, y2, h; 0633 int top; 0634 alpha_color inner_color; 0635 alpha_color outer_color; 0636 alpha_color inner_title_color; 0637 alpha_color outer_title_color; 0638 0639 frame_settings * fs = d->fs; 0640 private_fs * pfs = fs->engine_fs; 0641 window_settings * ws = fs->ws; 0642 private_ws * pws = ws->engine_ws; 0643 0644 //printf("Higher - Red: %i, Green %i, Blue %i \n", pfs->window_frame_halo.color.r, pfs->window_frame_halo.color.g, pfs->window_frame_halo.color.b); 0645 //The bug has already appeared here, even though I havn't done anything to the color code so far 0646 0647 0648 0649 gdouble pleft; 0650 gdouble ptop; 0651 gdouble pwidth; 0652 gdouble pheight; 0653 top = ws->win_extents.top + ws->titlebar_height; 0654 0655 x1 = ws->left_space - ws->win_extents.left; 0656 y1 = ws->top_space - ws->win_extents.top; 0657 x2 = d->width - ws->right_space + ws->win_extents.right; 0658 y2 = d->height - ws->bottom_space + ws->win_extents.bottom; 0659 pleft=x1+ws->win_extents.left-0.5; 0660 ptop=y1+top-0.5; 0661 pwidth=x2-x1-ws->win_extents.left-ws->win_extents.right+1; 0662 pheight=y2-y1-top-ws->win_extents.bottom+1; 0663 0664 h = d->height - ws->top_space - ws->titlebar_height - ws->bottom_space; 0665 0666 0667 0668 int minimised_border; 0669 float window_gap = 0; 0670 //x offset due to left dip bar 0671 int left_bar_dip_offset = 0; 0672 gboolean maximised; 0673 gboolean enable_left_bar_dip = FALSE; 0674 0675 cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); 0676 0677 int corners = 0678 ((pws->round_top_left)?CORNER_TOPLEFT:0) | 0679 ((pws->round_top_right)?CORNER_TOPRIGHT:0) | 0680 ((pws->round_tri)?DIP_ROUND_TRI:0) | 0681 ((pws->round_bottom_left)?CORNER_BOTTOMLEFT:0) | 0682 ((pws->round_bottom_right)?CORNER_BOTTOMRIGHT:0); 0683 0684 0685 if (d->state & (WNCK_WINDOW_STATE_MAXIMIZED_HORIZONTALLY | WNCK_WINDOW_STATE_MAXIMIZED_VERTICALLY)) { 0686 corners = 0; 0687 maximised = TRUE; 0688 enable_left_bar_dip = FALSE; 0689 0690 if (pws->enable_maximised_colors == TRUE) { 0691 inner_color.alpha = pws->inner_maximised_alpha; 0692 inner_color.color = pws->inner_maximised_color; 0693 outer_color.alpha = pws->outer_maximised_alpha; 0694 outer_color.color = pws->outer_maximised_color; 0695 inner_title_color.alpha = pws->inner_maximised_alpha; 0696 inner_title_color.color = pws->inner_maximised_color; 0697 outer_title_color.alpha = pws->outer_maximised_alpha; 0698 outer_title_color.color = pws->outer_maximised_color; 0699 } else { 0700 inner_color = pfs->inner; 0701 outer_color = pfs->outer; 0702 inner_title_color = pfs->title_inner; 0703 outer_title_color = pfs->title_outer; 0704 } 0705 0706 minimised_border = 0; 0707 window_gap = 0.5; 0708 0709 } else { 0710 maximised = FALSE; 0711 minimised_border = pws->minimised_border; 0712 //printf("Setting large border widths"); 0713 window_gap = pws->window_gap; 0714 inner_color = pfs->inner; 0715 outer_color = pfs->outer; 0716 inner_title_color = pfs->title_inner; 0717 outer_title_color = pfs->title_outer; 0718 0719 if(pws->enable_left_bar_dip == TRUE && !(d->state & (WNCK_WINDOW_STATE_SHADED))) { 0720 enable_left_bar_dip = TRUE; 0721 left_bar_dip_offset = (2 * pws->left_bar_dip_radius); 0722 0723 if (pws->done_indent == FALSE && ws->tobj_layout[0] != '(') { 0724 char *layout; 0725 layout = g_strdup_printf("(-%i)%s", left_bar_dip_offset,ws->tobj_layout); 0726 g_free(ws->tobj_layout); 0727 ws->tobj_layout = layout; 0728 pws->done_indent = TRUE; 0729 } 0730 0731 //sprintf(ws->tobj_layout, "(-%i)%s", left_bar_dip_offset, layout); 89 0732 //pango_layout_set_indent(d->layout, 20000); 0733 //pws->round_bottom_left = FALSE; 0734 } 0735 } 0736 0737 0738 0739 // pfs->title_outer.alpha = 0.0; 0740 0741 0742 0743 ////////////DRAW FRAME/////////////////////////////////////////// 0744 // always_allow 1 = radius_top_left 0745 // always_allow 2 = radius_top_right 0746 // always_allow 3 = radius_bottom_left 0747 // always_allow 4 = radius_bottom_right 0748 0749 double width = x2 - x1 + (window_gap * 2); 0750 double x_start = x1 - window_gap; 0751 double x_end = x2 + window_gap; 0752 double pane_1_width = pws->title_bar_dip_title_width; 0753 double title_bar_dip_dip_width = width - (pws->title_bar_dip_title_width + pws->title_bar_dip_button_width); 0754 gboolean enable_dip; 0755 0756 //printf("Frame width: %f - Pane Width: %f\n", width, pane_1_width); 0757 //fflush(stdout); 0758 0759 enable_dip = FALSE; 0760 gboolean do_button_part= TRUE; 0761 double title_bar_dip_radius = 0; 0762 double title_bar_dip_radius_offset = 0; 0763 0764 // printf("%s\n", d->tobj_item_state[TBT_TITLE]); 0765 // if ((owidth=get_title_object_width(ws->tobj_layout[i],ws,d))==-1) 0766 0767 //TIDY ALL THIS UP! -lazy 0768 //Maximised causes problems 0769 if (maximised == FALSE && pws->enable_bar_dip_button_part == FALSE) { 0770 do_button_part = FALSE; 0771 } 0772 0773 0774 if (pws->enable_title_bar_dip == TRUE && maximised == FALSE && ((pws->title_bar_dip_title_width + pws->title_bar_dip_button_width) < width)) { 0775 enable_dip = TRUE; 0776 title_bar_dip_radius = pws->title_bar_dip_radius; 0777 if(pws->round_tri == TRUE) { 0778 title_bar_dip_radius_offset = top - 0.5 + minimised_border; 0779 } 0780 } else { 0781 do_button_part= TRUE; 0782 } 0783 0784 0785 //////////////////////////////////// 0786 0787 0788 /* ORDER radius_top_left, radius_top_right, radius_bottom_left, radius_bottom_right, radius_tri_left, radius_tri_right */ 0789 0790 0791 int gradient_repeat_height; 0792 int gradient_repeat_direction=0; 0793 alpha_color lower_frame_gradient_inner; 0794 alpha_color lower_frame_gradient_outer; 0795 if ((pfs->gradient_repeat_enabled == TRUE && maximised == FALSE) | (pfs->gradient_repeat_enabled == TRUE && pws->gradient_repeat_disabled_maximised == FALSE && maximised == TRUE)) { 0796 gradient_repeat_height = pfs->gradient_repeat_height; 0797 //The bottom gradient is reversed so you have to flip it round 0798 lower_frame_gradient_inner = outer_color; 0799 lower_frame_gradient_outer = inner_color; 0800 if (pfs->gradient_repeat_direction_vertical == TRUE) { 0801 gradient_repeat_direction = 1; 0802 } else if (pfs->gradient_repeat_direction_diagonal == TRUE) { 0803 gradient_repeat_direction = 2; 0804 } else { 0805 gradient_repeat_direction = 0; 0806 } 0807 } else { 0808 lower_frame_gradient_inner = inner_color; 0809 lower_frame_gradient_outer = outer_color; 0810 gradient_repeat_height = 0; 0811 } 0812 0813 0814 if (enable_dip == TRUE) { 0815 #if 0 0816 0817 ////////////////////////////////Trim text////////////////////////////////////////// 0818 PangoLayoutLine *line; 0819 0820 int name_length = pane_1_width * 1000 - (2000 * ptop); 0821 pango_layout_set_width(d->layout, name_length); 0822 //char name[strlen(pango_layout_get_text(d->layout)) + 3]; 0823 const char *name; 0824 name = pango_layout_get_text(d->layout); 0825 pango_layout_set_wrap (d->layout, PANGO_WRAP_CHAR); 0826 0827 //////// //if anyone reports segfaults look at this first/////////////////////////// 0828 if (pango_layout_get_line_count (d->layout) > 1) { 0829 line = pango_layout_get_line (d->layout, 0); 0830 name = g_strndup (name, line->length - 3); 0831 //name = strcat(name, "..."); 0832 pango_layout_set_text (d->layout, name, line->length); 0833 } 0834 /////////////////////////////////////////////////////////////////////////////////// 0835 #endif 0836 0837 ///////////////////////////////Pixmaps////////////////////////////////////////// 0838 gboolean pixmaps_titlebarpart_enabled = FALSE; 0839 gboolean pixmaps_buttonpart_enabled = FALSE; 0840 if (pws->pixmaps.titlebarpart_enabled == TRUE) { 0841 pixmaps_titlebarpart_enabled = TRUE; 0842 } 0843 0844 if (pws->pixmaps.buttonpart_enabled == TRUE) { 0845 pixmaps_buttonpart_enabled = TRUE; 0846 } 0847 0848 /////////////////////////////////////////////////////////////////////////////////// 0849 0850 0851 fill_rounded_square (cr, 0852 x_start - minimised_border - left_bar_dip_offset, 0853 y1 + 0.5 - minimised_border, 0854 pane_1_width + minimised_border - title_bar_dip_radius_offset, 0855 top - 0.5 + minimised_border, 0856 (CORNER_TOPRIGHT | CORNER_TOPLEFT | DIP_ROUND_TRI) & corners, 0857 &inner_title_color,&outer_title_color, 0858 SHADE_TOP, ws, 0859 pws->titlebar_radius, title_bar_dip_radius, 0, 0, title_bar_dip_radius, 0, 2, FALSE, 0, FALSE, 0, gradient_repeat_height, gradient_repeat_direction, x1, y1, pws->pixmaps.titlebar_surface, pixmaps_titlebarpart_enabled, pws->pixmaps.titlebarpart_repeat_enabled); 0860 0861 if (pws->enable_bar_dip_button_part == TRUE) { 0862 fill_rounded_square (cr, 0863 x_end - pws->title_bar_dip_button_width - left_bar_dip_offset + title_bar_dip_radius_offset, 0864 y1 + 0.5 - minimised_border, 0865 pws->title_bar_dip_button_width + minimised_border + left_bar_dip_offset - title_bar_dip_radius_offset, 0866 top - 0.5 + minimised_border, 0867 (CORNER_TOPLEFT | CORNER_TOPRIGHT | DIP_ROUND_TRI) & corners, 0868 &inner_title_color,&outer_title_color, 0869 SHADE_TOP, ws, 0870 title_bar_dip_radius, pws->titlebar_radius, 0, 0, 0, title_bar_dip_radius, 1, FALSE, 0, FALSE, 0, gradient_repeat_height, gradient_repeat_direction, x1, y1, pws->pixmaps.titlebar_surface_buttons, pixmaps_buttonpart_enabled, pws->pixmaps.buttonpart_repeat_enabled); 0871 } 0872 0873 0874 0875 } else { 0876 0877 fill_rounded_square (cr, 0878 x_start - minimised_border - left_bar_dip_offset, 0879 y1 + 0.5 - minimised_border, 0880 width + (2* minimised_border) + left_bar_dip_offset, 0881 top - 0.5 + minimised_border, 0882 (CORNER_TOPLEFT | CORNER_TOPRIGHT) & corners, 0883 &inner_title_color,&outer_title_color, 0884 SHADE_TOP, ws, 0885 pws->titlebar_radius, pws->titlebar_radius, 0, 0, 0, 0, 0, FALSE, 0, FALSE, 0, gradient_repeat_height, gradient_repeat_direction, x1, y1, pws->pixmaps.titlebar_surface_large, pws->pixmaps.titlebar_enabled, pws->pixmaps.titlebar_repeat_enabled); 0886 0887 } 0888 0889 0890 0891 if ((maximised == FALSE && pws->show_border_minimised == TRUE) | (maximised == TRUE && pws->show_border_maximised == TRUE)) { 0892 0893 0894 0895 fill_rounded_square (cr, 0896 x_start - minimised_border - left_bar_dip_offset, 0897 y1 + top, 0898 ws->win_extents.left + minimised_border + left_bar_dip_offset, 0899 h+window_gap + 1, 0900 0, 0901 &lower_frame_gradient_outer,&lower_frame_gradient_inner, 0902 SHADE_TOP, ws, 0903 10, 0, 0, 0, 0, 0, 0, enable_left_bar_dip, pws->left_bar_dip_radius, pws->enable_left_bar_dip_lower_part, pws->left_bar_dip_offset, gradient_repeat_height, gradient_repeat_direction, x1, y1, pws->pixmaps.titlebar_surface, FALSE, FALSE); 0904 0905 fill_rounded_square (cr, 0906 x_end - ws->win_extents.right, 0907 y1 + top, 0908 ws->win_extents.right + minimised_border, 0909 h+window_gap +0.5, 0910 0, 0911 &lower_frame_gradient_outer,&lower_frame_gradient_inner, 0912 SHADE_TOP, ws, 0913 0, 0, 0, 0, 0, 0, 0, FALSE, 0, FALSE, 0, gradient_repeat_height, gradient_repeat_direction, x1, y1, pws->pixmaps.titlebar_surface, FALSE, FALSE); 0914 0915 0916 //Have to decrease the size of the bottom right corner as the left dip bar is cutting into it 0917 int tmp_minus = 0; 0918 if (pws->enable_left_bar_dip_lower_part == FALSE && enable_left_bar_dip == TRUE) { 0919 tmp_minus = (2 * pws->left_bar_dip_radius); 0920 } 0921 0922 fill_rounded_square (cr, 0923 x1 - window_gap - minimised_border + tmp_minus - left_bar_dip_offset, 0924 y2 - ws->win_extents.bottom + window_gap, 0925 x2 - x1 + ws->win_extents.left - ws->win_extents.right -tmp_minus + left_bar_dip_offset + (window_gap *2), 0926 ws->win_extents.bottom - 0.5 + minimised_border, 0927 (CORNER_BOTTOMLEFT | CORNER_BOTTOMRIGHT) & corners, 0928 &outer_color,&inner_color, 0929 SHADE_BOTTOM,ws, 0930 0, 0, 0, pws->frame_radius, pws->frame_radius, 0, 0, FALSE, 0, FALSE, 0, gradient_repeat_height, gradient_repeat_direction, x1, y1, pws->pixmaps.titlebar_surface, FALSE, FALSE); 0931 0932 0933 } 0934 0935 cairo_set_operator (cr, CAIRO_OPERATOR_OVER); 0936 /* =====================titlebar separator line */ 0937 0938 if (pfs->separator_line.alpha != 0) { 0939 cairo_set_source_alpha_color(cr,&pfs->separator_line); 0940 cairo_move_to (cr, x1 + 4.5, y1 + top - 0.5); 0941 cairo_rel_line_to (cr, x2 - x1 - 9, 0.0); 0942 cairo_stroke (cr); 0943 } 0944 0945 //FRAME 0946 0947 rounded_rectangle (cr, 0948 x1 + 0.5, y1 + 0.5, 0949 x2 - x1 - 1.0, y2 - y1 - 1.0, 0950 (CORNER_TOPLEFT | CORNER_TOPRIGHT | CORNER_BOTTOMLEFT | 0951 CORNER_BOTTOMRIGHT) & corners,ws, 0952 pws->frame_radius); 0953 0954 cairo_clip (cr); 0955 0956 cairo_translate (cr, 1.0, 1.0); 0957 0958 if (pfs->window_highlight.alpha != 0) { 0959 if (enable_dip == TRUE) { 0960 rounded_rectangle_independent (cr, 0961 x1 + 0.5 - minimised_border - window_gap - left_bar_dip_offset, 0962 y1 - minimised_border, 0963 x2 - x1 + ( 2* (minimised_border +window_gap)) + left_bar_dip_offset, 0964 y2 - y1 - 1.0 + window_gap + ( 2* (minimised_border)), 0965 top - 0.5 + minimised_border, 0966 (CORNER_TOPLEFT | CORNER_TOPRIGHT | CORNER_BOTTOMLEFT | 0967 CORNER_BOTTOMRIGHT | DIP_ROUND_TRI) & corners, ws, 0968 pws->titlebar_radius, pws->titlebar_radius, pws->frame_radius, pws->frame_radius, title_bar_dip_radius, minimised_border + pane_1_width - title_bar_dip_radius_offset, title_bar_dip_dip_width + (2* title_bar_dip_radius_offset), TRUE, do_button_part, enable_left_bar_dip, minimised_border + ws->win_extents.bottom, pws->left_bar_dip_radius, pws->enable_left_bar_dip_lower_part, pws->left_bar_dip_offset); 0969 } else { 0970 0971 rounded_rectangle_independent (cr, 0972 x1 + 0.5 - minimised_border - window_gap - left_bar_dip_offset, 0973 y1 - minimised_border, 0974 x2 - x1 + ( 2* (minimised_border +window_gap)) + left_bar_dip_offset, 0975 y2 - y1 - 1.0 + window_gap + ( 2* (minimised_border)), 0976 top - 0.5 + minimised_border, 0977 (CORNER_TOPLEFT | CORNER_TOPRIGHT | CORNER_BOTTOMLEFT | 0978 CORNER_BOTTOMRIGHT | DIP_ROUND_TRI) & corners, ws, 0979 pws->titlebar_radius, pws->titlebar_radius, pws->frame_radius, pws->frame_radius, 0, 0, 0, FALSE, do_button_part, enable_left_bar_dip, minimised_border + ws->win_extents.bottom, pws->left_bar_dip_radius, pws->enable_left_bar_dip_lower_part, pws->left_bar_dip_offset); 0980 0981 } 0982 0983 0984 0985 0986 //HIGHLIGHT HERE 0987 cairo_set_source_alpha_color(cr,&pfs->window_highlight); 0988 cairo_stroke(cr); 0989 } 0990 0991 if (pfs->window_shadow.alpha != 0) { 0992 0993 cairo_reset_clip (cr); 0994 cairo_translate (cr, -2.0, -2.0); 0995 0996 if (enable_dip == TRUE) { 0997 rounded_rectangle_independent (cr, 0998 x1 + 0.5 - minimised_border - window_gap - left_bar_dip_offset, 0999 y1 + 1.5 - minimised_border, 1000 x2 - x1 + ( 2* (minimised_border +window_gap)) + left_bar_dip_offset, 1001 y2 - y1 - 1.0 + window_gap + ( 2* (minimised_border)), 1002 top - 0.5 + minimised_border, 1003 (CORNER_TOPLEFT | CORNER_TOPRIGHT | CORNER_BOTTOMLEFT | 1004 CORNER_BOTTOMRIGHT | DIP_ROUND_TRI) & corners, ws, 1005 pws->titlebar_radius, pws->titlebar_radius, pws->frame_radius, pws->frame_radius, title_bar_dip_radius, minimised_border + pane_1_width - title_bar_dip_radius_offset, title_bar_dip_dip_width + (2 * title_bar_dip_radius_offset), TRUE, do_button_part, enable_left_bar_dip, minimised_border + ws->win_extents.bottom, pws->left_bar_dip_radius, pws->enable_left_bar_dip_lower_part, pws->left_bar_dip_offset); 1006 } else { 1007 1008 rounded_rectangle_independent (cr, 1009 x1 + 0.5 - minimised_border - window_gap - left_bar_dip_offset, 1010 y1 + 1.5 - minimised_border, 1011 x2 - x1 + ( 2* (minimised_border +window_gap)) + left_bar_dip_offset, 1012 y2 - y1 - 1.0 + window_gap + ( 2* (minimised_border)), 1013 top - 0.5 + minimised_border, 1014 (CORNER_TOPLEFT | CORNER_TOPRIGHT | CORNER_BOTTOMLEFT | 1015 CORNER_BOTTOMRIGHT | DIP_ROUND_TRI) & corners, ws, 1016 pws->titlebar_radius, pws->titlebar_radius, pws->frame_radius, pws->frame_radius, 0, 0, 0, FALSE, do_button_part, enable_left_bar_dip, minimised_border + ws->win_extents.bottom, pws->left_bar_dip_radius, pws->enable_left_bar_dip_lower_part, pws->left_bar_dip_offset); 1017 1018 } 1019 1020 1021 1022 //SHADOW HERE 1023 cairo_set_source_alpha_color(cr,&pfs->window_shadow); 1024 cairo_stroke(cr); 1025 } 1026 1027 1028 if (pfs->window_frame_halo.alpha != 0) { 1029 printf("ok\n"); 1030 cairo_reset_clip (cr); 1031 cairo_translate (cr, 1.0, 1.0); 1032 1033 if (enable_dip == TRUE) { 1034 rounded_rectangle_independent (cr, 1035 x1 + 0.5 - minimised_border - window_gap - left_bar_dip_offset, 1036 y1 + 0.5 - minimised_border, 1037 x2 - x1 + ( 2* (minimised_border +window_gap)) + left_bar_dip_offset, 1038 y2 - y1 - 1.0 + window_gap + ( 2* (minimised_border)), 1039 top - 0.5 + minimised_border, 1040 (CORNER_TOPLEFT | CORNER_TOPRIGHT | CORNER_BOTTOMLEFT | 1041 CORNER_BOTTOMRIGHT | DIP_ROUND_TRI) & corners, ws, 1042 pws->titlebar_radius, pws->titlebar_radius, pws->frame_radius, pws->frame_radius, title_bar_dip_radius, minimised_border + pane_1_width - title_bar_dip_radius_offset, title_bar_dip_dip_width + (2* title_bar_dip_radius_offset), TRUE, do_button_part, enable_left_bar_dip, minimised_border + ws->win_extents.bottom, pws->left_bar_dip_radius, pws->enable_left_bar_dip_lower_part, pws->left_bar_dip_offset); 1043 } else { 1044 1045 rounded_rectangle_independent (cr, 1046 x1 + 0.5 - minimised_border - window_gap - left_bar_dip_offset, 1047 y1 + 0.5 - minimised_border, 1048 x2 - x1 + ( 2* (minimised_border +window_gap)) + left_bar_dip_offset, 1049 y2 - y1 - 1.5 + window_gap + ( 2* (minimised_border)), 1050 top - 0.5 + minimised_border, 1051 (CORNER_TOPLEFT | CORNER_TOPRIGHT | CORNER_BOTTOMLEFT | 1052 CORNER_BOTTOMRIGHT | DIP_ROUND_TRI) & corners, ws, 1053 pws->titlebar_radius, pws->titlebar_radius, pws->frame_radius, pws->frame_radius, 0, 0, 0, FALSE, do_button_part, enable_left_bar_dip, minimised_border + ws->win_extents.bottom, pws->left_bar_dip_radius, pws->enable_left_bar_dip_lower_part, pws->left_bar_dip_offset); 1054 1055 } 1056 1057 cairo_set_source_alpha_color(cr,&pfs->window_frame_halo); 1058 cairo_stroke (cr); 1059 1060 } 1061 1062 1063 1064 //INNER STUFF 1065 1066 //TODO - make this a bit more pixel-perfect...but it works for now 1067 1068 if (pfs->contents_shadow.alpha != 0) { 1069 cairo_set_line_width(cr,1.0); 1070 1071 cairo_move_to(cr,pleft+pwidth+1.5,ptop-1); 1072 cairo_rel_line_to(cr,-pwidth-2.5,0); 1073 cairo_rel_line_to(cr,0,pheight+2.5); 1074 cairo_set_source_alpha_color(cr,&pfs->contents_shadow); 1075 cairo_stroke(cr); 1076 } 1077 1078 if (pfs->contents_highlight.alpha != 0) { 1079 cairo_move_to(cr,pleft+pwidth+1,ptop-1.5); 1080 cairo_rel_line_to(cr,0,pheight+2.5); 1081 cairo_rel_line_to(cr,-pwidth-2.5,0); 1082 cairo_set_source_alpha_color(cr,&pfs->contents_highlight); 1083 cairo_stroke(cr); 1084 } 1085 1086 if (pfs->contents_halo.alpha != 0) { 1087 cairo_move_to(cr,pleft,ptop); 1088 cairo_rel_line_to(cr,pwidth,0); 1089 cairo_rel_line_to(cr,0,pheight); 1090 cairo_rel_line_to(cr,-pwidth,0); 1091 cairo_rel_line_to(cr,0,-pheight); 1092 cairo_set_source_alpha_color(cr,&pfs->contents_halo); 1093 cairo_stroke(cr); 1094 } 1095 } 1096 void load_engine_settings(GKeyFile * f, window_settings * ws) 1097 { 1098 private_ws * pws = ws->engine_ws; 1099 1100 PFACS(outer); 1101 PFACS(inner); 1102 PFACS(title_outer); 1103 PFACS(title_inner); 1104 PFACS(window_frame_halo); 1105 PFACS(window_highlight); 1106 PFACS(window_shadow); 1107 PFACS(separator_line); 1108 PFACS(contents_shadow); 1109 PFACS(contents_highlight); 1110 PFACS(contents_halo); 1111 load_color_setting(f,&pws->outer_maximised_color,"outer_maximised_color",SECT); 1112 load_color_setting(f,&pws->inner_maximised_color,"inner_maximised_color",SECT); 1113 load_bool_setting(f,&pws->enable_maximised_colors,"enable_maximised_colors",SECT); 1114 load_bool_setting(f,&pws->gradient_repeat_disabled_maximised, "gradient_repeat_disabled_maximised", SECT); 1115 load_bool_setting(f,&pws->enable_title_bar_dip,"enable_title_bar_dip",SECT); 1116 load_bool_setting(f,&pws->round_top_left,"round_top_left",SECT); 1117 load_bool_setting(f,&pws->round_top_right,"round_top_right",SECT); 1118 load_bool_setting(f,&pws->round_bottom_left,"round_bottom_left",SECT); 1119 load_bool_setting(f,&pws->round_bottom_right,"round_bottom_right",SECT); 1120 load_bool_setting(f,&pws->round_tri,"round_tri",SECT); 1121 load_bool_setting(f,&pws->enable_bar_dip_button_part,"enable_bar_dip_button_part",SECT); 1122 load_bool_setting(f,&pws->enable_left_bar_dip,"enable_left_bar_dip",SECT); 1123 load_bool_setting(f,&pws->show_border_minimised,"show_border_minimised",SECT); 1124 load_bool_setting(f,&pws->enable_left_bar_dip_lower_part,"enable_left_bar_dip_lower_part",SECT); 1125 1126 load_float_setting(f,&pws->outer_maximised_alpha,"outer_maximised_alpha",SECT); 1127 load_float_setting(f,&pws->inner_maximised_alpha,"inner_maximised_alpha",SECT); 1128 load_float_setting(f,&pws->frame_radius,"frame_radius",SECT); 1129 load_float_setting(f,&pws->titlebar_radius,"titlebar_radius",SECT); 1130 load_float_setting(f,&pws->window_gap,"window_gap",SECT); 1131 load_int_setting(f,&pws->title_bar_dip_title_width,"title_bar_dip_title_width",SECT); 1132 load_int_setting(f,&pws->title_bar_dip_radius,"title_bar_dip_radius",SECT); 1133 load_int_setting(f,&pws->title_bar_dip_button_width,"title_bar_dip_button_width",SECT); 1134 load_int_setting(f,&pws->minimised_border,"minimised_border",SECT); 1135 load_int_setting(f,&pws->left_bar_dip_radius,"left_bar_dip_radius",SECT); 1136 load_int_setting(f,&pws->left_bar_dip_offset,"left_bar_dip_offset",SECT); 1137 1138 load_bool_setting(f,&pws->pixmaps.titlebarpart_enabled,"pixmaps_titlebarpart_enabled",SECT); 1139 load_bool_setting(f,&pws->pixmaps.buttonpart_enabled,"pixmaps_buttonpart_enabled",SECT); 1140 load_bool_setting(f,&pws->pixmaps.titlebarpart_repeat_enabled,"pixmaps_titlebarpart_repeat_enabled",SECT); 1141 load_bool_setting(f,&pws->pixmaps.buttonpart_repeat_enabled,"pixmaps_buttonpart_repeat_enabled",SECT); 1142 load_bool_setting(f,&pws->pixmaps.titlebar_repeat_enabled,"pixmaps_titlebar_repeat_enabled",SECT); 1143 load_bool_setting(f,&pws->pixmaps.titlebar_enabled,"pixmaps_titlebar_enabled",SECT); 1144 1145 pws->pixmaps.titlebar_surface = cairo_image_surface_create_from_png(make_filename("pixmaps","titlebarpart","png")); 1146 pws->pixmaps.titlebar_surface_buttons = cairo_image_surface_create_from_png(make_filename("pixmaps","buttonpart","png")); 1147 pws->pixmaps.titlebar_surface_large = cairo_image_surface_create_from_png(make_filename("pixmaps","titlebar","png")); 1148 1149 load_bool_setting(f,&((private_fs *)ws->fs_act->engine_fs)->gradient_repeat_enabled,"active_gradient_repeat_enabled" ,SECT); 1150 load_bool_setting(f,&((private_fs *)ws->fs_inact->engine_fs)->gradient_repeat_enabled,"inactive_gradient_repeat_enabled" ,SECT); 1151 1152 1153 load_float_setting(f,&((private_fs *)ws->fs_act->engine_fs)->gradient_repeat_height,"active_gradient_repeat_height" ,SECT); 1154 load_float_setting(f,&((private_fs *)ws->fs_inact->engine_fs)->gradient_repeat_height,"inactive_gradient_repeat_height" ,SECT); 1155 1156 1157 load_bool_setting(f,&((private_fs *)ws->fs_act->engine_fs)->gradient_repeat_direction_vertical,"active_gradient_repeat_direction_vertical" ,SECT); 1158 load_bool_setting(f,&((private_fs *)ws->fs_inact->engine_fs)->gradient_repeat_direction_vertical,"inactive_gradient_repeat_direction_vertical" ,SECT); 1159 1160 load_bool_setting(f,&((private_fs *)ws->fs_act->engine_fs)->gradient_repeat_direction_diagonal,"active_gradient_repeat_direction_diagonal" ,SECT); 1161 load_bool_setting(f,&((private_fs *)ws->fs_inact->engine_fs)->gradient_repeat_direction_diagonal,"inactive_gradient_repeat_direction_diagonal" ,SECT); 1162 1163 1164 1165 } 1166 void init_engine(window_settings * ws) 1167 { 1168 private_fs * pfs; 1169 private_ws * pws; 1170 1171 pws = malloc(sizeof(private_ws)); 1172 ws->engine_ws = pws; 1173 bzero(pws,sizeof(private_ws)); 1174 pws->round_top_left=TRUE; 1175 pws->round_top_right=TRUE; 1176 pws->round_bottom_left=TRUE; 1177 pws->round_bottom_right=TRUE; 1178 pws->round_tri=TRUE; 1179 pws->enable_maximised_colors=TRUE; 1180 pws->show_border_minimised=TRUE; 1181 pws->enable_bar_dip_button_part=TRUE; 1182 pws->show_border_maximised=TRUE; 1183 pws->enable_title_bar_dip=TRUE; 1184 pws->minimised_border=0; 1185 pws->enable_left_bar_dip=TRUE; 1186 pws->enable_left_bar_dip_lower_part=TRUE; 1187 pws->left_bar_dip_offset=0; 1188 pws->frame_radius=5.0; 1189 pws->titlebar_radius=5.0; 1190 pws->left_bar_dip_radius=7.5; 1191 pws->gradient_repeat_disabled_maximised=TRUE; 1192 pws->pixmaps.buttonpart_repeat_enabled=FALSE; 1193 pws->pixmaps.buttonpart_enabled = FALSE; 1194 pws->pixmaps.titlebarpart_repeat_enabled=FALSE; 1195 pws->pixmaps.titlebarpart_enabled = FALSE; 1196 pws->window_gap=15.0; 1197 pws->title_bar_dip_title_width=500; 1198 pws->title_bar_dip_button_width=100; 1199 pws->title_bar_dip_radius=20; 1200 pws->outer_maximised_alpha=0.5; 1201 pws->inner_maximised_alpha=0.5; 1202 pws->outer_maximised_color.r=40.0; 1203 pws->outer_maximised_color.g=40.0; 1204 pws->outer_maximised_color.b=40.0; 1205 pws->inner_maximised_color.r=40.0; 1206 pws->inner_maximised_color.g=40.0; 1207 pws->inner_maximised_color.b=40.0; 1208 1209 1210 1211 1212 pfs = malloc(sizeof(private_fs)); 1213 ws->fs_act->engine_fs = pfs; 1214 bzero(pfs,sizeof(private_fs)); 1215 ACOLOR(inner,0.8,0.8,0.8,0.5); 1216 ACOLOR(outer,0.8,0.8,0.8,0.5); 1217 ACOLOR(title_inner,0.8,0.8,0.8,0.8); 1218 ACOLOR(title_outer,0.8,0.8,0.8,0.8); 1219 ACOLOR(window_highlight,1.0,1.0,1.0,0.8); 1220 ACOLOR(window_shadow,0.6,0.6,0.6,0.8); 1221 ACOLOR(window_frame_halo,1.0,1.0,1.0,1.0); 1222 ACOLOR(separator_line,0.0,0.0,0.0,0.0); 1223 ACOLOR(contents_highlight,1.0,1.0,1.0,0.8); 1224 ACOLOR(contents_shadow,0.6,0.6,0.6,0.8); 1225 ACOLOR(contents_halo,0.8,0.8,0.8,0.8); 1226 1227 pfs = malloc(sizeof(private_fs)); 1228 bzero(pfs,sizeof(private_fs)); 1229 ws->fs_inact->engine_fs = pfs; 1230 1231 1232 ACOLOR(inner,0.8,0.8,0.8,0.3); 1233 ACOLOR(outer,0.8,0.8,0.8,0.3); 1234 ACOLOR(title_inner,0.8,0.8,0.8,0.6); 1235 ACOLOR(title_outer,0.8,0.8,0.8,0.6); 1236 ACOLOR(window_highlight,1.0,1.0,1.0,0.7); 1237 ACOLOR(window_shadow,0.6,0.6,0.6,0.7); 1238 ACOLOR(window_frame_halo,1.0,1.0,1.0,1.0); 1239 ACOLOR(separator_line,0.0,0.0,0.0,0.0); 1240 ACOLOR(contents_highlight,1.0,1.0,1.0,0.8); 1241 ACOLOR(contents_shadow,0.6,0.6,0.6,0.8); 1242 ACOLOR(contents_halo,0.8,0.8,0.8,0.8); 1243 } 1244 void fini_engine(window_settings * ws) 1245 { 1246 free(ws->fs_act->engine_fs); 1247 free(ws->fs_inact->engine_fs); 1248 } 1249 #if 0 1250 void layout_layout_frame(GtkWidget * vbox) 1251 { 1252 GtkWidget * hbox; 1253 GtkWidget * junk; 1254 1255 1256 1257 hbox = gtk_hbox_new(FALSE,2); 1258 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1259 gtk_box_pack_startC(hbox,gtk_label_new(_("Border Gap")),FALSE,FALSE,0); 1260 junk = scaler_new(0,20,0.5); 1261 gtk_box_pack_startC(hbox,junk,TRUE,TRUE,0); 1262 register_setting(junk,ST_FLOAT,SECT,"window_gap"); 1263 1264 hbox = gtk_hbox_new(FALSE,2); 1265 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1266 junk = gtk_check_button_new_with_label(_("Show Border when maximised?")); 1267 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1268 register_setting(junk,ST_BOOL,SECT,"show_border_maximised"); 1269 1270 hbox = gtk_hbox_new(FALSE,2); 1271 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1272 junk = gtk_check_button_new_with_label(_("Show when minimised?")); 1273 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1274 register_setting(junk,ST_BOOL,SECT,"show_border_minimised"); 1275 1276 hbox = gtk_hbox_new(FALSE,2); 1277 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1278 gtk_box_pack_startC(hbox,gtk_label_new(_("Minimised Border Size")),FALSE,FALSE,0); 1279 junk = scaler_new(0,30,1); 1280 gtk_box_pack_startC(hbox,junk,TRUE,TRUE,0); 1281 register_setting(junk,ST_FLOAT,SECT,"minimised_border"); 1282 1283 1284 1285 1286 } 1287 1288 void layout_left_bar_frame(GtkWidget * vbox) 1289 { 1290 GtkWidget * hbox; 1291 GtkWidget * junk; 1292 1293 hbox = gtk_hbox_new(FALSE,2); 1294 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1295 junk = gtk_check_button_new_with_label(_("Enable Left Bar Dip?")); 1296 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1297 register_setting(junk,ST_BOOL,SECT,"enable_left_bar_dip"); 1298 1299 hbox = gtk_hbox_new(FALSE,2); 1300 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1301 gtk_box_pack_startC(hbox,gtk_label_new(_("Left Bar Radius")),FALSE,FALSE,0); 1302 junk = scaler_new(0,20,1); 1303 gtk_box_pack_startC(hbox,junk,TRUE,TRUE,0); 1304 register_setting(junk,ST_INT,SECT,"left_bar_dip_radius"); 1305 1306 hbox = gtk_hbox_new(FALSE,2); 1307 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1308 junk = gtk_check_button_new_with_label(_("Enable Lower Bulge? (Useless at the moment, but will be used soon)")); 1309 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1310 register_setting(junk,ST_BOOL,SECT,"enable_left_bar_dip_lower_part"); 1311 1312 hbox = gtk_hbox_new(FALSE,2); 1313 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1314 gtk_box_pack_startC(hbox,gtk_label_new(_("Top Corner Offset (%)")),FALSE,FALSE,0); 1315 junk = scaler_new(0,90,1); 1316 gtk_box_pack_startC(hbox,junk,TRUE,TRUE,0); 1317 register_setting(junk,ST_INT,SECT,"left_bar_dip_offset"); 1318 1319 1320 1321 1322 1323 } 1324 1325 1326 void layout_title_bar_frame(GtkWidget * vbox) 1327 { 1328 GtkWidget * hbox; 1329 GtkWidget * junk; 1330 1331 1332 1333 hbox = gtk_hbox_new(FALSE,2); 1334 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1335 junk = gtk_check_button_new_with_label(_("Enable Title Bar Dip?")); 1336 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1337 register_setting(junk,ST_BOOL,SECT,"enable_title_bar_dip"); 1338 1339 hbox = gtk_hbox_new(FALSE,2); 1340 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1341 junk = gtk_check_button_new_with_label(_("Enable Button Part?")); 1342 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1343 register_setting(junk,ST_BOOL,SECT,"enable_bar_dip_button_part"); 1344 1345 hbox = gtk_hbox_new(FALSE,2); 1346 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1347 gtk_box_pack_startC(hbox,gtk_label_new(_("Title Part Width")),FALSE,FALSE,0); 1348 junk = scaler_new(80,800,1); 1349 gtk_box_pack_startC(hbox,junk,TRUE,TRUE,0); 1350 register_setting(junk,ST_INT,SECT,"title_bar_dip_title_width"); 1351 1352 hbox = gtk_hbox_new(FALSE,2); 1353 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1354 gtk_box_pack_startC(hbox,gtk_label_new(_("Button Part Width)")),FALSE,FALSE,0); 1355 junk = scaler_new(10,800,1); 1356 gtk_box_pack_startC(hbox,junk,TRUE,TRUE,0); 1357 register_setting(junk,ST_INT,SECT,"title_bar_dip_button_width"); 1358 1359 hbox = gtk_hbox_new(FALSE,2); 1360 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1361 gtk_box_pack_startC(hbox,gtk_label_new(_("Dip Corners Radius)")),FALSE,FALSE,0); 1362 junk = scaler_new(1,20,1); 1363 gtk_box_pack_startC(hbox,junk,TRUE,TRUE,0); 1364 register_setting(junk,ST_INT,SECT,"title_bar_dip_radius"); 1365 1366 hbox = gtk_hbox_new(FALSE,2); 1367 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1368 junk = gtk_check_button_new_with_label(_("Round Inside Corners As well?")); 1369 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1370 register_setting(junk,ST_BOOL,SECT,"round_tri"); 1371 1372 1373 } 1374 1375 void layout_maximised_colors(GtkWidget * vbox) 1376 { 1377 GtkWidget * hbox; 1378 GtkWidget * junk; 1379 GtkWidget * scroller; 1380 GtkWidget * w; 1381 1382 hbox = gtk_hbox_new(FALSE,2); 1383 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1384 1385 junk = gtk_check_button_new_with_label(_("Enable Different Maximised Colors?")); 1386 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1387 register_setting(junk,ST_BOOL,SECT,"enable_maximised_colors"); 1388 1389 junk = gtk_check_button_new_with_label(_("Turn Off repeating gradients when maximised?")); 1390 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1391 register_setting(junk,ST_BOOL,SECT,"gradient_repeat_disabled_maximised"); 1392 1393 scroller = gtk_scrolled_window_new(NULL,NULL); 1394 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroller), 1395 GTK_POLICY_NEVER,GTK_POLICY_AUTOMATIC); 1396 gtk_box_pack_startC(vbox,scroller,TRUE,TRUE,0); 1397 table_new(3,FALSE,FALSE); 1398 1399 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroller),GTK_WIDGET(get_current_table())); 1400 1401 make_labels("Colors"); 1402 table_append_separator(); 1403 1404 1405 w = gtk_label_new(_("Outer Frame Blend")); 1406 table_append(w,FALSE); 1407 w = gtk_color_button_new(); 1408 table_append(w,FALSE); 1409 register_setting(w,ST_COLOR,SECT,"outer_maximised_color"); 1410 w = scaler_new(0.0,1.0,0.01); 1411 table_append(w,TRUE); 1412 register_setting(w,ST_FLOAT,SECT,"outer_maximised_alpha"); 1413 1414 w = gtk_label_new(_("Inner Frame Blend")); 1415 table_append(w,FALSE); 1416 w = gtk_color_button_new(); 1417 table_append(w,FALSE); 1418 register_setting(w,ST_COLOR,SECT,"inner_maximised_color"); 1419 w = scaler_new(0.0,1.0,0.01); 1420 table_append(w,TRUE); 1421 register_setting(w,ST_FLOAT,SECT,"inner_maximised_alpha"); 1422 1423 1424 1425 } 1426 1427 void layout_corners_frame(GtkWidget * vbox) 1428 { 1429 GtkWidget * hbox; 1430 GtkWidget * junk; 1431 1432 junk = gtk_check_button_new_with_label(_("Round Top Left Corner?")); 1433 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1434 register_setting(junk,ST_BOOL,SECT,"round_top_left"); 1435 1436 junk = gtk_check_button_new_with_label(_("Round Top Right Corner")); 1437 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1438 register_setting(junk,ST_BOOL,SECT,"round_top_right"); 1439 1440 junk = gtk_check_button_new_with_label(_("Round Bottom Left Corner")); 1441 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1442 register_setting(junk,ST_BOOL,SECT,"round_bottom_left"); 1443 1444 junk = gtk_check_button_new_with_label(_("Round Bottom Right Corner")); 1445 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1446 register_setting(junk,ST_BOOL,SECT,"round_bottom_right"); 1447 1448 hbox = gtk_hbox_new(FALSE,2); 1449 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1450 gtk_box_pack_startC(hbox,gtk_label_new(_("Frame Rounding Radius")),FALSE,FALSE,0); 1451 junk = scaler_new(0,20,0.5); 1452 gtk_box_pack_startC(hbox,junk,TRUE,TRUE,0); 1453 register_setting(junk,ST_FLOAT,SECT,"frame_radius"); 1454 1455 hbox = gtk_hbox_new(FALSE,2); 1456 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1457 gtk_box_pack_startC(hbox,gtk_label_new(_("Titlebar Rounding Radius")),FALSE,FALSE,0); 1458 1459 junk = scaler_new(0,20,0.5); 1460 gtk_box_pack_startC(hbox,junk,TRUE,TRUE,0); 1461 register_setting(junk,ST_FLOAT,SECT,"titlebar_radius"); 1462 1463 } 1464 1465 void add_border_slider(gchar * text,gchar * key,gint value) 1466 { 1467 GtkWidget * w; 1468 table_append(gtk_label_new(text),FALSE); 1469 1470 w = scaler_new(0,20,1); 1471 table_append(w,TRUE); 1472 gtk_range_set_value(GTK_RANGE(w),value); 1473 register_setting(w,ST_INT,"borders",key); 1474 } 1475 1476 1477 1478 void my_engine_settings(GtkWidget * hbox, gboolean active) 1479 { 1480 GtkWidget * vbox; 1481 GtkWidget * scroller; 1482 GtkWidget * junk; 1483 1484 1485 vbox = gtk_vbox_new(FALSE,2); 1486 gtk_box_pack_startC(hbox,vbox,TRUE,TRUE,0); 1487 gtk_box_pack_startC(vbox,gtk_label_new(active?"Active Window":"Inactive Window"),FALSE,FALSE,0); 1488 gtk_box_pack_startC(vbox,gtk_hseparator_new(),FALSE,FALSE,0); 1489 scroller = gtk_scrolled_window_new(NULL,NULL); 1490 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroller), 1491 GTK_POLICY_NEVER,GTK_POLICY_AUTOMATIC); 1492 gtk_box_pack_startC(vbox,scroller,TRUE,TRUE,0); 1493 1494 table_new(3,FALSE,FALSE); 1495 1496 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroller),GTK_WIDGET(get_current_table())); 1497 1498 make_labels(_("Colors")); 1499 table_append_separator(); 1500 ACAV(_("Outer Frame Blend"),"outer",SECT); 1501 ACAV(_("Inner Frame Blend"),"inner",SECT); 1502 table_append_separator(); 1503 ACAV(_("Outer Titlebar Blend"),"title_outer",SECT); 1504 ACAV(_("Inner Titlebar Blend"),"title_inner",SECT); 1505 1506 table_append_separator(); 1507 1508 junk = gtk_label_new(_("Repeat Gradient?")); 1509 table_append(junk,FALSE); 1510 junk = gtk_label_new(""); 1511 table_append(junk,FALSE); 1512 junk = gtk_check_button_new(); 1513 table_append(junk,TRUE); 1514 gchar * key_line; 1515 key_line = g_strdup_printf(active?"active_%s":"inactive_%s","gradient_repeat_enabled"); 1516 register_setting(junk,ST_BOOL,SECT,key_line); 1517 1518 junk = gtk_label_new(_("Vertical Repeat?")); 1519 table_append(junk,FALSE); 1520 junk = gtk_label_new(""); 1521 table_append(junk,FALSE); 1522 junk = gtk_check_button_new(); 1523 table_append(junk,TRUE); 1524 key_line = g_strdup_printf(active?"active_%s":"inactive_%s","gradient_repeat_direction_vertical"); 1525 register_setting(junk,ST_BOOL,SECT,key_line); 1526 1527 junk = gtk_label_new(_("Diagonal Repeat?")); 1528 table_append(junk,FALSE); 1529 junk = gtk_label_new(""); 1530 table_append(junk,FALSE); 1531 junk = gtk_check_button_new(); 1532 table_append(junk,TRUE); 1533 key_line = g_strdup_printf(active?"active_%s":"inactive_%s","gradient_repeat_direction_diagonal"); 1534 register_setting(junk,ST_BOOL,SECT,key_line); 1535 1536 1537 junk = gtk_label_new(_("Repeat Frequency")); 1538 table_append(junk,FALSE); 1539 junk = gtk_label_new(""); 1540 table_append(junk,FALSE); 1541 junk = scaler_new(0,20,0.5); 1542 table_append(junk,TRUE); 1543 key_line = g_strdup_printf(active?"active_%s":"inactive_%s","gradient_repeat_height"); 1544 register_setting(junk,ST_FLOAT,SECT,key_line); 1545 table_append_separator(); 1546 1547 1548 1549 ACAV(_("Titlebar Separator"),"separator_line",SECT); 1550 table_append_separator(); 1551 ACAV(_("Frame Outline"),"window_frame_halo",SECT); 1552 ACAV(_("Frame Highlight"),"window_highlight",SECT); 1553 ACAV(_("Frame Shadow"),"window_shadow",SECT); 1554 table_append_separator(); 1555 ACAV(_("Contents Outline"),"contents_halo",SECT); 1556 ACAV(_("Contents Highlight"),"contents_highlight",SECT); 1557 ACAV(_("Contents Shadow"),"contents_shadow",SECT); 1558 } 1559 void layout_engine_colors(GtkWidget * vbox) 1560 { 1561 GtkWidget * hbox; 1562 hbox = gtk_hbox_new(FALSE,2); 1563 gtk_box_pack_startC(vbox,hbox,TRUE,TRUE,0); 1564 my_engine_settings(hbox,TRUE); 1565 gtk_box_pack_startC(hbox,gtk_vseparator_new(),FALSE,FALSE,0); 1566 my_engine_settings(hbox,FALSE); 1567 } 1568 1569 void layout_pixmaps(GtkWidget * vbox) { 1570 GtkWidget * file_selector; 1571 GtkFileFilter * filter; 1572 GtkWidget * junk; 1573 GtkWidget * title_bar_image; 1574 //SettingItem * set; 1575 GtkWidget * hbox; 1576 1577 /////////////////////// 1578 1579 junk = gtk_check_button_new_with_label(_("Enable Title Part Pixmap?")); 1580 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1581 register_setting(junk,ST_BOOL,SECT,"pixmaps_titlebarpart_enabled"); 1582 1583 junk = gtk_check_button_new_with_label(_("Repeat Title Part Pixmap?")); 1584 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1585 register_setting(junk,ST_BOOL,SECT,"pixmaps_titlebarpart_repeat_enabled"); 1586 1587 hbox = gtk_hbox_new(FALSE,2); 1588 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1589 1590 junk = gtk_label_new(_("Title Bar Part Pixmap")); 1591 gtk_box_pack_startC(hbox,junk,FALSE,FALSE,0); 1592 1593 file_selector=gtk_file_chooser_button_new(_("Choose Titlebar Part Pixmap"), 1594 GTK_FILE_CHOOSER_ACTION_OPEN); 1595 gtk_box_pack_startC(hbox,file_selector,TRUE,TRUE,0); 1596 filter = gtk_file_filter_new(); 1597 gtk_file_filter_add_pattern(filter,"*.png"); 1598 gtk_file_filter_set_name(filter,"PNG Images"); 1599 gtk_file_filter_add_pixbuf_formats(filter); 1600 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(file_selector),filter); 1601 1602 title_bar_image = gtk_image_new(); 1603 1604 /* set =*/ register_img_file_setting(file_selector,"pixmaps","titlebarpart",GTK_IMAGE(title_bar_image)); 1605 /////////////////////////// 1606 gtk_box_pack_startC(hbox,gtk_vseparator_new(),FALSE,FALSE,0); 1607 /////////////////////////// 1608 1609 junk = gtk_check_button_new_with_label(_("Enable Button Part Pixmap?")); 1610 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1611 register_setting(junk,ST_BOOL,SECT,"pixmaps_buttonpart_enabled"); 1612 1613 junk = gtk_check_button_new_with_label(_("Repeat Button Part Pixmap?")); 1614 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1615 register_setting(junk,ST_BOOL,SECT,"pixmaps_buttonpart_repeat_enabled"); 1616 1617 1618 hbox = gtk_hbox_new(FALSE,2); 1619 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1620 1621 junk = gtk_label_new(_("Button Part Pixmap")); 1622 gtk_box_pack_startC(hbox,junk,FALSE,FALSE,0); 1623 1624 file_selector=gtk_file_chooser_button_new(_("Choose Button Part Pixmap"), 1625 GTK_FILE_CHOOSER_ACTION_OPEN); 1626 gtk_box_pack_startC(hbox,file_selector,TRUE,TRUE,0); 1627 filter = gtk_file_filter_new(); 1628 gtk_file_filter_add_pattern(filter,"*.png"); 1629 gtk_file_filter_set_name(filter,"PNG Images"); 1630 gtk_file_filter_add_pixbuf_formats(filter); 1631 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(file_selector),filter); 1632 1633 title_bar_image = gtk_image_new(); 1634 1635 /*set =*/ register_img_file_setting(file_selector,"pixmaps","buttonpart",GTK_IMAGE(title_bar_image)); 1636 /////////////////////////////////////// 1637 gtk_box_pack_startC(hbox,gtk_vseparator_new(),FALSE,FALSE,0); 1638 /////////////////////////// 1639 1640 junk = gtk_check_button_new_with_label(_("Enable Titlebar Pixmap?")); 1641 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1642 register_setting(junk,ST_BOOL,SECT,"pixmaps_titlebar_enabled"); 1643 1644 junk = gtk_check_button_new_with_label(_("Repeat Titlebar Pixmap?")); 1645 gtk_box_pack_startC(vbox,junk,FALSE,FALSE,0); 1646 register_setting(junk,ST_BOOL,SECT,"pixmaps_titlebar_repeat_enabled"); 1647 1648 1649 hbox = gtk_hbox_new(FALSE,2); 1650 gtk_box_pack_startC(vbox,hbox,FALSE,FALSE,0); 1651 1652 junk = gtk_label_new(_("Titlebar Pixmap")); 1653 gtk_box_pack_startC(hbox,junk,FALSE,FALSE,0); 1654 1655 file_selector=gtk_file_chooser_button_new(_("Choose Titlebar Pixmap"), 1656 GTK_FILE_CHOOSER_ACTION_OPEN); 1657 gtk_box_pack_startC(hbox,file_selector,TRUE,TRUE,0); 1658 filter = gtk_file_filter_new(); 1659 gtk_file_filter_add_pattern(filter,"*.png"); 1660 gtk_file_filter_set_name(filter,"PNG Images"); 1661 gtk_file_filter_add_pixbuf_formats(filter); 1662 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(file_selector),filter); 1663 1664 title_bar_image = gtk_image_new(); 1665 1666 /* set =*/ register_img_file_setting(file_selector,"pixmaps","titlebar",GTK_IMAGE(title_bar_image)); 1667 /////////////////////////////////////// 1668 1669 } 1670 void layout_engine_settings(GtkWidget * vbox) 1671 { 1672 GtkWidget * note; 1673 note = gtk_notebook_new(); 1674 gtk_box_pack_startC(vbox,note,TRUE,TRUE,0); 1675 layout_engine_colors(build_notebook_page(_("Active/Inactive"),note)); 1676 layout_maximised_colors(build_notebook_page(_("Maximised"),note)); 1677 layout_corners_frame(build_notebook_page(_("Corners"),note)); 1678 layout_layout_frame(build_notebook_page(_("Border Layout"),note)); 1679 layout_title_bar_frame(build_notebook_page(_("Title Bar"),note)); 1680 layout_left_bar_frame(build_notebook_page(_("Left Bar"),note)); 1681 layout_pixmaps(build_notebook_page(_("Pixmaps"),note)); 1682 } 1683 #endif