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

📄 z875.html

📁 GTK+_ Gnome Application Development
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html>  <head>    <title>      The GtkEv Widget    </title>    <meta name="GENERATOR" content=    "Modular DocBook HTML Stylesheet Version 1.45">    <link rel="HOME" title="GTK+ / Gnome Application Development"    href="ggad.html">    <link rel="UP" title="Code Listings" href="listing.html">    <link rel="PREVIOUS" title="Code Listings" href="listing.html">  </head>  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink=   "#840084" alink="#0000FF">    <div class="NAVHEADER">      <table width="100%" border="0" bgcolor="#ffffff" cellpadding=       "1" cellspacing="0">        <tr>          <th colspan="4" align="center">            <font color="#000000" size="2">GTK+ / Gnome Application            Development</font>          </th>        </tr>        <tr>          <td width="25%" bgcolor="#ffffff" align="left">            <a href="listing.html"><font color="#0000ff" size="2">            <b>&lt;&lt;&lt; Previous</b></font></a>          </td>          <td width="25%" colspan="2" bgcolor="#ffffff" align=           "center">            <font color="#0000ff" size="2"><b><a href="ggad.html">            <font color="#0000ff" size="2"><b>            Home</b></font></a></b></font>          </td>          <td width="25%" bgcolor="#ffffff" align="right">            &nbsp;          </td>        </tr>      </table>    </div>    <div class="SECT1">      <h1 class="SECT1">        <a name="Z875">The <tt class="CLASSNAME">GtkEv</tt>        Widget</a>      </h1>      <p>        <tt class="CLASSNAME">GtkEv</tt> is a widget that reports        events on a subwindow, similar to the <tt class=        "APPLICATION">xev</tt> client that comes with X.      </p>      <div class="SECT2">        <h2 class="SECT2">          <a name="Z876"><tt class="FILENAME">gtkev.h</tt></a>        </h2>        <table border="0" bgcolor="#E0E0E0" width="100%">          <tr>            <td><pre class="PROGRAMLISTING">&#13;#ifndef INC_GTK_EV_H#define INC_GTK_EV_H#include &lt;gtk/gtkwidget.h&gt;#ifdef __cplusplusextern "C" {#endif /* __cplusplus */#define GTK_EV(obj)          GTK_CHECK_CAST (obj, gtk_ev_get_type (), GtkEv)#define GTK_EV_CLASS(klass)  GTK_CHECK_CLASS_CAST (klass, gtk_ev_get_type (), GtkEvClass)#define GTK_IS_EV(obj)       GTK_CHECK_TYPE (obj, gtk_ev_get_type ())typedef struct _GtkEv       GtkEv;typedef struct _GtkEvClass  GtkEvClass;struct _GtkEv{  GtkWidget widget;    GdkWindow*     event_window;  GdkRectangle   event_window_rect;  GdkRectangle   description_rect;  GList*         buffer;  GList*         buffer_end;  gint           buffer_size;};struct _GtkEvClass{  GtkWidgetClass parent_class;};guint           gtk_ev_get_type           (void);GtkWidget*      gtk_ev_new                (void);#ifdef __cplusplus}#endif /* __cplusplus */#endif /* __GTK_EV_H__ */&#13;</pre>            </td>          </tr>        </table>      </div>      <div class="SECT2">        <h2 class="SECT2">          <a name="Z877"><tt class="FILENAME">gtkev.c</tt></a>        </h2>        <table border="0" bgcolor="#E0E0E0" width="100%">          <tr>            <td><pre class="PROGRAMLISTING">&#13;#include "gtkev.h"static void   gtk_ev_class_init    (GtkEvClass  *klass);static void   gtk_ev_init          (GtkEv       *ev);/* GtkObject functions */static void   gtk_ev_destroy       (GtkObject   *object);/* GtkWidget functions */static gint   gtk_ev_event (GtkWidget          *widget,                            GdkEvent           *event);static void gtk_ev_realize        (GtkWidget        *widget);static void gtk_ev_unrealize      (GtkWidget        *widget);static void gtk_ev_size_request   (GtkWidget        *widget,                                   GtkRequisition   *requisition);static void gtk_ev_size_allocate  (GtkWidget        *widget,                                   GtkAllocation    *allocation);static void gtk_ev_draw           (GtkWidget        *widget,                                   GdkRectangle     *area);static void gtk_ev_draw_focus     (GtkWidget        *widget);static gint gtk_ev_expose         (GtkWidget        *widget,                                   GdkEventExpose   *event);static gint gtk_ev_focus_in       (GtkWidget        *widget,                                   GdkEventFocus    *event);static gint gtk_ev_focus_out      (GtkWidget        *widget,                                   GdkEventFocus    *event);/* GtkEv-specific functions */static void gtk_ev_paint          (GtkEv            *ev,                                   GdkRectangle     *area);static void gtk_ev_paint_event_window  (GtkEv            *ev,                                        GdkRectangle     *area);static void gtk_ev_push_text       (GtkEv            *ev,                                    const gchar*     text);/* Utility Functions */static gchar* event_to_text (GdkEvent* event);static GtkWidgetClass *parent_class = NULL;guintgtk_ev_get_type (void){  static guint ev_type = 0;  if (!ev_type)    {      static const GtkTypeInfo ev_info =      {        "GtkEv",        sizeof (GtkEv),        sizeof (GtkEvClass),        (GtkClassInitFunc) gtk_ev_class_init,        (GtkObjectInitFunc) gtk_ev_init,        /* reserved_1 */ NULL,        /* reserved_2 */ NULL,        (GtkClassInitFunc) NULL,      };      ev_type = gtk_type_unique (gtk_widget_get_type (), &amp;ev_info);    }  return ev_type;}static voidgtk_ev_class_init (GtkEvClass *klass){  GtkObjectClass *object_class;  GtkWidgetClass *widget_class;  object_class = (GtkObjectClass*) klass;  widget_class = (GtkWidgetClass*) klass;  parent_class = gtk_type_class (gtk_widget_get_type ());  object_class-&gt;destroy = gtk_ev_destroy;  widget_class-&gt;realize = gtk_ev_realize;  widget_class-&gt;unrealize = gtk_ev_unrealize;  widget_class-&gt;size_request = gtk_ev_size_request;    widget_class-&gt;size_allocate = gtk_ev_size_allocate;    widget_class-&gt;draw = gtk_ev_draw;           widget_class-&gt;event = gtk_ev_event;    widget_class-&gt;draw_focus = gtk_ev_draw_focus;  widget_class-&gt;expose_event = gtk_ev_expose;      widget_class-&gt;focus_in_event = gtk_ev_focus_in;  widget_class-&gt;focus_out_event = gtk_ev_focus_out;}static voidgtk_ev_init (GtkEv *ev){  GTK_WIDGET_SET_FLAGS (GTK_WIDGET(ev), GTK_CAN_FOCUS);  ev-&gt;event_window = NULL;  ev-&gt;buffer       = NULL;  ev-&gt;buffer_end   = NULL;  ev-&gt;buffer_size  = 0;    ev-&gt;event_window_rect.x = ev-&gt;event_window_rect.y = 0;  ev-&gt;event_window_rect.width = ev-&gt;event_window_rect.height = 0;  ev-&gt;description_rect.x = ev-&gt;description_rect.y = 0;  ev-&gt;description_rect.width = ev-&gt;description_rect.height = 0;}GtkWidget*gtk_ev_new (void){  GtkEv *ev;  ev = gtk_type_new (gtk_ev_get_type ());  return GTK_WIDGET (ev);}/* GtkObject functions */static void   gtk_ev_destroy       (GtkObject   *object){  GtkEv* ev;  GList* tmp;  g_return_if_fail(object != NULL);  g_return_if_fail(GTK_IS_EV(object));  ev = GTK_EV(object);  tmp = ev-&gt;buffer;  while (tmp != NULL)    {      g_strfreev((gchar**)tmp-&gt;data);            tmp = g_list_next(tmp);    }  g_list_free(ev-&gt;buffer);  ev-&gt;buffer = NULL;  ev-&gt;buffer_end = NULL;  ev-&gt;buffer_size = 0;  /* Chain up */  if (GTK_OBJECT_CLASS(parent_class)-&gt;destroy)    (* GTK_OBJECT_CLASS(parent_class)-&gt;destroy) (object);}/* GtkWidget functions */static gint   gtk_ev_event (GtkWidget        *widget,              GdkEvent         *event){  GtkEv* ev;  g_return_val_if_fail(widget != NULL, FALSE);  g_return_val_if_fail(GTK_IS_EV(widget), FALSE);  ev = GTK_EV(widget);  if (event-&gt;any.window == widget-&gt;window)    {      if (GTK_WIDGET_CLASS(parent_class)-&gt;event)        return (* GTK_WIDGET_CLASS(parent_class)-&gt;event) (widget, event);      else        return FALSE;    }  else    {      gchar* text;      /* The event is either on ev-&gt;event_window, or it is a key event        * passed down to us from the toplevel GtkWindow       */      text = event_to_text(event);            gtk_ev_push_text(ev, text);      g_free(text);      /* If it was a motion event, make sure we get more */      if (event-&gt;type == GDK_MOTION_NOTIFY)        {          gdk_window_get_pointer(ev-&gt;event_window, NULL, NULL, NULL);        }      /* We didn't "handle" the event, just listened in on it. */      return FALSE;    }}static void gtk_ev_realize        (GtkWidget        *widget){  GdkWindowAttr attributes;  gint attributes_mask;  GtkEv* ev;  GdkCursor* cursor;  g_return_if_fail(widget != NULL);  g_return_if_fail(GTK_IS_EV(widget));  ev = GTK_EV(widget);  /* Set realized flag */  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);  /* Main widget window */  attributes.window_type = GDK_WINDOW_CHILD;  attributes.x = widget-&gt;allocation.x;  attributes.y = widget-&gt;allocation.y;  attributes.width = widget-&gt;allocation.width;  attributes.height = widget-&gt;allocation.height;  attributes.wclass = GDK_INPUT_OUTPUT;  attributes.visual = gtk_widget_get_visual (widget);  attributes.colormap = gtk_widget_get_colormap (widget);  attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK;  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;  widget-&gt;window = gdk_window_new (gtk_widget_get_parent_window (widget),                                   &amp;attributes, attributes_mask);  gdk_window_set_user_data (widget-&gt;window, widget);  /* Event window */  cursor = gdk_cursor_new(GDK_CROSSHAIR);  attributes.window_type = GDK_WINDOW_CHILD;  attributes.x = ev-&gt;event_window_rect.x;  attributes.y = ev-&gt;event_window_rect.y;  attributes.width = ev-&gt;event_window_rect.width;  attributes.height = ev-&gt;event_window_rect.height;  attributes.wclass = GDK_INPUT_OUTPUT;  attributes.visual = gtk_widget_get_visual (widget);  attributes.colormap = gtk_widget_get_colormap (widget);  attributes.event_mask = GDK_ALL_EVENTS_MASK;  attributes.cursor = cursor;  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL |     GDK_WA_COLORMAP | GDK_WA_CURSOR;  ev-&gt;event_window = gdk_window_new (widget-&gt;window,                                     &amp;attributes, attributes_mask);  gdk_window_set_user_data (ev-&gt;event_window, widget);  gdk_window_show(ev-&gt;event_window);  gdk_cursor_destroy(cursor);  /* Style */  widget-&gt;style = gtk_style_attach (widget-&gt;style, widget-&gt;window);  gtk_style_set_background (widget-&gt;style, widget-&gt;window, GTK_STATE_NORMAL);  gdk_window_set_background (ev-&gt;event_window,                              &amp;widget-&gt;style-&gt;base[GTK_STATE_NORMAL]);}static void gtk_ev_unrealize (GtkWidget        *widget){  GtkEv* ev;  g_return_if_fail(widget != NULL);  g_return_if_fail(GTK_IS_EV(widget));  ev = GTK_EV(widget);

⌨️ 快捷键说明

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