⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtkviewport.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 2 页
字号:
/* 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. *//* * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS * file for a list of people on the GTK+ Team.  See the ChangeLog * files for a list of changes.  These files are distributed with * GTK+ at ftp://ftp.gtk.org/pub/gtk/.  */#include "gtksignal.h"#include "gtkviewport.h"enum {  ARG_0,  ARG_HADJUSTMENT,  ARG_VADJUSTMENT,  ARG_SHADOW_TYPE};static void gtk_viewport_class_init               (GtkViewportClass *klass);static void gtk_viewport_init                     (GtkViewport      *viewport);static void gtk_viewport_destroy                  (GtkObject        *object);static void gtk_viewport_finalize                 (GtkObject        *object);static void gtk_viewport_set_arg		  (GtkObject        *object,						   GtkArg           *arg,						   guint             arg_id);static void gtk_viewport_get_arg		  (GtkObject        *object,						   GtkArg           *arg,						   guint             arg_id);static void gtk_viewport_set_scroll_adjustments	  (GtkViewport	    *viewport,						   GtkAdjustment    *hadjustment,						   GtkAdjustment    *vadjustment);static void gtk_viewport_map                      (GtkWidget        *widget);static void gtk_viewport_unmap                    (GtkWidget        *widget);static void gtk_viewport_realize                  (GtkWidget        *widget);static void gtk_viewport_unrealize                (GtkWidget        *widget);static void gtk_viewport_paint                    (GtkWidget        *widget,						   GdkRectangle     *area);static void gtk_viewport_draw                     (GtkWidget        *widget,						   GdkRectangle     *area);static gint gtk_viewport_expose                   (GtkWidget        *widget,						   GdkEventExpose   *event);static void gtk_viewport_add                      (GtkContainer     *container,						   GtkWidget        *widget);static void gtk_viewport_size_request             (GtkWidget        *widget,						   GtkRequisition   *requisition);static void gtk_viewport_size_allocate            (GtkWidget        *widget,						   GtkAllocation    *allocation);static void gtk_viewport_adjustment_changed       (GtkAdjustment    *adjustment,						   gpointer          data);static void gtk_viewport_adjustment_value_changed (GtkAdjustment    *adjustment,						   gpointer          data);static void gtk_viewport_style_set                (GtkWidget *widget,			                           GtkStyle  *previous_style);static GtkBinClass *parent_class;GtkTypegtk_viewport_get_type (void){  static GtkType viewport_type = 0;  if (!viewport_type)    {      static const GtkTypeInfo viewport_info =      {	"GtkViewport",	sizeof (GtkViewport),	sizeof (GtkViewportClass),	(GtkClassInitFunc) gtk_viewport_class_init,	(GtkObjectInitFunc) gtk_viewport_init,	/* reserved_1 */ NULL,        /* reserved_2 */ NULL,        (GtkClassInitFunc) NULL,      };      viewport_type = gtk_type_unique (GTK_TYPE_BIN, &viewport_info);    }  return viewport_type;}static voidgtk_viewport_class_init (GtkViewportClass *class){  GtkObjectClass *object_class;  GtkWidgetClass *widget_class;  GtkContainerClass *container_class;  object_class = (GtkObjectClass*) class;  widget_class = (GtkWidgetClass*) class;  container_class = (GtkContainerClass*) class;  parent_class = (GtkBinClass*) gtk_type_class (GTK_TYPE_BIN);  gtk_object_add_arg_type ("GtkViewport::hadjustment",			   GTK_TYPE_ADJUSTMENT,			   GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT,			   ARG_HADJUSTMENT);  gtk_object_add_arg_type ("GtkViewport::vadjustment",			   GTK_TYPE_ADJUSTMENT,			   GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT,			   ARG_VADJUSTMENT);  gtk_object_add_arg_type ("GtkViewport::shadow_type",			   GTK_TYPE_SHADOW_TYPE,			   GTK_ARG_READWRITE,			   ARG_SHADOW_TYPE);  object_class->set_arg = gtk_viewport_set_arg;  object_class->get_arg = gtk_viewport_get_arg;  object_class->destroy = gtk_viewport_destroy;  object_class->finalize = gtk_viewport_finalize;    widget_class->map = gtk_viewport_map;  widget_class->unmap = gtk_viewport_unmap;  widget_class->realize = gtk_viewport_realize;  widget_class->unrealize = gtk_viewport_unrealize;  widget_class->draw = gtk_viewport_draw;  widget_class->expose_event = gtk_viewport_expose;  widget_class->size_request = gtk_viewport_size_request;  widget_class->size_allocate = gtk_viewport_size_allocate;  widget_class->style_set = gtk_viewport_style_set;  widget_class->set_scroll_adjustments_signal =    gtk_signal_new ("set_scroll_adjustments",		    GTK_RUN_LAST,		    object_class->type,		    GTK_SIGNAL_OFFSET (GtkViewportClass, set_scroll_adjustments),		    gtk_marshal_NONE__POINTER_POINTER,		    GTK_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT);    container_class->add = gtk_viewport_add;  class->set_scroll_adjustments = gtk_viewport_set_scroll_adjustments;}static voidgtk_viewport_set_arg (GtkObject        *object,		      GtkArg           *arg,		      guint             arg_id){  GtkViewport *viewport;  viewport = GTK_VIEWPORT (object);  switch (arg_id)    {    case ARG_HADJUSTMENT:      gtk_viewport_set_hadjustment (viewport, GTK_VALUE_POINTER (*arg));      break;    case ARG_VADJUSTMENT:      gtk_viewport_set_vadjustment (viewport, GTK_VALUE_POINTER (*arg));      break;    case ARG_SHADOW_TYPE:      gtk_viewport_set_shadow_type (viewport, GTK_VALUE_ENUM (*arg));      break;    default:      break;    }}static voidgtk_viewport_get_arg (GtkObject        *object,		      GtkArg           *arg,		      guint             arg_id){  GtkViewport *viewport;  viewport = GTK_VIEWPORT (object);  switch (arg_id)    {    case ARG_HADJUSTMENT:      GTK_VALUE_POINTER (*arg) = viewport->hadjustment;      break;    case ARG_VADJUSTMENT:      GTK_VALUE_POINTER (*arg) = viewport->vadjustment;      break;    case ARG_SHADOW_TYPE:      GTK_VALUE_ENUM (*arg) = viewport->shadow_type;      break;    default:      arg->type = GTK_TYPE_INVALID;      break;    }}static voidgtk_viewport_init (GtkViewport *viewport){  GTK_WIDGET_UNSET_FLAGS (viewport, GTK_NO_WINDOW);  gtk_container_set_resize_mode (GTK_CONTAINER (viewport), GTK_RESIZE_QUEUE);    viewport->shadow_type = GTK_SHADOW_IN;  viewport->view_window = NULL;  viewport->bin_window = NULL;  viewport->hadjustment = NULL;  viewport->vadjustment = NULL;}GtkWidget*gtk_viewport_new (GtkAdjustment *hadjustment,		  GtkAdjustment *vadjustment){  GtkWidget *viewport;  viewport = gtk_widget_new (GTK_TYPE_VIEWPORT,			     "hadjustment", hadjustment,			     "vadjustment", vadjustment,			     NULL);  return viewport;}static voidgtk_viewport_destroy (GtkObject *object){  GtkViewport *viewport = GTK_VIEWPORT (object);  if (viewport->hadjustment)    gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->hadjustment),				   viewport);  if (viewport->vadjustment)    gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->vadjustment),				   viewport);  GTK_OBJECT_CLASS(parent_class)->destroy (object);}static voidgtk_viewport_finalize (GtkObject *object){  GtkViewport *viewport = GTK_VIEWPORT (object);  gtk_object_unref (GTK_OBJECT (viewport->hadjustment));  gtk_object_unref (GTK_OBJECT (viewport->vadjustment));  GTK_OBJECT_CLASS(parent_class)->finalize (object);}GtkAdjustment*gtk_viewport_get_hadjustment (GtkViewport *viewport){  g_return_val_if_fail (viewport != NULL, NULL);  g_return_val_if_fail (GTK_IS_VIEWPORT (viewport), NULL);  return viewport->hadjustment;}GtkAdjustment*gtk_viewport_get_vadjustment (GtkViewport *viewport){  g_return_val_if_fail (viewport != NULL, NULL);  g_return_val_if_fail (GTK_IS_VIEWPORT (viewport), NULL);  return viewport->vadjustment;}voidgtk_viewport_set_hadjustment (GtkViewport   *viewport,			      GtkAdjustment *adjustment){  g_return_if_fail (viewport != NULL);  g_return_if_fail (GTK_IS_VIEWPORT (viewport));  if (adjustment)    g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));  if (viewport->hadjustment && viewport->hadjustment != adjustment)    {      gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->hadjustment),				     (gpointer) viewport);      gtk_object_unref (GTK_OBJECT (viewport->hadjustment));    }  if (!adjustment)    adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0,						     0.0, 0.0, 0.0));  if (viewport->hadjustment != adjustment)    {      viewport->hadjustment = adjustment;      gtk_object_ref (GTK_OBJECT (viewport->hadjustment));      gtk_object_sink (GTK_OBJECT (viewport->hadjustment));            gtk_signal_connect (GTK_OBJECT (adjustment), "changed",			  (GtkSignalFunc) gtk_viewport_adjustment_changed,			  (gpointer) viewport);      gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",			  (GtkSignalFunc) gtk_viewport_adjustment_value_changed,			  (gpointer) viewport);      gtk_viewport_adjustment_changed (adjustment, viewport);    }}voidgtk_viewport_set_vadjustment (GtkViewport   *viewport,			      GtkAdjustment *adjustment){  g_return_if_fail (viewport != NULL);  g_return_if_fail (GTK_IS_VIEWPORT (viewport));  if (adjustment)    g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment));  if (viewport->vadjustment && viewport->vadjustment != adjustment)    {      gtk_signal_disconnect_by_data (GTK_OBJECT (viewport->vadjustment),				     (gpointer) viewport);      gtk_object_unref (GTK_OBJECT (viewport->vadjustment));    }  if (!adjustment)    adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0,						     0.0, 0.0, 0.0));  if (viewport->vadjustment != adjustment)    {      viewport->vadjustment = adjustment;      gtk_object_ref (GTK_OBJECT (viewport->vadjustment));      gtk_object_sink (GTK_OBJECT (viewport->vadjustment));            gtk_signal_connect (GTK_OBJECT (adjustment), "changed",			  (GtkSignalFunc) gtk_viewport_adjustment_changed,			  (gpointer) viewport);      gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",			  (GtkSignalFunc) gtk_viewport_adjustment_value_changed,			  (gpointer) viewport);      gtk_viewport_adjustment_changed (adjustment, viewport);    }}static voidgtk_viewport_set_scroll_adjustments (GtkViewport      *viewport,				     GtkAdjustment    *hadjustment,				     GtkAdjustment    *vadjustment){  if (viewport->hadjustment != hadjustment)    gtk_viewport_set_hadjustment (viewport, hadjustment);  if (viewport->vadjustment != vadjustment)    gtk_viewport_set_vadjustment (viewport, vadjustment);}voidgtk_viewport_set_shadow_type (GtkViewport   *viewport,			      GtkShadowType  type){  g_return_if_fail (viewport != NULL);  g_return_if_fail (GTK_IS_VIEWPORT (viewport));  if ((GtkShadowType) viewport->shadow_type != type)    {      viewport->shadow_type = type;      if (GTK_WIDGET_VISIBLE (viewport))	{	  gtk_widget_size_allocate (GTK_WIDGET (viewport), &(GTK_WIDGET (viewport)->allocation));	  gtk_widget_queue_draw (GTK_WIDGET (viewport));	}    }}static voidgtk_viewport_map (GtkWidget *widget){  GtkBin *bin;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_VIEWPORT (widget));  GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);  bin = GTK_BIN (widget);  if (bin->child &&      GTK_WIDGET_VISIBLE (bin->child) &&      !GTK_WIDGET_MAPPED (bin->child))    gtk_widget_map (bin->child);  gdk_window_show (widget->window);}static voidgtk_viewport_unmap (GtkWidget *widget){  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_VIEWPORT (widget));  GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);    gdk_window_hide (widget->window);}static voidgtk_viewport_realize (GtkWidget *widget){  GtkBin *bin;  GtkViewport *viewport;  GdkWindowAttr attributes;  gint attributes_mask;  gint event_mask;  gint border_width;  g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_VIEWPORT (widget));  border_width = GTK_CONTAINER (widget)->border_width;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -