Replace hardcoded values for tab-overlap and tab-curvature with style

2006-01-12  Matthias Clasen  <mclasen@redhat.com>

	* gtk/gtknotebook.c: Replace hardcoded values for tab-overlap and
	tab-curvature with style properties.  (#325282, Alexander Nedotsukov)
This commit is contained in:
Matthias Clasen
2006-01-12 21:31:55 +00:00
committed by Matthias Clasen
parent bef8f3e46c
commit dda636ee77
3 changed files with 84 additions and 34 deletions

View File

@ -1,5 +1,8 @@
2006-01-12 Matthias Clasen <mclasen@redhat.com> 2006-01-12 Matthias Clasen <mclasen@redhat.com>
* gtk/gtknotebook.c: Replace hardcoded values for tab-overlap and
tab-curvature with style properties. (#325282, Alexander Nedotsukov)
* gtk/gtktextview.c (gtk_text_view_commit_text) * gtk/gtktextview.c (gtk_text_view_commit_text)
(gtk_text_view_delete_from_cursor, gtk_text_view_backspace): (gtk_text_view_delete_from_cursor, gtk_text_view_backspace):
Reset the virtual cursor position. (#326003, Evert Verhellen) Reset the virtual cursor position. (#326003, Evert Verhellen)

View File

@ -1,5 +1,8 @@
2006-01-12 Matthias Clasen <mclasen@redhat.com> 2006-01-12 Matthias Clasen <mclasen@redhat.com>
* gtk/gtknotebook.c: Replace hardcoded values for tab-overlap and
tab-curvature with style properties. (#325282, Alexander Nedotsukov)
* gtk/gtktextview.c (gtk_text_view_commit_text) * gtk/gtktextview.c (gtk_text_view_commit_text)
(gtk_text_view_delete_from_cursor, gtk_text_view_backspace): (gtk_text_view_delete_from_cursor, gtk_text_view_backspace):
Reset the virtual cursor position. (#326003, Evert Verhellen) Reset the virtual cursor position. (#326003, Evert Verhellen)

View File

@ -39,11 +39,9 @@
#include "gtkalias.h" #include "gtkalias.h"
#define TAB_OVERLAP 2 #define ARROW_SIZE 12
#define TAB_CURVATURE 1 #define ARROW_SPACING 0
#define ARROW_SIZE 12 #define SCROLL_DELAY_FACTOR 5
#define ARROW_SPACING 0
#define SCROLL_DELAY_FACTOR 5
enum { enum {
@ -585,7 +583,40 @@ gtk_notebook_class_init (GtkNotebookClass *class)
P_("Display the standard forward arrow button"), P_("Display the standard forward arrow button"),
TRUE, TRUE,
GTK_PARAM_READABLE)); GTK_PARAM_READABLE));
/**
* GtkNotebook:tab-overlap:
*
* The "tab-overlap" property defines size of tab overlap
* area.
*
* Since: 2.10
*/
gtk_widget_class_install_style_property (widget_class,
g_param_spec_int ("tab-overlap",
P_("Tab overlap"),
P_("Size of tab overlap area"),
G_MININT,
G_MAXINT,
2,
GTK_PARAM_READABLE));
/**
* GtkNotebook:tab-curvature:
*
* The "tab-curvature" property defines size of tab curvature.
*
* Since: 2.10
*/
gtk_widget_class_install_style_property (widget_class,
g_param_spec_int ("tab-curvature",
P_("Tab curvature"),
P_("Size of tab curvature"),
0,
G_MAXINT,
1,
GTK_PARAM_READABLE));
notebook_signals[SWITCH_PAGE] = notebook_signals[SWITCH_PAGE] =
g_signal_new (I_("switch_page"), g_signal_new (I_("switch_page"),
@ -1195,8 +1226,14 @@ gtk_notebook_size_request (GtkWidget *widget,
gboolean switch_page = FALSE; gboolean switch_page = FALSE;
gint vis_pages; gint vis_pages;
gint focus_width; gint focus_width;
gint tab_overlap;
gint tab_curvature;
gtk_widget_style_get (widget, "focus-line-width", &focus_width, NULL); gtk_widget_style_get (widget,
"focus-line-width", &focus_width,
"tab-overlap", &tab_overlap,
"tab-curvature", &tab_curvature,
NULL);
widget->requisition.width = 0; widget->requisition.width = 0;
widget->requisition.height = 0; widget->requisition.height = 0;
@ -1299,8 +1336,8 @@ gtk_notebook_size_request (GtkWidget *widget,
widget->requisition.width < tab_width) widget->requisition.width < tab_width)
tab_height = MAX (tab_height, ARROW_SIZE); tab_height = MAX (tab_height, ARROW_SIZE);
padding = 2 * (TAB_CURVATURE + focus_width + padding = 2 * (tab_curvature + focus_width +
notebook->tab_hborder) - TAB_OVERLAP; notebook->tab_hborder) - tab_overlap;
tab_max += padding; tab_max += padding;
while (children) while (children)
{ {
@ -1326,10 +1363,10 @@ gtk_notebook_size_request (GtkWidget *widget,
if (notebook->homogeneous && !notebook->scrollable) if (notebook->homogeneous && !notebook->scrollable)
widget->requisition.width = MAX (widget->requisition.width, widget->requisition.width = MAX (widget->requisition.width,
vis_pages * tab_max + vis_pages * tab_max +
TAB_OVERLAP); tab_overlap);
else else
widget->requisition.width = MAX (widget->requisition.width, widget->requisition.width = MAX (widget->requisition.width,
tab_width + TAB_OVERLAP); tab_width + tab_overlap);
widget->requisition.height += tab_height; widget->requisition.height += tab_height;
break; break;
@ -1342,8 +1379,8 @@ gtk_notebook_size_request (GtkWidget *widget,
widget->requisition.height < tab_height) widget->requisition.height < tab_height)
tab_width = MAX (tab_width, ARROW_SPACING + 2 * ARROW_SIZE); tab_width = MAX (tab_width, ARROW_SPACING + 2 * ARROW_SIZE);
padding = 2 * (TAB_CURVATURE + focus_width + padding = 2 * (tab_curvature + focus_width +
notebook->tab_vborder) - TAB_OVERLAP; notebook->tab_vborder) - tab_overlap;
tab_max += padding; tab_max += padding;
while (children) while (children)
@ -1373,17 +1410,17 @@ gtk_notebook_size_request (GtkWidget *widget,
if (notebook->homogeneous && !notebook->scrollable) if (notebook->homogeneous && !notebook->scrollable)
widget->requisition.height = widget->requisition.height =
MAX (widget->requisition.height, MAX (widget->requisition.height,
vis_pages * tab_max + TAB_OVERLAP); vis_pages * tab_max + tab_overlap);
else else
widget->requisition.height = widget->requisition.height =
MAX (widget->requisition.height, MAX (widget->requisition.height,
tab_height + TAB_OVERLAP); tab_height + tab_overlap);
if (!notebook->homogeneous || notebook->scrollable) if (!notebook->homogeneous || notebook->scrollable)
vis_pages = 1; vis_pages = 1;
widget->requisition.height = MAX (widget->requisition.height, widget->requisition.height = MAX (widget->requisition.height,
vis_pages * tab_max + vis_pages * tab_max +
TAB_OVERLAP); tab_overlap);
break; break;
} }
} }
@ -3156,10 +3193,13 @@ gtk_notebook_pages_allocate (GtkNotebook *notebook)
gboolean is_rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL && gboolean is_rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL &&
(tab_pos == GTK_POS_TOP || tab_pos == GTK_POS_BOTTOM)); (tab_pos == GTK_POS_TOP || tab_pos == GTK_POS_BOTTOM));
gint memo_x; gint memo_x;
gint tab_overlap;
if (!notebook->show_tabs || !notebook->children || !notebook->cur_page) if (!notebook->show_tabs || !notebook->children || !notebook->cur_page)
return; return;
gtk_widget_style_get (widget, "tab-overlap", &tab_overlap, NULL);
child_allocation.x = widget->allocation.x + container->border_width; child_allocation.x = widget->allocation.x + container->border_width;
child_allocation.y = widget->allocation.y + container->border_width; child_allocation.y = widget->allocation.y + container->border_width;
@ -3212,12 +3252,12 @@ gtk_notebook_pages_allocate (GtkNotebook *notebook)
tab_space += page->requisition.width; tab_space += page->requisition.width;
} }
if (tab_space > if (tab_space >
allocation->width - 2 * container->border_width - TAB_OVERLAP) allocation->width - 2 * container->border_width - tab_overlap)
{ {
showarrow = TRUE; showarrow = TRUE;
page = focus_tab->data; page = focus_tab->data;
tab_space = allocation->width - TAB_OVERLAP - tab_space = allocation->width - tab_overlap -
page->requisition.width - 2 * container->border_width; page->requisition.width - 2 * container->border_width;
if (notebook->has_after_previous) if (notebook->has_after_previous)
tab_space -= ARROW_SPACING + ARROW_SIZE; tab_space -= ARROW_SPACING + ARROW_SIZE;
@ -3246,12 +3286,12 @@ gtk_notebook_pages_allocate (GtkNotebook *notebook)
tab_space += page->requisition.height; tab_space += page->requisition.height;
} }
if (tab_space > if (tab_space >
(allocation->height - 2 * container->border_width - TAB_OVERLAP)) (allocation->height - 2 * container->border_width - tab_overlap))
{ {
showarrow = TRUE; showarrow = TRUE;
page = focus_tab->data; page = focus_tab->data;
tab_space = allocation->height tab_space = allocation->height
- TAB_OVERLAP - 2 * container->border_width - tab_overlap - 2 * container->border_width
- page->requisition.height; - page->requisition.height;
if (notebook->has_after_previous || notebook->has_after_next) if (notebook->has_after_previous || notebook->has_after_next)
tab_space -= ARROW_SPACING + ARROW_SIZE; tab_space -= ARROW_SPACING + ARROW_SIZE;
@ -3426,7 +3466,7 @@ gtk_notebook_pages_allocate (GtkNotebook *notebook)
} }
tab_space -= allocation->height; tab_space -= allocation->height;
} }
tab_space += 2 * container->border_width + TAB_OVERLAP; tab_space += 2 * container->border_width + tab_overlap;
tab_space *= -1; tab_space *= -1;
notebook->first_tab = gtk_notebook_search_page (notebook, NULL, notebook->first_tab = gtk_notebook_search_page (notebook, NULL,
STEP_NEXT, TRUE); STEP_NEXT, TRUE);
@ -3477,14 +3517,14 @@ gtk_notebook_pages_allocate (GtkNotebook *notebook)
case GTK_POS_TOP: case GTK_POS_TOP:
case GTK_POS_BOTTOM: case GTK_POS_BOTTOM:
child_allocation.width = (page->requisition.width + child_allocation.width = (page->requisition.width +
TAB_OVERLAP + delta); tab_overlap + delta);
if (is_rtl) if (is_rtl)
child_allocation.x -= child_allocation.width; child_allocation.x -= child_allocation.width;
break; break;
case GTK_POS_LEFT: case GTK_POS_LEFT:
case GTK_POS_RIGHT: case GTK_POS_RIGHT:
child_allocation.height = (page->requisition.height + child_allocation.height = (page->requisition.height +
TAB_OVERLAP + delta); tab_overlap + delta);
break; break;
} }
@ -3495,13 +3535,13 @@ gtk_notebook_pages_allocate (GtkNotebook *notebook)
case GTK_POS_TOP: case GTK_POS_TOP:
case GTK_POS_BOTTOM: case GTK_POS_BOTTOM:
if (!is_rtl) if (!is_rtl)
child_allocation.x += child_allocation.width - TAB_OVERLAP; child_allocation.x += child_allocation.width - tab_overlap;
else else
child_allocation.x += TAB_OVERLAP; child_allocation.x += tab_overlap;
break; break;
case GTK_POS_LEFT: case GTK_POS_LEFT:
case GTK_POS_RIGHT: case GTK_POS_RIGHT:
child_allocation.y += child_allocation.height - TAB_OVERLAP; child_allocation.y += child_allocation.height - tab_overlap;
break; break;
} }
@ -3551,14 +3591,14 @@ gtk_notebook_pages_allocate (GtkNotebook *notebook)
case GTK_POS_TOP: case GTK_POS_TOP:
case GTK_POS_BOTTOM: case GTK_POS_BOTTOM:
child_allocation.width = (page->requisition.width + child_allocation.width = (page->requisition.width +
TAB_OVERLAP + delta); tab_overlap + delta);
if (!is_rtl) if (!is_rtl)
child_allocation.x -= child_allocation.width; child_allocation.x -= child_allocation.width;
break; break;
case GTK_POS_LEFT: case GTK_POS_LEFT:
case GTK_POS_RIGHT: case GTK_POS_RIGHT:
child_allocation.height = (page->requisition.height + child_allocation.height = (page->requisition.height +
TAB_OVERLAP + delta); tab_overlap + delta);
child_allocation.y -= child_allocation.height; child_allocation.y -= child_allocation.height;
break; break;
} }
@ -3570,13 +3610,13 @@ gtk_notebook_pages_allocate (GtkNotebook *notebook)
case GTK_POS_TOP: case GTK_POS_TOP:
case GTK_POS_BOTTOM: case GTK_POS_BOTTOM:
if (!is_rtl) if (!is_rtl)
child_allocation.x += TAB_OVERLAP; child_allocation.x += tab_overlap;
else else
child_allocation.x += child_allocation.width - TAB_OVERLAP; child_allocation.x += child_allocation.width - tab_overlap;
break; break;
case GTK_POS_LEFT: case GTK_POS_LEFT:
case GTK_POS_RIGHT: case GTK_POS_RIGHT:
child_allocation.y += TAB_OVERLAP; child_allocation.y += tab_overlap;
break; break;
} }
@ -3601,9 +3641,13 @@ gtk_notebook_page_allocate (GtkNotebook *notebook,
gint ythickness; gint ythickness;
gint padding; gint padding;
gint focus_width; gint focus_width;
gint tab_curvature;
gint tab_pos = get_effective_tab_pos (notebook); gint tab_pos = get_effective_tab_pos (notebook);
gtk_widget_style_get (widget, "focus-line-width", &focus_width, NULL); gtk_widget_style_get (widget,
"focus-line-width", &focus_width,
"tab-curvature", &tab_curvature,
NULL);
xthickness = widget->style->xthickness; xthickness = widget->style->xthickness;
ythickness = widget->style->ythickness; ythickness = widget->style->ythickness;
@ -3632,7 +3676,7 @@ gtk_notebook_page_allocate (GtkNotebook *notebook,
{ {
case GTK_POS_TOP: case GTK_POS_TOP:
case GTK_POS_BOTTOM: case GTK_POS_BOTTOM:
padding = TAB_CURVATURE + focus_width + notebook->tab_hborder; padding = tab_curvature + focus_width + notebook->tab_hborder;
if (page->fill) if (page->fill)
{ {
child_allocation.x = (xthickness + focus_width + child_allocation.x = (xthickness + focus_width +
@ -3657,7 +3701,7 @@ gtk_notebook_page_allocate (GtkNotebook *notebook,
break; break;
case GTK_POS_LEFT: case GTK_POS_LEFT:
case GTK_POS_RIGHT: case GTK_POS_RIGHT:
padding = TAB_CURVATURE + focus_width + notebook->tab_vborder; padding = tab_curvature + focus_width + notebook->tab_vborder;
if (page->fill) if (page->fill)
{ {
child_allocation.y = ythickness + padding; child_allocation.y = ythickness + padding;