159 lines
4.0 KiB
C
159 lines
4.0 KiB
C
|
#include "config.h"
|
||
|
|
||
|
#include "gtkpagethumbnailprivate.h"
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
PROP_PAGE_NUM = 1,
|
||
|
NUM_PROPERTIES,
|
||
|
};
|
||
|
|
||
|
static GParamSpec *properties[NUM_PROPERTIES] = { NULL, };
|
||
|
|
||
|
struct _GtkPageThumbnail
|
||
|
{
|
||
|
GtkWidget parent_instance;
|
||
|
|
||
|
GtkWidget *label;
|
||
|
int page_num;
|
||
|
};
|
||
|
|
||
|
struct _GtkPageThumbnailClass
|
||
|
{
|
||
|
GtkWidgetClass parent_class;
|
||
|
};
|
||
|
|
||
|
G_DEFINE_TYPE (GtkPageThumbnail, gtk_page_thumbnail, GTK_TYPE_WIDGET)
|
||
|
|
||
|
static void
|
||
|
gtk_page_thumbnail_init (GtkPageThumbnail *self)
|
||
|
{
|
||
|
self->label = gtk_inscription_new ("0");
|
||
|
gtk_widget_set_parent (self->label, GTK_WIDGET (self));
|
||
|
gtk_inscription_set_min_chars (GTK_INSCRIPTION (self->label), 1);
|
||
|
gtk_inscription_set_nat_chars (GTK_INSCRIPTION (self->label), 1);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gtk_page_thumbnail_dispose (GObject *object)
|
||
|
{
|
||
|
GtkPageThumbnail *self = GTK_PAGE_THUMBNAIL (object);
|
||
|
|
||
|
g_clear_pointer (&self->label, gtk_widget_unparent);
|
||
|
|
||
|
G_OBJECT_CLASS (gtk_page_thumbnail_parent_class)->dispose (object);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gtk_page_thumbnail_set_property (GObject *object,
|
||
|
guint prop_id,
|
||
|
const GValue *value,
|
||
|
GParamSpec *pspec)
|
||
|
{
|
||
|
GtkPageThumbnail *self = GTK_PAGE_THUMBNAIL (object);
|
||
|
|
||
|
switch (prop_id)
|
||
|
{
|
||
|
case PROP_PAGE_NUM:
|
||
|
gtk_page_thumbnail_set_page_num (self, g_value_get_int (value));
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gtk_page_thumbnail_get_property (GObject *object,
|
||
|
guint prop_id,
|
||
|
GValue *value,
|
||
|
GParamSpec *pspec)
|
||
|
{
|
||
|
GtkPageThumbnail *self = GTK_PAGE_THUMBNAIL (object);
|
||
|
|
||
|
switch (prop_id)
|
||
|
{
|
||
|
case PROP_PAGE_NUM:
|
||
|
g_value_set_int (value, self->page_num);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gtk_page_thumbnail_size_allocate (GtkWidget *widget,
|
||
|
int width,
|
||
|
int height,
|
||
|
int baseline)
|
||
|
{
|
||
|
GtkPageThumbnail *self = GTK_PAGE_THUMBNAIL (widget);
|
||
|
GtkRequisition nat;
|
||
|
GtkAllocation alloc;
|
||
|
|
||
|
gtk_widget_get_preferred_size (self->label, NULL, &nat);
|
||
|
alloc.x = width - nat.width;
|
||
|
alloc.y = height - nat.height;
|
||
|
alloc.width = nat.width;
|
||
|
alloc.height = nat.height;
|
||
|
gtk_widget_size_allocate (self->label, &alloc, -1);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gtk_page_thumbnail_class_init (GtkPageThumbnailClass *class)
|
||
|
{
|
||
|
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
||
|
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
||
|
|
||
|
object_class->dispose = gtk_page_thumbnail_dispose;
|
||
|
object_class->set_property = gtk_page_thumbnail_set_property;
|
||
|
object_class->get_property = gtk_page_thumbnail_get_property;
|
||
|
|
||
|
widget_class->size_allocate = gtk_page_thumbnail_size_allocate;
|
||
|
|
||
|
properties[PROP_PAGE_NUM] =
|
||
|
g_param_spec_int ("page-num", NULL, NULL,
|
||
|
0, G_MAXINT, 0, G_PARAM_READWRITE);
|
||
|
|
||
|
g_object_class_install_properties (object_class, NUM_PROPERTIES, properties);
|
||
|
|
||
|
gtk_widget_class_set_css_name (widget_class, "page-thumbnail");
|
||
|
}
|
||
|
|
||
|
GtkPageThumbnail *
|
||
|
gtk_page_thumbnail_new (void)
|
||
|
{
|
||
|
return g_object_new (GTK_TYPE_PAGE_THUMBNAIL, NULL);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
gtk_page_thumbnail_set_page_num (GtkPageThumbnail *self,
|
||
|
int page_num)
|
||
|
{
|
||
|
g_return_if_fail (GTK_IS_PAGE_THUMBNAIL (self));
|
||
|
g_return_if_fail (page_num >= 0);
|
||
|
char text[64];
|
||
|
|
||
|
if (self->page_num == page_num)
|
||
|
return;
|
||
|
|
||
|
self->page_num = page_num;
|
||
|
|
||
|
g_snprintf (text, sizeof (text), "%d", self->page_num);
|
||
|
|
||
|
gtk_inscription_set_text (GTK_INSCRIPTION (self->label), text);
|
||
|
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_PAGE_NUM]);
|
||
|
}
|
||
|
|
||
|
int
|
||
|
gtk_page_thumbnail_get_page_num (GtkPageThumbnail *self)
|
||
|
{
|
||
|
g_return_val_if_fail (GTK_IS_PAGE_THUMBNAIL (self), 0);
|
||
|
|
||
|
return self->page_num;
|
||
|
}
|