This file is some notes about how different widgets are drawn. ============= GtkMenu ============= +----------------------------------------------------------------------------+ | A | | +------------------------------------------------------------------------+ | | |############################# C ########################################| | | |# D #| | | |# +-------------------------------------------------------------------+#| | | |# | |#| | | |# | |#| | | |# | |#| | | |# | Item 1 |#| | | |# | |#| | | |# | |#| | | |# | |#| | | |# | |#| | | |# | |#| | | |# +-------------------------------------------------------------------+#| | | |# +-------------------------------------------------------------------+#| | | |# | |#| | | |# | |#| | |A|B | |B|A| | |# | Item 2 |#| | | |# | |#| | | |# | |#| | | |# | |#| | | |# | |#| | | |# | |#| | | |# +-------------------------------------------------------------------+#| | | |# [...] #| | | |# +-------------------------------------------------------------------+#| | | |# | |#| | | |# | |#| | | |# | |#| | | |# | Item n |#| | | |# | |#| | | |# | |#| | | |# | |#| | | |# | |#| | | |# | |#| | | |# +-------------------------------------------------------------------+#| | | |# D #| | | |############################# C ########################################| | | +------------------------------------------------------------------------| | | A | +----------------------------------------------------------------------------+ A: GtkContainer::border_width B: xthickness C: ythickness D: vertical_padding ============= GtkMenuItem ============= +----------------------------------------------------------------------------+ | A | | +------------------------------------------------------------------------+ | | |############################# C ########################################| | | |#+-+------------+--+-------------------------------+--+-------------+-+#| | | |#| |\\\\\\\\\\\\| | /|\ |**| | |#| | | |#| |<------E------>| | |**| G | |#| | | |#| |\\\\\\\\\\\\| | | |**| | |#| | | |#| |\\\\\\\\\\\\| | | |**| >> | |#| | | |#| |\\\\\\\\\\\\| | | |**| >>>> | |#| | | |#| |\\\\\\\\\\\\| | | |**| >>>>>> | |#| | |A|B|D|\\\\\\\\\\\\| F| Child G |*H| >>>>>>>> |D|B|A| | |#| |\\\\\\\\\\\\| | | |**| >>>>>> | |#| | | |#| |\\\\\\\\\\\\| | | |**| >>>> | |#| | | |#| |\\\\\\\\\\\\| | | |**| >> | |#| | | |#| |\\\\\\\\\\\\| | | |**| | |#| | | |#| |\\\\\\\\\\\\| | | |**| | |#| | | |#| |\\\\\\\\\\\\| | \|/ |**| | |#| | | |#+-+------------+--+-------------------------------+--+-------------+-+#| | | |############################# C ########################################| | | +------------------------------------------------------------------------+ | | A | +----------------------------------------------------------------------------+ A: GtkContainer:border_width B: xthickness C: ythickness D: horizontal_padding E: toggle_size F: toggle_spacing G: Requested height of child (also used for width of arrow H: arrow_spacing spacing (when the item has a non-vertical submenu) ============= GtkOptionMenu: ============= Geometry parameters Style properties GtkWidget::interior_focus = TRUE GtkWidget::focus_width = 1 GtkWidget::focus_padding = 0 GtkOptionMenu::indicator_size = { 7, 13 } GtkOptionMenu::indicator_spacing = { 7, 5, 2, 2 } Properties GtkContainer::border_width = 0 #defines CHILD_LEFT_SPACING = 5 CHILD_RIGHT_SPACING = 1 CHILD_TOP_SPACING = 1 CHILD_BOTTOM_SPACING = 1 I) interior_focus = TRUE +--------------------------------------------------+ + A | | +----------------------------------------------+ | | |\\\\\\\\\\\\\\\\\\\\ H ///////////////////////| | | |\+------------------------------------------+/| | | |\| C |/| | | |\| +------------------------------+ |/| | | |\| |################ D ###########| L |/| | | |\| |#+--------------------------+#| |/| | | |\| |#| K |#| |/| | | |\| |#| +----------------------+ |#| +-----+ |/| | | |\| |#| | | |#| | /#\ | |/| | | |\| |#| | | |#| | === | |/| | |A|B|C|D|E| Child |F|D|G| IxJ |O|B|A| | |/| |#| | | |#| | === | |\| | | |/| |#| | | |#| | \#/ | |\| | | |/| |#| +----------------------+ |#| +-----+ |\| | | |/| |#| M |#| |\| | | |/| |#+---------------------------#| |\| | | |/| |################ D ###########| N |\| | | |/| +------------------------------+ |\| | | |/| C |\| | | |/+------------------------------------------+\| | | |//////////////////// H \\\\\\\\\\\\\\\\\\\\\\\| | | +----------------------------------------------+ | | A | +--------------------------------------------------+ A: GtkContainer::border_width B: xthickness C: GtkWidget::focus_pad D: GtkWidget::focus_width E: CHILD_LEFT_SPACING F: CHILD_RIGHT_SPACING G: GtkOptionMenu::indicator_spacing::left H: ythickness I: GtkOptionMenu::indicator_size::width J: GtkOptionMenu::indicator_size::height K: CHILD_TOP_SPACING L: GtkOptionMenu::indicator_spacing::top + GtkWidget::focus_width + GtkWidget::focus_pad + CHILD_TOP_SPACING M: CHILD_BOTTOM_SPACING N: GtkOptionMenu::indicator_spacing::bottom + GtkWidget::focus_width + GtkWidget::focus_pad + CHILD_BOTTOM_SPACING O: GtkOptionMenu::indicator_spacing::right II) interior_focus = FALSE +--------------------------------------------------+ + A | | +----------------------------------------------+ | | |#################### B #######################| | | |#+------------------------------------------+#| | | |#| C |#| | | |#| +--------------------------------------+ |#| | | |#| |\\\\\\\\\\\\\\\\ H ///////////////////| |#| | | |#| |\+----------------------------------+/| |#| | | |#| |\| K L |/| |#| | | |#| |\| +----------------------+ +-----+ |/| |#| | | |#| |\| | | | /#\ | |/| |#| | | |#| |\| | | | === | |/| |#| | |A|B|C|D|E| Child |F| IxJ |G|D|C|B|A| | |#| |/| | | | === | |\| |#| | | |#| |/| | | | \#/ | |\| |#| | | |#| |/| +----------------------+ +-----+ |\| |#| | | |#| |/| M N |\| |#| | | |#| |/+----------------------------------+\| |#| | | |#| |//////////////// H \\\\\\\\\\\\\\\\\\\| |#| | | |#| +--------------------------------------+ |#| | | |#| C |#| | | |#+------------------------------------------+#| | | |#################### B #######################| | | +----------------------------------------------+ | | A | +--------------------------------------------------+ A: GtkContainer::border_width B: GtkWidget::focus_width C: GtkWidget::focus_padding D: xthickness E: CHILD_LEFT_SPACING F: CHILD_RIGHT_SPACING + GtkOptionMenu::indicator_spacing::left G: GtkOptionMenu::indicator_spacing::right H: ythickness I: GtkOptionMenu::indicator_size::width J: GtkOptionMenu::indicator_size::height K: CHILD_TOP_SPACING L: CHILD_TOP_SPACING + GtkOptionMenu::indicator_spacing::top M: CHILD_BOTTOM_SPACING N: CHILD_BOTTOM_SPACING + GtkOptionMenu::indicator_spacing::bottom III) interior_focus = FALSE, !HAVE_FOCUS +--------------------------------------------------+ + A | | +----------------------------------------------+ | | |\\\\\\\\\\\\\\\\\\\\ H ///////////////////////| | | |\+------------------------------------------+/| | | |\| |/| | | |\| |/| | | |\| |/| | | |\| |/| | | |\| K L |/| | | |\| +----------------------+ +-----+ |/| | | |\| | | | /#\ | |/| | | |\| | | | === | |/| | |A|D| E| Child |F| IxJ |G |D|A| | |/| | | | === | |\| | | |/| | | | \#/ | |\| | | |/| +----------------------+ +-----+ |\| | | |/| M N |\| | | |/| |\| | | |/| |\| | | |/| |\| | | |/| |\| | | |/+------------------------------------------+\| | | |//////////////////// H \\\\\\\\\\\\\\\\\\\\\\\| | | +----------------------------------------------+ | | A | +--------------------------------------------------+ A: GtkContainer::border_width B: GtkWidget::focus_width C: GtkWidget::focus_padding D: xthickness E: CHILD_LEFT_SPACING + GtkWidget::focus_width + GtkWidget::focus_padding F: CHILD_RIGHT_SPACING + GtkOptionMenu::in+icator_spacing::left G: GtkOptionMenu::indicator_spacing::right + GtkWidget::focus_width + GtkWidget::focus_padding H: ythickness I: GtkOptionMenu::indicator_size::width J: GtkOptionMenu::indicator_size::height K: CHILD_TOP_SPACING + GtkWidget::focus_width + GtkWidget::focus_padding L: CHILD_TOP_SPACING + GtkOptionMenu::indicator_spacing::top + GtkWidget::focus_width + GtkWidget::focus_padding M: CHILD_BOTTOM_SPACING + GtkWidget::focus_width + GtkWidget::focus_padding N: CHILD_BOTTOM_SPACING + GtkOptionMenu::indicator_spacing::bottom + GtkWidget::focus_width + GtkWidget::focus_padding ===================== GtkButton ===================== NOTE: Due to a bug that is basically unfixable in a sufficiently compatible NOTE: way, the button gives the space requested for focus_width and NOTE: focus_padding to the child (in addition to the space requested by NOTE: the child), if the button is !CAN_FOCUS. Style properties GtkWidget::interior_focus = TRUE GtkWidget::focus_width = 1 GtkWidget::focus_padding = 0 GtkButton::default_border = { 1, 1, 1, 1 }; GtkButton::default_outside_border = { 0, 0, 0, 0 }; GtkButton::child_displacement_x = 0; GtkButton::child_displacement_y = 0; Properties GtkContainer::border_width = 0 #defines CHILD_SPACING 1 I) HAS_DEFAULT && (!GtkWidget::interior-focus || !HAVE_FOCUS) +----------------------------------------------+ | A | | +------------------------------------------+ | | |@@@@@@@@@@@@@@@@@@@ I @@@@@@@@@@@@@@@@@@@@| | | |@+--------------------------------------+@| | | |@|\\\\\\\\\\\\\\\\\ J //////////////////|@| | | |@|\+----------------------------------+/|@| | | |@|\| E |/|@| | | |@|\| +------------------------------+ |/|@| | | |@|\| |############# F ##############| |/|@| | | |@|\| |#+--------------------------+#| |/|@| | | |@|\| |#| L |#| |/|@| | | |@|\| |#| +----------------------+ |#| |/|@| | | |@|\| |#| | | |#| |/|@| | | |@|\| |#| | | |#| |/|@| | |A|B|D|E|F|G| Child |M|F|E|D|C|A| | |@|/| |#| | | |#| |\|@| | | |@|/| |#| | | |#| |\|@| | | |@|/| |#| +----------------------+ |#| |\|@| | | |@|/| |#| N |#| |\|@| | | |@|/| |#+--------------------------+#| |\|@| | | |@|/| |############# F ##############| |\|@| | | |@|/| +------------------------------+ |\|@| | | |@|/| E |\|@| | | |@|/+----------------------------------+\|@| | | |@|///////////////// J \\\\\\\\\\\\\\\\\\|@| | | |@+--------------------------------------+@| | | |@@@@@@@@@@@@@@@@@@@ K @@@@@@@@@@@@@@@@@@@@| | | +------------------------------------------+ | | A | +----------------------------------------------+ A: GtkContainer::border-width B: GtkButton::default-border::left C: GtkButton::default-border::right D: xthickness E: GtkWidget::focus-padding F: GtkWidget::focus-line-width G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0) I: GtkButton::default-border::top J: ythickness K: GtkButton::default-border::bottom L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0) M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0) N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0) II) !HAS_DEFAULT && (!GtkWidget::interior-focus || !HAVE_FOCUS) +----------------------------------------------+ | | | I | | | | +--------------------------------------+ | | |\\\\\\\\\\\\\\\\\ J //////////////////| | | |\+----------------------------------+/| | | |\| E |/| | | |\| +------------------------------+ |/| | | |\| |############# F ##############| |/| | | |\| |#+--------------------------+#| |/| | | |\| |#| L |#| |/| | | |\| |#| +----------------------+ |#| |/| | | |\| |#| | | |#| |/| | | |\| |#| | | |#| |/| | | B |D|E|F|G| Child |M|F|E|D| C | | |/| |#| | | |#| |\| | | |/| |#| | | |#| |\| | | |/| |#| +----------------------+ |#| |\| | | |/| |#| N |#| |\| | | |/| |#+--------------------------+#| |\| | | |/| |############# F ##############| |\| | | |/| +------------------------------+ |\| | | |/| E |\| | | |/+----------------------------------+\| | | |///////////////// J \\\\\\\\\\\\\\\\\\| | | +--------------------------------------+ | | | | K | | | +----------------------------------------------+ a) CAN_DEFAULT B: GtkContainer::border-width + GtkButton::default-outside-border::left C: GtkContainer::border-width + GtkButton::default-outside-border::right D: xthickness E: GtkWidget::focus-padding F: GtkWidget::focus-line-width G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0) + (GtkButton::default-outside-border - GtkButton::default-outside-border)::left I: GtkContainer::border-width + GtkButton::default-outside-border::top J: ythickness K: GtkContainer::border-width + GtkButton::default-outside-border::bottom L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0) + (GtkButton::default-outside-border - GtkButton::default-outside-border)::top M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0) + (GtkButton::default-outside-border - GtkButton::default-outside-border)::right N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0) + (GtkButton::default-outside-border - GtkButton::default-outside-border)::bottom b) !CAN_DEFAULT B: GtkContainer::border-width C: GtkContainer::border-width D: xthickness E: GtkWidget::focus-padding F: GtkWidget::focus-line-width G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0) I: GtkContainer::border-width J: ythickness K: GtkContainer::border-width L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0) M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0) N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0) III) HAS_DEFAULT && (GtkWidget::interior-focus && HAVE_FOCUS) +----------------------------------------------+ | A | | +------------------------------------------+ | | |@@@@@@@@@@@@@@@@@@@ I @@@@@@@@@@@@@@@@@@@@| | | |@+--------------------------------------+@| | | |@|################# F ##################|@| | | |@|#+----------------------------------+#|@| | | |@|#| E |#|@| | | |@|#| +------------------------------+ |#|@| | | |@|#| |\\\\\\\\\\\\\ J //////////////| |#|@| | | |@|#| |\+--------------------------+/| |#|@| | | |@|#| |\| L |/| |#|@| | | |@|#| |\| +----------------------+ |/| |#|@| | | |@|#| |\| | | |/| |#|@| | | |@|#| |\| | | |/| |#|@| | |A|B|F|E|D|G| Child |M|D|E|F|C|A| | |@|#| |/| | | |\| |#|@| | | |@|#| |/| | | |\| |#|@| | | |@|#| |/| +----------------------+ |\| |#|@| | | |@|#| |/| N |\| |#|@| | | |@|#| |/+--------------------------+\| |#|@| | | |@|#| |///////////// J \\\\\\\\\\\\\\| |#|@| | | |@|#| +------------------------------+ |#|@| | | |@|#| E |#|@| | | |@|#+----------------------------------+#|@| | | |@|################# F ##################|@| | | |@+--------------------------------------+@| | | |@@@@@@@@@@@@@@@@@@@ K @@@@@@@@@@@@@@@@@@@@| | | +------------------------------------------+ | | A | +----------------------------------------------+ A: GtkContainer::border-width B: GtkButton::default-border::left C: GtkButton::default-border::right D: xthickness E: GtkWidget::focus-padding F: GtkWidget::focus-line-width G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0) I: GtkButton::default-border::top J: ythickness K: GtkButton::default-border::bottom L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0) M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0) N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0) IV) !HAS_DEFAULT && (GtkWidget::interior-focus && HAVE_FOCUS) +----------------------------------------------+ | | | I | | | | +--------------------------------------+ | | |################# J ##################| | | |#+----------------------------------+#| | | |#| E |#| | | |#| +------------------------------+ |#| | | |#| |\\\\\\\\\\\\\ F //////////////| |#| | | |#| |\+--------------------------+/| |#| | | |#| |\| L |/| |#| | | |#| |\| +----------------------+ |/| |#| | | |#| |\| | | |/| |#| | | |#| |\| | | |/| |#| | | B |D|E|F|G| Child |M|F|E|D| C | | |#| |/| | | |\| |#| | | |#| |/| | | |\| |#| | | |#| |/| +----------------------+ |\| |#| | | |#| |/| N |\| |#| | | |#| |/+--------------------------+\| |#| | | |#| |///////////// F \\\\\\\\\\\\\\| |#| | | |#| +------------------------------+ |#| | | |#| E |#| | | |#+----------------------------------+#| | | |################# J ##################| | | +--------------------------------------+ | | | | K | | | +----------------------------------------------+ a) CAN_DEFAULT B: GtkContainer::border-width + GtkButton::default-outside-border::left C: GtkContainer::border-width + GtkButton::default-outside-border::right D: xthickness E: GtkWidget::focus-padding F: GtkWidget::focus-line-width G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0) + (GtkButton::default-outside-border - GtkButton::default-outside-border)::left I: GtkContainer::border-width + GtkButton::default-outside-border::top J: ythickness K: GtkContainer::border-width + GtkButton::default-outside-border::bottom L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0) + (GtkButton::default-outside-border - GtkButton::default-outside-border)::top M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0) + (GtkButton::default-outside-border - GtkButton::default-outside-border)::right N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0) + (GtkButton::default-outside-border - GtkButton::default-outside-border)::bottom b) !CAN_DEFAULT B: GtkContainer::border-width C: GtkContainer::border-width D: xthickness E: GtkWidget::focus-padding F: GtkWidget::focus-line-width G: CHILD_SPACING + (depressed ? GtkButton::child-displacement-x : 0) I: GtkContainer::border-width J: ythickness K: GtkContainer::border-width L: CHILD_SPACING + (depressed ? GtkButton::child-displacement-y : 0) M: CHILD_SPACING - (depressed ? GtkButton::child-displacement-x : 0) N: CHILD_SPACING - (depressed ? GtkButton::child-displacement-y : 0) ====================== GtkCheckButton ====================== Note: This is the draw_indicator=TRUE case; draw_indicator=FALSE is like GtkButton) Style properties GtkWidget::interior_focus = TRUE GtkWidget::focus_width = 1 GtkWidget::focus_padding = 0 GtkButton::indicator-size = 13 GtkButton::indicator-spacing = 2 Properties GtkContainer::border_width = 0 #defines CHILD_SPACING 1 interior_focus +-------------------------------------------+ | F | | G +------------------------+ | | |########### D ##########| | | +------------+ |#+--------------------+#| | | | | |#| E |#| | | | | |#| +----------------+ |#| | | | | |#| | | |#| | |A| BxB |C|D|E| Child |E|#|F| | | | |#| | | |#| | | | | |#| +----------------+ |#| | | | | |#| E |#| | | +------------+ |#+--------------------+#| | | |########### D ##########| | | G +------------------------+ | | F | +-------------------------------------------+ A: GtkContainer::border-width + GtkCheckButton::indicator-spacing B: GtkCheckButton::indicator-size C: 2 * GtkCheckButton::indicator-spacing D: GtkWidget::focus-line-width E: GtkWidget::focus-padding F: GtkContainer::border-width G: GtkConainer::border-width + GtkCheckButton::indicator-spacing !interior_focus +-------------------------------------------+ | A | | +---------------------------------------+ | | |################ D ####################| | | |#+-----------------------------------+#| | | |#| G E |#| | | |#| +------------+ +---------------+ |#| | | |#| | | | | |#| | | |#| | | | | |#| | |A|D|F| BxB |C | Child |E|D|A| | |#| | | | | |#| | | |#| | | | | |#| | | |#| +------------+ +---------------+ |#| | | |#| G E |#| | | |#+-----------------------------------+#| | | |################ D ####################| | | +---------------------------------------+ | | A | +-------------------------------------------+ A: GtkContainer::border-width B: GtkCheckButton::indicator-size C: 2 * GtkCheckButton::indicator-spacing D: GtkWidget::focus-line-width E: GtkWidget::focus-padding F: GtkWidget::focus-padding + GtkCheckButton::indicator-spacing G: GtkWidget::focus-padding + GtkCheckButton::indicator-spacing =============== GtkEntry =============== Style properties GtkWidget::interior_focus = TRUE GtkWidget::focus_width = 1 GtkWidget::focus_padding = 0 Properties GtkContainer::border_width = 0 #defines INNER_BORDER 2 interior_focus +--------------------------------------+ |\\\\\\\\\\\\\\\\\ B //////////////////| |\+----------------------------------+/| |\| D |/| |\| +------------------------------+ |/| |\| | | |/| |\| | | |/| |A|D| |D|A| |\| | | |/| |\| | | |/| |\| +------------------------------+ |/| |\| D |/| |\+----------------------------------+/| |///////////////// B \\\\\\\\\\\\\\\\\/| +--------------------------------------+ A: xthickness B: ythickness D: INNER_BORDER !interior_focus +------------------------------------------+ |####################C#####################| |#+--------------------------------------+#| |#|\\\\\\\\\\\\\\\\\ B //////////////////|#| |#|\+----------------------------------+/|#| |#|\| D |/|#| |#|\| +------------------------------+ |/|#| |#|\| | | |/|#| |#|\| | | |/|#| |C|A|D| |D|A|C| |#|\| | | |/|#| |#|\| | | |/|#| |#|\| +------------------------------+ |/|#| |#|\| D |/|#| |#|\+----------------------------------+/|#| |#|///////////////// B \\\\\\\\\\\\\\\\\/|#| |#+--------------------------------------+#| |####################C#####################| +------------------------------------------+ A: xthickness B: ythickness C: GtkWidget::focus-line-width D: INNER_BORDER + (HAVE_FOCUS ? 0 : GtkWidget::focus-line-width Note - effect here for !interior_focus is that bevel moves in by focus-line-width when entry gains focus =============== GtkExpander =============== Style properties GtkWidget::focus_line_width GtkWidget::focus_padding GtkExpander::expander_size GtkExpander::expander_spacing Properties GtkContainer::border_width GtkExpander::spacing if (GTK_WIDGET_VISIBLE (bin->child) && interior_focus) +-------------------------------------+ | A | | +---------+-----------------------+ | | | C |##########E############| | | | +-----+ |#+-------------------+#| | | | | | |#| F |#| | | | | | |#| +---------------+ |#| | |A|C| BxB |C|E|F| label_widget |F|E|A| | | | | |#| +---------------+ |#| | | | | | |#| F |#| | | | +-----+ |#+-------------------+#| | | | C |##########E############| | | +---------+-----------------------+ | | | D | | | +---------------------------------+ | | | | | | | | | | | | | |A| bin->child |A| | | | | | | | | | | | | | +---------------------------------+ | | A | +-------------------------------------+ A: GtkContainer::border_width B: GtkExpander::expander_size C: GtkExpander::expander_spacing D: GtkExpander::spacing E: GtkWidget::focus_line_width F: GtkWidget::focus_padding if (GTK_WIDGET_VISIBLE (bin->child) && !interior_focus) +-------------------------------------------+ | A | | +---------------------------------------+ | | |##################E####################| | | |#+-----------------------------------+#| | | |#| F |#| | | |#| +---------+---------------------+ |#| | | |#| | C | | |#| | | |#| | +-----+ | | |#| | |A|E|F|C| BxB |C| label_widget |F|E|A| | |#| | +-----+ | | |#| | | |#| | C | | |#| | | |#| +---------+---------------------+ |#| | | |#| F |#| | | |#+-----------------------------------+#| | | |##################E####################| | | +---------------------------------------+ | | | D | | | +---------------------------------------+ | | | | | | | | | | | | | |A| bin->child |A| | | | | | | | | | | | | | +---------------------------------------+ | | A | +-------------------------------------------+ A: GtkContainer::border_width B: GtkExpander::expander_size C: GtkExpander::expander_spacing D: GtkExpander::spacing E: GtkWidget::focus_line_width F: GtkWidget::focus_padding if (!GTK_WIDGET_VISIBLE (bin->child) && interior_focus) +-------------------------------------+ | A | | +---------+-----------------------+ | | | C |##########E############| | | | +-----+ |#+-------------------+#| | | | | | |#| F |#| | | | | | |#| +---------------+ |#| | |A|C| BxB |C|E|F| label_widget |F|E|A| | | | | |#| +---------------+ |#| | | | | | |#| F |#| | | | +-----+ |#+-------------------+#| | | | C |##########E############| | | +---------+-----------------------+ | | A | +-------------------------------------+ A: GtkContainer::border_width B: GtkExpander::expander_size C: GtkExpander::expander_spacing E: GtkWidget::focus_line_width F: GtkWidget::focus_padding if (!GTK_WIDGET_VISIBLE (bin->child) && !interior_focus) +-------------------------------------------+ | A | | +---------------------------------------+ | | |##################E####################| | | |#+-----------------------------------+#| | | |#| F |#| | | |#| +---------+---------------------+ |#| | | |#| | C | | |#| | | |#| | +-----+ | | |#| | |A|E|F|C| BxB |C| label_widget |F|E|A| | |#| | +-----+ | | |#| | | |#| | C | | |#| | | |#| +---------+---------------------+ |#| | | |#| F |#| | | |#+-----------------------------------+#| | | |##################E####################| | | +---------------------------------------+ | | A | +-------------------------------------------+ A: GtkContainer::border_width B: GtkExpander::expander_size C: GtkExpander::expander_spacing E: GtkWidget::focus_line_width F: GtkWidget::focus_padding