|
Packit |
b00eeb |
/*
|
|
Packit |
b00eeb |
* Copyright (C) 2011 Collabora Ltd.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
b00eeb |
* it under the terms of the GNU Lesser General Public License as
|
|
Packit |
b00eeb |
* published by the Free Software Foundation; either version 2.1 of
|
|
Packit |
b00eeb |
* the License, or (at your option) any later version.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* This program is distributed in the hope that it will be useful, but
|
|
Packit |
b00eeb |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
b00eeb |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
b00eeb |
* Lesser General Public License for more details.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b00eeb |
* License along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
b00eeb |
*
|
|
Packit |
b00eeb |
* Author: Stef Walter <stefw@collabora.co.uk>
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include "config.h"
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
#include "gcr-display-scrolled.h"
|
|
Packit |
b00eeb |
#include "gcr-viewer.h"
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void _gcr_display_scrolled_viewer_iface (GcrViewerIface *iface);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
G_DEFINE_TYPE_WITH_CODE (GcrDisplayScrolled, _gcr_display_scrolled, GTK_TYPE_SCROLLED_WINDOW,
|
|
Packit |
b00eeb |
G_IMPLEMENT_INTERFACE (GCR_TYPE_VIEWER, _gcr_display_scrolled_viewer_iface));
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
struct _GcrDisplayScrolledPrivate {
|
|
Packit |
b00eeb |
GcrViewer *internal;
|
|
Packit |
b00eeb |
};
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/* -----------------------------------------------------------------------------
|
|
Packit |
b00eeb |
* INTERNAL
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/* -----------------------------------------------------------------------------
|
|
Packit |
b00eeb |
* OBJECT
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_display_scrolled_init (GcrDisplayScrolled *self)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
self->pv = (G_TYPE_INSTANCE_GET_PRIVATE (self, GCR_TYPE_DISPLAY_SCROLLED, GcrDisplayScrolledPrivate));
|
|
Packit |
b00eeb |
self->pv->internal = gcr_viewer_new ();
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_display_scrolled_constructed (GObject *object)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrDisplayScrolled *self = GCR_DISPLAY_SCROLLED (object);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (self), GTK_SHADOW_ETCHED_IN);
|
|
Packit |
b00eeb |
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (self), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
|
|
Packit |
b00eeb |
gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->pv->internal));
|
|
Packit |
b00eeb |
gtk_widget_show (GTK_WIDGET (self->pv->internal));
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_display_scrolled_get_preferred_height (GtkWidget *widget, gint *minimal_height,
|
|
Packit |
b00eeb |
gint *natural_height)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrDisplayScrolled *self = GCR_DISPLAY_SCROLLED (widget);
|
|
Packit |
b00eeb |
gint minimal, natural;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GTK_WIDGET_CLASS (_gcr_display_scrolled_parent_class)->get_preferred_height (widget,
|
|
Packit |
b00eeb |
minimal_height,
|
|
Packit |
b00eeb |
natural_height);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
minimal = 0;
|
|
Packit |
b00eeb |
natural = 0;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
gtk_widget_get_preferred_height (GTK_WIDGET (self->pv->internal),
|
|
Packit |
b00eeb |
&minimal, &natural);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/* This is messy, we add a extra for the etching height */
|
|
Packit |
b00eeb |
*minimal_height = MAX (minimal + 3, *minimal_height);
|
|
Packit |
b00eeb |
*natural_height = MAX (natural + 3, *natural_height);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_display_scrolled_get_preferred_width (GtkWidget *widget, gint *minimal_width,
|
|
Packit |
b00eeb |
gint *natural_width)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrDisplayScrolled *self = GCR_DISPLAY_SCROLLED (widget);
|
|
Packit |
b00eeb |
gint minimal, natural;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GTK_WIDGET_CLASS (_gcr_display_scrolled_parent_class)->get_preferred_width (widget,
|
|
Packit |
b00eeb |
minimal_width,
|
|
Packit |
b00eeb |
natural_width);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
minimal = 0;
|
|
Packit |
b00eeb |
natural = 0;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
gtk_widget_get_preferred_width (GTK_WIDGET (self->pv->internal),
|
|
Packit |
b00eeb |
&minimal, &natural);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/* This is messy, we add a extra for the scrollbar width, etching */
|
|
Packit |
b00eeb |
*minimal_width = MAX (minimal + 32, *minimal_width);
|
|
Packit |
b00eeb |
*natural_width = MAX (natural + 32, *natural_width);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_display_scrolled_class_init (GcrDisplayScrolledClass *klass)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
Packit |
b00eeb |
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
widget_class->get_preferred_height = _gcr_display_scrolled_get_preferred_height;
|
|
Packit |
b00eeb |
widget_class->get_preferred_width = _gcr_display_scrolled_get_preferred_width;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
object_class->constructed = _gcr_display_scrolled_constructed;
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
g_type_class_add_private (klass, sizeof (GcrDisplayScrolledPrivate));
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_display_scrolled_real_add_renderer (GcrViewer *viewer, GcrRenderer *renderer)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrDisplayScrolled *self = GCR_DISPLAY_SCROLLED (viewer);
|
|
Packit |
b00eeb |
gcr_viewer_add_renderer (self->pv->internal, renderer);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_display_scrolled_real_insert_renderer (GcrViewer *viewer,
|
|
Packit |
b00eeb |
GcrRenderer *renderer,
|
|
Packit |
b00eeb |
GcrRenderer *before)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrDisplayScrolled *self = GCR_DISPLAY_SCROLLED (viewer);
|
|
Packit |
b00eeb |
gcr_viewer_insert_renderer (self->pv->internal, renderer, before);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_display_scrolled_real_remove_renderer (GcrViewer *viewer, GcrRenderer *renderer)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrDisplayScrolled *self = GCR_DISPLAY_SCROLLED (viewer);
|
|
Packit |
b00eeb |
gcr_viewer_remove_renderer (self->pv->internal, renderer);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static guint
|
|
Packit |
b00eeb |
_gcr_display_scrolled_real_count_renderers (GcrViewer *viewer)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrDisplayScrolled *self = GCR_DISPLAY_SCROLLED (viewer);
|
|
Packit |
b00eeb |
return gcr_viewer_count_renderers (self->pv->internal);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static GcrRenderer*
|
|
Packit |
b00eeb |
_gcr_display_scrolled_real_get_renderer (GcrViewer *viewer, guint index_)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
GcrDisplayScrolled *self = GCR_DISPLAY_SCROLLED (viewer);
|
|
Packit |
b00eeb |
return gcr_viewer_get_renderer (self->pv->internal, index_);
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
static void
|
|
Packit |
b00eeb |
_gcr_display_scrolled_viewer_iface (GcrViewerIface *iface)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
iface->add_renderer = _gcr_display_scrolled_real_add_renderer;
|
|
Packit |
b00eeb |
iface->insert_renderer = _gcr_display_scrolled_real_insert_renderer;
|
|
Packit |
b00eeb |
iface->remove_renderer = _gcr_display_scrolled_real_remove_renderer;
|
|
Packit |
b00eeb |
iface->count_renderers = _gcr_display_scrolled_real_count_renderers;
|
|
Packit |
b00eeb |
iface->get_renderer = _gcr_display_scrolled_real_get_renderer;
|
|
Packit |
b00eeb |
}
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
/* -----------------------------------------------------------------------------
|
|
Packit |
b00eeb |
* PUBLIC
|
|
Packit |
b00eeb |
*/
|
|
Packit |
b00eeb |
|
|
Packit |
b00eeb |
GcrDisplayScrolled*
|
|
Packit |
b00eeb |
_gcr_display_scrolled_new (void)
|
|
Packit |
b00eeb |
{
|
|
Packit |
b00eeb |
return g_object_new (GCR_TYPE_DISPLAY_SCROLLED, NULL);
|
|
Packit |
b00eeb |
}
|