Inspector: add & use GtkWidgetView
Use it to show a visual representation of the focus widget in a toplevel
This commit is contained in:
@@ -48,6 +48,7 @@
|
||||
#include "visual.h"
|
||||
#include "window.h"
|
||||
#include "gtkstackcombo.h"
|
||||
#include "widgetview.h"
|
||||
|
||||
#include "gtkmagnifierprivate.h"
|
||||
|
||||
@@ -85,6 +86,7 @@ gtk_inspector_init (void)
|
||||
g_type_ensure (GTK_TYPE_INSPECTOR_VISUAL);
|
||||
g_type_ensure (GTK_TYPE_INSPECTOR_WINDOW);
|
||||
g_type_ensure (GTK_TYPE_STACK_COMBO);
|
||||
g_type_ensure (GTK_TYPE_WIDGET_VIEW);
|
||||
|
||||
if (extension_point == NULL)
|
||||
{
|
||||
|
||||
@@ -37,5 +37,6 @@ inspector_sources = files(
|
||||
'treewalk.c',
|
||||
'updatesoverlay.c',
|
||||
'visual.c',
|
||||
'widgetview.c',
|
||||
'window.c',
|
||||
)
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "gtkframe.h"
|
||||
#include "gtkbutton.h"
|
||||
#include "gtkwidgetprivate.h"
|
||||
#include "widgetview.h"
|
||||
|
||||
|
||||
struct _GtkInspectorMiscInfoPrivate {
|
||||
@@ -223,19 +224,10 @@ update_focus_widget (GtkInspectorMiscInfo *sl)
|
||||
GtkWidget *widget;
|
||||
|
||||
widget = gtk_window_get_focus (GTK_WINDOW (sl->priv->object));
|
||||
if (widget)
|
||||
{
|
||||
gchar *tmp;
|
||||
tmp = g_strdup_printf ("%p", widget);
|
||||
gtk_label_set_label (GTK_LABEL (sl->priv->focus_widget), tmp);
|
||||
g_free (tmp);
|
||||
gtk_widget_set_sensitive (sl->priv->focus_widget_button, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_label_set_label (GTK_LABEL (sl->priv->focus_widget), "NULL");
|
||||
gtk_widget_set_sensitive (sl->priv->focus_widget_button, FALSE);
|
||||
}
|
||||
|
||||
gtk_widget_view_set_inspected_widget (GTK_WIDGET_VIEW (sl->priv->focus_widget),
|
||||
widget);
|
||||
gtk_widget_set_sensitive (sl->priv->focus_widget_button, widget != NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -176,11 +176,9 @@
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="focus_widget">
|
||||
<property name="selectable">1</property>
|
||||
<object class="GtkWidgetView" id="focus_widget">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">baseline</property>
|
||||
<property name="ellipsize">end</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
|
||||
93
gtk/inspector/widgetview.c
Normal file
93
gtk/inspector/widgetview.c
Normal file
@@ -0,0 +1,93 @@
|
||||
|
||||
#include "widgetview.h"
|
||||
#include "gtklabel.h"
|
||||
#include "gtkpicture.h"
|
||||
#include "gtkbox.h"
|
||||
|
||||
G_DEFINE_TYPE (GtkWidgetView, gtk_widget_view, GTK_TYPE_WIDGET);
|
||||
|
||||
static void
|
||||
gtk_widget_view_measure (GtkWidget *widget,
|
||||
GtkOrientation orientation,
|
||||
int for_size,
|
||||
int *minimum,
|
||||
int *natural,
|
||||
int *minimum_baseline,
|
||||
int *natural_baseline)
|
||||
{
|
||||
GtkWidgetView *self = GTK_WIDGET_VIEW (widget);
|
||||
|
||||
gtk_widget_measure (self->box, orientation, for_size,
|
||||
minimum, natural, minimum_baseline, natural_baseline);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_widget_view_size_allocate (GtkWidget *widget,
|
||||
int width,
|
||||
int height,
|
||||
int baseline)
|
||||
{
|
||||
GtkWidgetView *self = GTK_WIDGET_VIEW (widget);
|
||||
|
||||
gtk_widget_size_allocate (self->box,
|
||||
&(GtkAllocation) {
|
||||
0, 0,
|
||||
width, height
|
||||
}, -1);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_widget_view_class_init (GtkWidgetViewClass *klass)
|
||||
{
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
|
||||
widget_class->measure = gtk_widget_view_measure;
|
||||
widget_class->size_allocate = gtk_widget_view_size_allocate;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gtk_widget_view_init (GtkWidgetView *self)
|
||||
{
|
||||
gtk_widget_set_has_surface (GTK_WIDGET (self), FALSE);
|
||||
|
||||
self->typename_label = gtk_label_new ("");
|
||||
self->paintable_picture = gtk_picture_new ();
|
||||
self->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (self->box), self->typename_label);
|
||||
gtk_container_add (GTK_CONTAINER (self->box), self->paintable_picture);
|
||||
|
||||
gtk_widget_set_parent (self->box, GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
|
||||
GtkWidget *
|
||||
gtk_widget_view_new (void)
|
||||
{
|
||||
return (GtkWidget *) g_object_new (GTK_TYPE_WIDGET_VIEW, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
gtk_widget_view_set_inspected_widget (GtkWidgetView *self,
|
||||
GtkWidget *inspected)
|
||||
{
|
||||
char typename_buffer[512];
|
||||
GdkPaintable *paintable;
|
||||
|
||||
g_set_object (&self->inspected, inspected);
|
||||
|
||||
if (!self->inspected)
|
||||
{
|
||||
gtk_label_set_label (GTK_LABEL (self->typename_label), "NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
g_snprintf (typename_buffer, sizeof (typename_buffer),
|
||||
"%s", G_OBJECT_TYPE_NAME (inspected));
|
||||
gtk_label_set_label (GTK_LABEL (self->typename_label), typename_buffer);
|
||||
|
||||
paintable = gtk_widget_paintable_new (inspected);
|
||||
gtk_picture_set_paintable (GTK_PICTURE (self->paintable_picture), paintable);
|
||||
g_object_unref (paintable);
|
||||
}
|
||||
39
gtk/inspector/widgetview.h
Normal file
39
gtk/inspector/widgetview.h
Normal file
@@ -0,0 +1,39 @@
|
||||
|
||||
#ifndef __GTK_WIDGET_VIEW_H__
|
||||
#define __GTK_WIDGET_VIEW_H__
|
||||
|
||||
#include "gtkwidget.h"
|
||||
#include "gtkwidgetpaintable.h"
|
||||
|
||||
#define GTK_TYPE_WIDGET_VIEW (gtk_widget_view_get_type ())
|
||||
#define GTK_WIDGET_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_WIDGET_VIEW, GtkWidgetView))
|
||||
#define GTK_WIDGET_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_WIDGET_VIEW, GtkWidgetViewClass))
|
||||
#define GTK_IS_WIDGET_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_WIDGET_VIEW))
|
||||
#define GTK_IS_WIDGET_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_WIDGET_VIEW))
|
||||
#define GTK_WIDGET_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_WIDGET_VIEW, GtkWidgetViewClass))
|
||||
|
||||
typedef struct _GtkWidgetView GtkWidgetView;
|
||||
typedef struct _GtkWidgetViewClass GtkWidgetViewClass;
|
||||
|
||||
struct _GtkWidgetView
|
||||
{
|
||||
GtkWidget parent_instance;
|
||||
|
||||
GtkWidget *box;
|
||||
GtkWidget *typename_label;
|
||||
GtkWidget *paintable_picture;
|
||||
|
||||
GtkWidget *inspected;
|
||||
};
|
||||
|
||||
struct _GtkWidgetViewClass
|
||||
{
|
||||
GtkWidgetClass parent_class;
|
||||
};
|
||||
|
||||
GType gtk_widget_view_get_type (void) G_GNUC_CONST;
|
||||
GtkWidget * gtk_widget_view_new (void);
|
||||
void gtk_widget_view_set_inspected_widget (GtkWidgetView *self,
|
||||
GtkWidget *inspected);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user