forked from AuroraMiddleware/gtk
d7bd87f2ea
Tue Jan 12 13:47:07 1999 Tim Janik <timj@gtk.org> * reworked the redrawing heuristics somewhat, this fixed a bunch of existing redrawing problems and majorly reduces overall redrawing needs during normal operation. basically we now only queue redraws when neccessary and much rely on the draw_area coalescing code in gtkwidget.c to optimize the queued portions. widgets will now upon reallocation only get redrawed if their allocation has changed. upon hide/show only the area allocated by the child will be queued for the parent, this has the side effect that parents which change their appearance in dependance on the numer of visible children have to keep track of their children's visiblity and eventually fully redraw themselves. this is a minor constrain with great benefits in terms of redraw reduction, and only got triggered by the notebook widget. * gtk/gtkwidget.c: (gtk_widget_queue_clear): don't bother if width and height == 0. (gtk_widget_queue_clear_child): new static function to queue a redraw of the area obscured by a child on a parent. (gtk_widget_queue_resize): queue_clear the widget if it is drawable. (gtk_widget_show): queue resize on the widget before showing. (gtk_widget_hide): queue resize on the widget after hiding. (gtk_widget_map): queue_draw the widget after mapping. (gtk_widget_unmap): queue_clear_child the widget. (gtk_widget_size_allocate): queue_clear_child and queue_draw if the widget's allocation changed. (gtk_widget_unparent): queue_clear_child so the parent redraws obscured portions. (gtk_widget_real_show): (gtk_widget_real_hide): (gtk_widget_real_map): (gtk_widget_real_unmap): (gtk_widget_real_size_allocate): don't bother with redraw queueing, descendants that override these functions don't do either and we handle all redrawing/resizing related stuff before or after the signal emission now. * gtk/gtkcontainer.c: (gtk_container_resize_children): don't bother about redrawing anymore since gtk_widget_size_allocate handles that for us now. * gtk/gtknotebook.h: * gtk/gtknotebook.c: added a flag have_visible_child to indicate whether we need to draw non child related portions at all, e.g. shadows etc. (gtk_notebook_draw): if have_visible_child changed, do a full paint instead of updating a small area only. Mon Jan 11 20:44:35 1999 Tim Janik <timj@gtk.org> * gtk/gtkstyle.c: changed gtk_style_apply_default_pixmap to gtk_style_apply_default_background which takes an extra argument copy_area to determine NO_WINDOW widget pixmap copying. changed callers accordingly. * gtk/gtktogglebutton.c: (gtk_toggle_size_allocate): (gtk_toggle_button_expose): (gtk_toggle_button_paint): avoid messing with our parent's window if toggle_button->draw_indicator == TRUE and we are a NO_WINDOW widget. * gtk/gtkcheckbutton.c (gtk_real_check_button_draw_indicator): draw the draw_indicator with GTK_STATE_ACTIVE if the toggle button is active. * gtk/check-n.xpm: * gtk/check-y.xpm: * gtk/testgtkrc: set pixmaps for ACTIVE and NORMAL check button bg_pixmaps.
214 lines
7.3 KiB
C
214 lines
7.3 KiB
C
/* GTK - The GIMP Toolkit
|
|
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library; if not, write to the
|
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
* Boston, MA 02111-1307, USA.
|
|
*/
|
|
#ifndef __GTK_NOTEBOOK_H__
|
|
#define __GTK_NOTEBOOK_H__
|
|
|
|
|
|
#include <gdk/gdk.h>
|
|
#include <gtk/gtkcontainer.h>
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
#define GTK_TYPE_NOTEBOOK (gtk_notebook_get_type ())
|
|
#define GTK_NOTEBOOK(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_NOTEBOOK, GtkNotebook))
|
|
#define GTK_NOTEBOOK_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_NOTEBOOK, GtkNotebookClass))
|
|
#define GTK_IS_NOTEBOOK(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_NOTEBOOK))
|
|
#define GTK_IS_NOTEBOOK_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_NOTEBOOK))
|
|
|
|
#define GTK_NOTEBOOK_PAGE(_glist_) ((GtkNotebookPage *)((GList *)(_glist_))->data)
|
|
|
|
|
|
typedef struct _GtkNotebook GtkNotebook;
|
|
typedef struct _GtkNotebookClass GtkNotebookClass;
|
|
typedef struct _GtkNotebookPage GtkNotebookPage;
|
|
|
|
struct _GtkNotebook
|
|
{
|
|
GtkContainer container;
|
|
|
|
GtkNotebookPage *cur_page;
|
|
GList *children;
|
|
GList *first_tab;
|
|
GList *focus_tab;
|
|
|
|
GtkWidget *menu;
|
|
GdkWindow *panel;
|
|
|
|
guint32 timer;
|
|
|
|
guint16 tab_hborder;
|
|
guint16 tab_vborder;
|
|
|
|
guint show_tabs : 1;
|
|
guint homogeneous : 1;
|
|
guint show_border : 1;
|
|
guint tab_pos : 2;
|
|
guint scrollable : 1;
|
|
guint in_child : 2;
|
|
guint click_child : 2;
|
|
guint button : 2;
|
|
guint need_timer : 1;
|
|
guint child_has_focus : 1;
|
|
guint have_visible_child : 1;
|
|
};
|
|
|
|
struct _GtkNotebookClass
|
|
{
|
|
GtkContainerClass parent_class;
|
|
|
|
void (* switch_page) (GtkNotebook *notebook,
|
|
GtkNotebookPage *page,
|
|
guint page_num);
|
|
};
|
|
|
|
struct _GtkNotebookPage
|
|
{
|
|
GtkWidget *child;
|
|
GtkWidget *tab_label;
|
|
GtkWidget *menu_label;
|
|
|
|
guint default_menu : 1;
|
|
guint default_tab : 1;
|
|
guint expand : 1;
|
|
guint fill : 1;
|
|
guint pack : 1;
|
|
|
|
GtkRequisition requisition;
|
|
GtkAllocation allocation;
|
|
};
|
|
|
|
/***********************************************************
|
|
* Creation, insertion, deletion *
|
|
***********************************************************/
|
|
|
|
GtkType gtk_notebook_get_type (void);
|
|
GtkWidget * gtk_notebook_new (void);
|
|
void gtk_notebook_append_page (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
GtkWidget *tab_label);
|
|
void gtk_notebook_append_page_menu (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
GtkWidget *tab_label,
|
|
GtkWidget *menu_label);
|
|
void gtk_notebook_prepend_page (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
GtkWidget *tab_label);
|
|
void gtk_notebook_prepend_page_menu (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
GtkWidget *tab_label,
|
|
GtkWidget *menu_label);
|
|
void gtk_notebook_insert_page (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
GtkWidget *tab_label,
|
|
gint position);
|
|
void gtk_notebook_insert_page_menu (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
GtkWidget *tab_label,
|
|
GtkWidget *menu_label,
|
|
gint position);
|
|
void gtk_notebook_remove_page (GtkNotebook *notebook,
|
|
gint page_num);
|
|
|
|
/***********************************************************
|
|
* query, set current NoteebookPage *
|
|
***********************************************************/
|
|
|
|
gint gtk_notebook_get_current_page (GtkNotebook *notebook);
|
|
GtkWidget* gtk_notebook_get_nth_page (GtkNotebook *notebook,
|
|
gint page_num);
|
|
gint gtk_notebook_page_num (GtkNotebook *notebook,
|
|
GtkWidget *child);
|
|
void gtk_notebook_set_page (GtkNotebook *notebook,
|
|
gint page_num);
|
|
void gtk_notebook_next_page (GtkNotebook *notebook);
|
|
void gtk_notebook_prev_page (GtkNotebook *notebook);
|
|
|
|
/***********************************************************
|
|
* set Notebook, NotebookTab style *
|
|
***********************************************************/
|
|
|
|
void gtk_notebook_set_show_border (GtkNotebook *notebook,
|
|
gboolean show_border);
|
|
void gtk_notebook_set_show_tabs (GtkNotebook *notebook,
|
|
gboolean show_tabs);
|
|
void gtk_notebook_set_tab_pos (GtkNotebook *notebook,
|
|
GtkPositionType pos);
|
|
void gtk_notebook_set_homogeneous_tabs (GtkNotebook *notebook,
|
|
gboolean homogeneous);
|
|
void gtk_notebook_set_tab_border (GtkNotebook *notebook,
|
|
guint border_width);
|
|
void gtk_notebook_set_tab_hborder (GtkNotebook *notebook,
|
|
guint tab_hborder);
|
|
void gtk_notebook_set_tab_vborder (GtkNotebook *notebook,
|
|
guint tab_vborder);
|
|
void gtk_notebook_set_scrollable (GtkNotebook *notebook,
|
|
gboolean scrollable);
|
|
|
|
/***********************************************************
|
|
* enable/disable PopupMenu *
|
|
***********************************************************/
|
|
|
|
void gtk_notebook_popup_enable (GtkNotebook *notebook);
|
|
void gtk_notebook_popup_disable (GtkNotebook *notebook);
|
|
|
|
/***********************************************************
|
|
* query/set NotebookPage Properties *
|
|
***********************************************************/
|
|
|
|
GtkWidget * gtk_notebook_get_tab_label (GtkNotebook *notebook,
|
|
GtkWidget *child);
|
|
void gtk_notebook_set_tab_label (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
GtkWidget *tab_label);
|
|
void gtk_notebook_set_tab_label_text (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
const gchar *tab_text);
|
|
GtkWidget * gtk_notebook_get_menu_label (GtkNotebook *notebook,
|
|
GtkWidget *child);
|
|
void gtk_notebook_set_menu_label (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
GtkWidget *menu_label);
|
|
void gtk_notebook_set_menu_label_text (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
const gchar *menu_text);
|
|
void gtk_notebook_query_tab_label_packing (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
gboolean *expand,
|
|
gboolean *fill,
|
|
GtkPackType *pack_type);
|
|
void gtk_notebook_set_tab_label_packing (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
gboolean expand,
|
|
gboolean fill,
|
|
GtkPackType pack_type);
|
|
void gtk_notebook_reorder_child (GtkNotebook *notebook,
|
|
GtkWidget *child,
|
|
gint position);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
|
|
#endif /* __GTK_NOTEBOOK_H__ */
|