1 This file is some notes about how different widgets are drawn.
13 GtkWidget::interior_focus = TRUE
14 GtkWidget::focus_width = 1
15 GtkWidget::focus_padding = 0
16 GtkOptionMenu::indicator_size = { 7, 13 }
17 GtkOptionMenu::indicator_spacing = { 7, 5, 2, 2 }
21 GtkContainer::border_width = 0
25 CHILD_LEFT_SPACING = 5
26 CHILD_RIGHT_SPACING = 1
28 CHILD_BOTTOM_SPACING = 1
31 I) interior_focus = TRUE
33 +--------------------------------------------------+
35 | +----------------------------------------------+ |
36 | |\\\\\\\\\\\\\\\\\\\\ H ///////////////////////| |
37 | |\+------------------------------------------+/| |
39 | |\| +------------------------------+ |/| |
40 | |\| |################ D ###########| L |/| |
41 | |\| |#+--------------------------+#| |/| |
43 | |\| |#| +----------------------+ |#| +-----+ |/| |
44 | |\| |#| | | |#| | /#\ | |/| |
45 | |\| |#| | | |#| | === | |/| |
46 |A|B|C|D|E| Child |F|D|G| IxJ |O|B|A|
47 | |/| |#| | | |#| | === | |\| |
48 | |/| |#| | | |#| | \#/ | |\| |
49 | |/| |#| +----------------------+ |#| +-----+ |\| |
51 | |/| |#+---------------------------#| |\| |
52 | |/| |################ D ###########| N |\| |
53 | |/| +------------------------------+ |\| |
55 | |/+------------------------------------------+\| |
56 | |//////////////////// H \\\\\\\\\\\\\\\\\\\\\\\| |
57 | +----------------------------------------------+ |
59 +--------------------------------------------------+
61 A: GtkContainer::border_width
63 C: GtkWidget::focus_pad
64 D: GtkWidget::focus_width
66 F: CHILD_RIGHT_SPACING
67 G: GtkOptionMenu::indicator_spacing::left
69 I: GtkOptionMenu::indicator_size::width
70 J: GtkOptionMenu::indicator_size::height
72 L: GtkOptionMenu::indicator_spacing::top + GtkWidget::focus_width + GtkWidget::focus_pad + CHILD_TOP_SPACING
73 M: CHILD_BOTTOM_SPACING
74 N: GtkOptionMenu::indicator_spacing::bottom + GtkWidget::focus_width + GtkWidget::focus_pad + CHILD_BOTTOM_SPACING
75 O: GtkOptionMenu::indicator_spacing::right
78 II) interior_focus = FALSE
80 +--------------------------------------------------+
82 | +----------------------------------------------+ |
83 | |#################### B #######################| |
84 | |#+------------------------------------------+#| |
86 | |#| +--------------------------------------+ |#| |
87 | |#| |\\\\\\\\\\\\\\\\ H ///////////////////| |#| |
88 | |#| |\+----------------------------------+/| |#| |
89 | |#| |\| K L |/| |#| |
90 | |#| |\| +----------------------+ +-----+ |/| |#| |
91 | |#| |\| | | | /#\ | |/| |#| |
92 | |#| |\| | | | === | |/| |#| |
93 |A|B|C|D|E| Child |F| IxJ |G|D|C|B|A|
94 | |#| |/| | | | === | |\| |#| |
95 | |#| |/| | | | \#/ | |\| |#| |
96 | |#| |/| +----------------------+ +-----+ |\| |#| |
97 | |#| |/| M N |\| |#| |
98 | |#| |/+----------------------------------+\| |#| |
99 | |#| |//////////////// H \\\\\\\\\\\\\\\\\\\| |#| |
100 | |#| +--------------------------------------+ |#| |
102 | |#+------------------------------------------+#| |
103 | |#################### B #######################| |
104 | +----------------------------------------------+ |
106 +--------------------------------------------------+
109 A: GtkContainer::border_width
110 B: GtkWidget::focus_width
111 C: GtkWidget::focus_padding
113 E: CHILD_LEFT_SPACING
114 F: CHILD_RIGHT_SPACING + GtkOptionMenu::indicator_spacing::left
115 G: GtkOptionMenu::indicator_spacing::right
117 I: GtkOptionMenu::indicator_size::width
118 J: GtkOptionMenu::indicator_size::height
120 L: CHILD_TOP_SPACING + GtkOptionMenu::indicator_spacing::top
121 M: CHILD_BOTTOM_SPACING
122 N: CHILD_BOTTOM_SPACING + GtkOptionMenu::indicator_spacing::bottom
125 III) interior_focus = FALSE, !HAVE_FOCUS
127 +--------------------------------------------------+
129 | +----------------------------------------------+ |
130 | |\\\\\\\\\\\\\\\\\\\\ H ///////////////////////| |
131 | |\+------------------------------------------+/| |
137 | |\| +----------------------+ +-----+ |/| |
138 | |\| | | | /#\ | |/| |
139 | |\| | | | === | |/| |
140 |A|D| E| Child |F| IxJ |G |D|A|
141 | |/| | | | === | |\| |
142 | |/| | | | \#/ | |\| |
143 | |/| +----------------------+ +-----+ |\| |
149 | |/+------------------------------------------+\| |
150 | |//////////////////// H \\\\\\\\\\\\\\\\\\\\\\\| |
151 | +----------------------------------------------+ |
153 +--------------------------------------------------+
156 A: GtkContainer::border_width
157 B: GtkWidget::focus_width
158 C: GtkWidget::focus_padding
160 E: CHILD_LEFT_SPACING + GtkWidget::focus_width + GtkWidget::focus_padding
161 F: CHILD_RIGHT_SPACING + GtkOptionMenu::in+icator_spacing::left
162 G: GtkOptionMenu::indicator_spacing::right + GtkWidget::focus_width + GtkWidget::focus_padding
164 I: GtkOptionMenu::indicator_size::width
165 J: GtkOptionMenu::indicator_size::height
166 K: CHILD_TOP_SPACING + GtkWidget::focus_width + GtkWidget::focus_padding
167 L: CHILD_TOP_SPACING + GtkOptionMenu::indicator_spacing::top + GtkWidget::focus_width + GtkWidget::focus_padding
168 M: CHILD_BOTTOM_SPACING + GtkWidget::focus_width + GtkWidget::focus_padding
169 N: CHILD_BOTTOM_SPACING + GtkOptionMenu::indicator_spacing::bottom + GtkWidget::focus_width + GtkWidget::focus_padding
173 =====================
177 =====================
181 GtkWidget::interior_focus = TRUE
182 GtkWidget::focus_width = 1
183 GtkWidget::focus_padding = 0
184 GtkButton::default_border = { 1, 1, 1, 1 };
185 GtkButton::default_outside_border = { 0, 0, 0, 0 };
186 GtkButton::child_displacement_x = 0;
187 GtkButton::child_displacement_y = 0;
191 GtkContainer::border_width = 0
197 I) HAS_DEFAULT && (!GtkWidget::interior-focus || !HAVE_FOCUS)
199 +----------------------------------------------+
201 | +------------------------------------------+ |
202 | |@@@@@@@@@@@@@@@@@@@ I @@@@@@@@@@@@@@@@@@@@| |
203 | |@+--------------------------------------+@| |
204 | |@|\\\\\\\\\\\\\\\\\ J //////////////////|@| |
205 | |@|\+----------------------------------+/|@| |
207 | |@|\| +------------------------------+ |/|@| |
208 | |@|\| |############# F ##############| |/|@| |
209 | |@|\| |#+--------------------------+#| |/|@| |
210 | |@|\| |#| L |#| |/|@| |
211 | |@|\| |#| +----------------------+ |#| |/|@| |
212 | |@|\| |#| | | |#| |/|@| |
213 | |@|\| |#| | | |#| |/|@| |
214 |A|B|D|E|F|G| Child |M|F|E|D|C|A|
215 | |@|/| |#| | | |#| |\|@| |
216 | |@|/| |#| | | |#| |\|@| |
217 | |@|/| |#| +----------------------+ |#| |\|@| |
218 | |@|/| |#| N |#| |\|@| |
219 | |@|/| |#+--------------------------+#| |\|@| |
220 | |@|/| |############# F ##############| |\|@| |
221 | |@|/| +------------------------------+ |\|@| |
223 | |@|/+----------------------------------+\|@| |
224 | |@|///////////////// J \\\\\\\\\\\\\\\\\\|@| |
225 | |@+--------------------------------------+@| |
226 | |@@@@@@@@@@@@@@@@@@@ K @@@@@@@@@@@@@@@@@@@@| |
227 | +------------------------------------------+ |
229 +----------------------------------------------+
231 A: GtkContainer::border-width
232 B: GtkButton::default-border::left
233 C: GtkButton::default-border::right
235 E: GtkWidget::focus-padding
236 F: GtkWidget::focus-line-width
237 G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0)
238 I: GtkButton::default-border::top
240 K: GtkButton::default-border::bottom
241 L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0)
242 M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0)
243 N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0)
246 II) !HAS_DEFAULT && (!GtkWidget::interior-focus || !HAVE_FOCUS)
248 +----------------------------------------------+
252 | +--------------------------------------+ |
253 | |\\\\\\\\\\\\\\\\\ J //////////////////| |
254 | |\+----------------------------------+/| |
256 | |\| +------------------------------+ |/| |
257 | |\| |############# F ##############| |/| |
258 | |\| |#+--------------------------+#| |/| |
259 | |\| |#| L |#| |/| |
260 | |\| |#| +----------------------+ |#| |/| |
261 | |\| |#| | | |#| |/| |
262 | |\| |#| | | |#| |/| |
263 | B |D|E|F|G| Child |M|F|E|D| C |
264 | |/| |#| | | |#| |\| |
265 | |/| |#| | | |#| |\| |
266 | |/| |#| +----------------------+ |#| |\| |
267 | |/| |#| N |#| |\| |
268 | |/| |#+--------------------------+#| |\| |
269 | |/| |############# F ##############| |\| |
270 | |/| +------------------------------+ |\| |
272 | |/+----------------------------------+\| |
273 | |///////////////// J \\\\\\\\\\\\\\\\\\| |
274 | +--------------------------------------+ |
278 +----------------------------------------------+
283 B: GtkContainer::border-width + GtkButton::default-outside-border::left
284 C: GtkContainer::border-width + GtkButton::default-outside-border::right
286 E: GtkWidget::focus-padding
287 F: GtkWidget::focus-line-width
288 G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0) +
289 (GtkButton::default-outside-border - GtkButton::default-outside-border)::left
290 I: GtkContainer::border-width + GtkButton::default-outside-border::top
292 K: GtkContainer::border-width + GtkButton::default-outside-border::bottom
293 L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0) +
294 (GtkButton::default-outside-border - GtkButton::default-outside-border)::top
295 M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0) +
296 (GtkButton::default-outside-border - GtkButton::default-outside-border)::right
297 N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0) +
298 (GtkButton::default-outside-border - GtkButton::default-outside-border)::bottom
303 B: GtkContainer::border-width
304 C: GtkContainer::border-width
306 E: GtkWidget::focus-padding
307 F: GtkWidget::focus-line-width
308 G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0)
309 I: GtkContainer::border-width
311 K: GtkContainer::border-width
312 L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0)
313 M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0)
314 N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0)
319 III) HAS_DEFAULT && (GtkWidget::interior-focus && HAVE_FOCUS)
321 +----------------------------------------------+
323 | +------------------------------------------+ |
324 | |@@@@@@@@@@@@@@@@@@@ I @@@@@@@@@@@@@@@@@@@@| |
325 | |@+--------------------------------------+@| |
326 | |@|################# F ##################|@| |
327 | |@|#+----------------------------------+#|@| |
329 | |@|#| +------------------------------+ |#|@| |
330 | |@|#| |\\\\\\\\\\\\\ J //////////////| |#|@| |
331 | |@|#| |\+--------------------------+/| |#|@| |
332 | |@|#| |\| L |/| |#|@| |
333 | |@|#| |\| +----------------------+ |/| |#|@| |
334 | |@|#| |\| | | |/| |#|@| |
335 | |@|#| |\| | | |/| |#|@| |
336 |A|B|F|E|D|G| Child |M|D|E|F|C|A|
337 | |@|#| |/| | | |\| |#|@| |
338 | |@|#| |/| | | |\| |#|@| |
339 | |@|#| |/| +----------------------+ |\| |#|@| |
340 | |@|#| |/| N |\| |#|@| |
341 | |@|#| |/+--------------------------+\| |#|@| |
342 | |@|#| |///////////// J \\\\\\\\\\\\\\| |#|@| |
343 | |@|#| +------------------------------+ |#|@| |
345 | |@|#+----------------------------------+#|@| |
346 | |@|################# F ##################|@| |
347 | |@+--------------------------------------+@| |
348 | |@@@@@@@@@@@@@@@@@@@ K @@@@@@@@@@@@@@@@@@@@| |
349 | +------------------------------------------+ |
351 +----------------------------------------------+
353 A: GtkContainer::border-width
354 B: GtkButton::default-border::left
355 C: GtkButton::default-border::right
357 E: GtkWidget::focus-padding
358 F: GtkWidget::focus-line-width
359 G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0)
360 I: GtkButton::default-border::top
362 K: GtkButton::default-border::bottom
363 L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0)
364 M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0)
365 N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0)
368 IV) !HAS_DEFAULT && (GtkWidget::interior-focus && HAVE_FOCUS)
370 +----------------------------------------------+
374 | +--------------------------------------+ |
375 | |################# J ##################| |
376 | |#+----------------------------------+#| |
378 | |#| +------------------------------+ |#| |
379 | |#| |\\\\\\\\\\\\\ F //////////////| |#| |
380 | |#| |\+--------------------------+/| |#| |
381 | |#| |\| L |/| |#| |
382 | |#| |\| +----------------------+ |/| |#| |
383 | |#| |\| | | |/| |#| |
384 | |#| |\| | | |/| |#| |
385 | B |D|E|F|G| Child |M|F|E|D| C |
386 | |#| |/| | | |\| |#| |
387 | |#| |/| | | |\| |#| |
388 | |#| |/| +----------------------+ |\| |#| |
389 | |#| |/| N |\| |#| |
390 | |#| |/+--------------------------+\| |#| |
391 | |#| |///////////// F \\\\\\\\\\\\\\| |#| |
392 | |#| +------------------------------+ |#| |
394 | |#+----------------------------------+#| |
395 | |################# J ##################| |
396 | +--------------------------------------+ |
400 +----------------------------------------------+
405 B: GtkContainer::border-width + GtkButton::default-outside-border::left
406 C: GtkContainer::border-width + GtkButton::default-outside-border::right
408 E: GtkWidget::focus-padding
409 F: GtkWidget::focus-line-width
410 G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0) +
411 (GtkButton::default-outside-border - GtkButton::default-outside-border)::left
412 I: GtkContainer::border-width + GtkButton::default-outside-border::top
414 K: GtkContainer::border-width + GtkButton::default-outside-border::bottom
415 L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0) +
416 (GtkButton::default-outside-border - GtkButton::default-outside-border)::top
417 M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0) +
418 (GtkButton::default-outside-border - GtkButton::default-outside-border)::right
419 N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0) +
420 (GtkButton::default-outside-border - GtkButton::default-outside-border)::bottom
425 B: GtkContainer::border-width
426 C: GtkContainer::border-width
428 E: GtkWidget::focus-padding
429 F: GtkWidget::focus-line-width
430 G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0)
431 I: GtkContainer::border-width
433 K: GtkContainer::border-width
434 L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0)
435 M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0)
436 N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0)
439 ======================
443 ======================
445 Note: This is the draw_indicator=TRUE case; draw_indicator=FALSE
450 GtkWidget::interior_focus = TRUE
451 GtkWidget::focus_width = 1
452 GtkWidget::focus_padding = 0
453 GtkButton::indicator-size = 13
454 GtkButton::indicator-spacing = 2
458 GtkContainer::border_width = 0
466 +-------------------------------------------+
468 | G +------------------------+ |
469 | |########### D ##########| |
470 | +------------+ |#+--------------------+#| |
472 | | | |#| +----------------+ |#| |
474 |A| BxB |C|D|E| Child |E|#|F|
476 | | | |#| +----------------+ |#| |
478 | +------------+ |#+--------------------+#| |
479 | |########### D ##########| |
480 | G +------------------------+ |
482 +-------------------------------------------+
484 A: GtkContainer::border-width + GtkCheckButton::indicator-spacing
485 B: GtkCheckButton::indicator-size
486 C: 2 * GtkCheckButton::indicator-spacing
487 D: GtkWidget::focus-line-width
488 E: GtkWidget::focus-padding
489 F: GtkContainer::border-width
490 G: GtkConainer::border-width + GtkCheckButton::indicator-spacing
494 +-------------------------------------------+
496 | +---------------------------------------+ |
497 | |################ D ####################| |
498 | |#+-----------------------------------+#| |
500 | |#| +------------+ +---------------+ |#| |
503 |A|D|F| BxB |C | Child |E|D|A|
506 | |#| +------------+ +---------------+ |#| |
508 | |#+-----------------------------------+#| |
509 | |################ D ####################| |
510 | +---------------------------------------+ |
512 +-------------------------------------------+
514 A: GtkContainer::border-width
515 B: GtkCheckButton::indicator-size
516 C: 2 * GtkCheckButton::indicator-spacing
517 D: GtkWidget::focus-line-width
518 E: GtkWidget::focus-padding
519 F: GtkWidget::focus-padding + GtkCheckButton::indicator-spacing
520 G: GtkWidget::focus-padding + GtkCheckButton::indicator-spacing
530 GtkWidget::interior_focus = TRUE
531 GtkWidget::focus_width = 1
532 GtkWidget::focus_padding = 0
536 GtkContainer::border_width = 0
546 +--------------------------------------+
547 |\\\\\\\\\\\\\\\\\ B //////////////////|
548 |\+----------------------------------+/|
550 |\| +------------------------------+ |/|
556 |\| +------------------------------+ |/|
558 |\+----------------------------------+/|
559 |///////////////// B \\\\\\\\\\\\\\\\\/|
560 +--------------------------------------+
568 +------------------------------------------+
569 |####################C#####################|
570 |#+--------------------------------------+#|
571 |#|\\\\\\\\\\\\\\\\\ B //////////////////|#|
572 |#|\+----------------------------------+/|#|
574 |#|\| +------------------------------+ |/|#|
580 |#|\| +------------------------------+ |/|#|
582 |#|\+----------------------------------+/|#|
583 |#|///////////////// B \\\\\\\\\\\\\\\\\/|#|
584 |#+--------------------------------------+#|
585 |####################C#####################|
586 +------------------------------------------+
590 C: GtkWidget::focus-line-width
591 D: INNER_BORDER + (HAVE_FOCUS ? 0 : GtkWidget::focus-line-width
593 Note - effect here for !interior_focus is that bevel moves in
594 by focus-line-width when entry gains focus
603 GtkWidget::focus_line_width
604 GtkWidget::focus_padding
605 GtkExpander::expander_size
606 GtkExpander::expander_spacing
609 GtkContainer::border_width
612 if (GTK_WIDGET_VISIBLE (bin->child) && interior_focus)
614 +-------------------------------------+
616 | +---------+-----------------------+ |
617 | | C |##########E############| |
618 | | +-----+ |#+-------------------+#| |
620 | | | | |#| +---------------+ |#| |
621 |A|C| BxB |C|E|F| label_widget |F|E|A|
622 | | | | |#| +---------------+ |#| |
624 | | +-----+ |#+-------------------+#| |
625 | | C |##########E############| |
626 | +---------+-----------------------+ |
628 | +---------------------------------+ |
636 | +---------------------------------+ |
638 +-------------------------------------+
640 A: GtkContainer::border_width
641 B: GtkExpander::expander_size
642 C: GtkExpander::expander_spacing
643 D: GtkExpander::spacing
644 E: GtkWidget::focus_line_width
645 F: GtkWidget::focus_padding
647 if (GTK_WIDGET_VISIBLE (bin->child) && !interior_focus)
649 +-------------------------------------------+
651 | +---------------------------------------+ |
652 | |##################E####################| |
653 | |#+-----------------------------------+#| |
655 | |#| +---------+---------------------+ |#| |
657 | |#| | +-----+ | | |#| |
658 |A|E|F|C| BxB |C| label_widget |F|E|A|
659 | |#| | +-----+ | | |#| |
661 | |#| +---------+---------------------+ |#| |
663 | |#+-----------------------------------+#| |
664 | |##################E####################| |
665 | +---------------------------------------+ |
667 | +---------------------------------------+ |
675 | +---------------------------------------+ |
677 +-------------------------------------------+
679 A: GtkContainer::border_width
680 B: GtkExpander::expander_size
681 C: GtkExpander::expander_spacing
682 D: GtkExpander::spacing
683 E: GtkWidget::focus_line_width
684 F: GtkWidget::focus_padding
686 if (!GTK_WIDGET_VISIBLE (bin->child) && interior_focus)
688 +-------------------------------------+
690 | +---------+-----------------------+ |
691 | | C |##########E############| |
692 | | +-----+ |#+-------------------+#| |
694 | | | | |#| +---------------+ |#| |
695 |A|C| BxB |C|E|F| label_widget |F|E|A|
696 | | | | |#| +---------------+ |#| |
698 | | +-----+ |#+-------------------+#| |
699 | | C |##########E############| |
700 | +---------+-----------------------+ |
702 +-------------------------------------+
704 A: GtkContainer::border_width
705 B: GtkExpander::expander_size
706 C: GtkExpander::expander_spacing
707 E: GtkWidget::focus_line_width
708 F: GtkWidget::focus_padding
710 if (!GTK_WIDGET_VISIBLE (bin->child) && !interior_focus)
712 +-------------------------------------------+
714 | +---------------------------------------+ |
715 | |##################E####################| |
716 | |#+-----------------------------------+#| |
718 | |#| +---------+---------------------+ |#| |
720 | |#| | +-----+ | | |#| |
721 |A|E|F|C| BxB |C| label_widget |F|E|A|
722 | |#| | +-----+ | | |#| |
724 | |#| +---------+---------------------+ |#| |
726 | |#+-----------------------------------+#| |
727 | |##################E####################| |
728 | +---------------------------------------+ |
730 +-------------------------------------------+
732 A: GtkContainer::border_width
733 B: GtkExpander::expander_size
734 C: GtkExpander::expander_spacing
735 E: GtkWidget::focus_line_width
736 F: GtkWidget::focus_padding