css: Add GtkCssImage class
Doesn't do anything yet, just exists.
This commit is contained in:
		@ -412,6 +412,7 @@ gtk_private_h_sources =		\
 | 
			
		||||
	gtkcellareaboxcontextprivate.h	\
 | 
			
		||||
	gtkcontainerprivate.h   \
 | 
			
		||||
	gtkcsscustompropertyprivate.h \
 | 
			
		||||
	gtkcssimageprivate.h	\
 | 
			
		||||
	gtkcsslookupprivate.h	\
 | 
			
		||||
	gtkcssparserprivate.h	\
 | 
			
		||||
	gtkcssproviderprivate.h	\
 | 
			
		||||
@ -589,6 +590,7 @@ gtk_base_c_sources = 		\
 | 
			
		||||
	gtkcomboboxtext.c	\
 | 
			
		||||
	gtkcontainer.c		\
 | 
			
		||||
	gtkcsscustomproperty.c	\
 | 
			
		||||
	gtkcssimage.c		\
 | 
			
		||||
	gtkcsslookup.c		\
 | 
			
		||||
	gtkcssparser.c		\
 | 
			
		||||
	gtkcssprovider.c	\
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										179
									
								
								gtk/gtkcssimage.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								gtk/gtkcssimage.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,179 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright © 2011 Red Hat Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2.1 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
 | 
			
		||||
 * Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
 * License along with this library; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 *
 | 
			
		||||
 * Authors: Benjamin Otte <otte@gnome.org>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
#include "gtkcssimageprivate.h"
 | 
			
		||||
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE (GtkCssImage, _gtk_css_image, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
gtk_css_image_real_get_width (GtkCssImage *image)
 | 
			
		||||
{
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
gtk_css_image_real_get_height (GtkCssImage *image)
 | 
			
		||||
{
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static double
 | 
			
		||||
gtk_css_image_real_get_aspect_ratio (GtkCssImage *image)
 | 
			
		||||
{
 | 
			
		||||
  int width, height;
 | 
			
		||||
 | 
			
		||||
  width = _gtk_css_image_get_width (image);
 | 
			
		||||
  height = _gtk_css_image_get_height (image);
 | 
			
		||||
 | 
			
		||||
  if (width && height)
 | 
			
		||||
    return (double) width / height;
 | 
			
		||||
  else
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static GtkCssImage *
 | 
			
		||||
gtk_css_image_real_compute (GtkCssImage     *image,
 | 
			
		||||
                            GtkStyleContext *context)
 | 
			
		||||
{
 | 
			
		||||
  return g_object_ref (image);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
_gtk_css_image_class_init (GtkCssImageClass *klass)
 | 
			
		||||
{
 | 
			
		||||
  klass->get_width = gtk_css_image_real_get_width;
 | 
			
		||||
  klass->get_height = gtk_css_image_real_get_height;
 | 
			
		||||
  klass->get_aspect_ratio = gtk_css_image_real_get_aspect_ratio;
 | 
			
		||||
  klass->compute = gtk_css_image_real_compute;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
_gtk_css_image_init (GtkCssImage *image)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
_gtk_css_image_get_width (GtkCssImage *image)
 | 
			
		||||
{
 | 
			
		||||
  GtkCssImageClass *klass;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (GTK_IS_CSS_IMAGE (image), 0);
 | 
			
		||||
 | 
			
		||||
  klass = GTK_CSS_IMAGE_GET_CLASS (image);
 | 
			
		||||
 | 
			
		||||
  return klass->get_width (image);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
_gtk_css_image_get_height (GtkCssImage *image)
 | 
			
		||||
{
 | 
			
		||||
  GtkCssImageClass *klass;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (GTK_IS_CSS_IMAGE (image), 0);
 | 
			
		||||
 | 
			
		||||
  klass = GTK_CSS_IMAGE_GET_CLASS (image);
 | 
			
		||||
 | 
			
		||||
  return klass->get_height (image);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
double
 | 
			
		||||
_gtk_css_image_get_aspect_ratio (GtkCssImage *image)
 | 
			
		||||
{
 | 
			
		||||
  GtkCssImageClass *klass;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (GTK_IS_CSS_IMAGE (image), 0);
 | 
			
		||||
 | 
			
		||||
  klass = GTK_CSS_IMAGE_GET_CLASS (image);
 | 
			
		||||
 | 
			
		||||
  return klass->get_aspect_ratio (image);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GtkCssImage *
 | 
			
		||||
_gtk_css_image_compute (GtkCssImage     *image,
 | 
			
		||||
                        GtkStyleContext *context)
 | 
			
		||||
{
 | 
			
		||||
  GtkCssImageClass *klass;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (GTK_IS_CSS_IMAGE (image), NULL);
 | 
			
		||||
  g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
 | 
			
		||||
 | 
			
		||||
  klass = GTK_CSS_IMAGE_GET_CLASS (image);
 | 
			
		||||
 | 
			
		||||
  return klass->compute (image, context);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_gtk_css_image_draw (GtkCssImage        *image,
 | 
			
		||||
                     cairo_t            *cr,
 | 
			
		||||
                     double              width,
 | 
			
		||||
                     double              height)
 | 
			
		||||
{
 | 
			
		||||
  GtkCssImageClass *klass;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (GTK_IS_CSS_IMAGE (image));
 | 
			
		||||
  g_return_if_fail (cr != NULL);
 | 
			
		||||
 | 
			
		||||
  cairo_save (cr);
 | 
			
		||||
 | 
			
		||||
  klass = GTK_CSS_IMAGE_GET_CLASS (image);
 | 
			
		||||
 | 
			
		||||
  klass->draw (image, cr, width, height);
 | 
			
		||||
 | 
			
		||||
  cairo_restore (cr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
_gtk_css_image_print (GtkCssImage *image,
 | 
			
		||||
                      GString     *string)
 | 
			
		||||
{
 | 
			
		||||
  GtkCssImageClass *klass;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (GTK_IS_CSS_IMAGE (image));
 | 
			
		||||
  g_return_if_fail (string != NULL);
 | 
			
		||||
 | 
			
		||||
  klass = GTK_CSS_IMAGE_GET_CLASS (image);
 | 
			
		||||
 | 
			
		||||
  klass->print (image, string);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GtkCssImage *
 | 
			
		||||
_gtk_css_image_new_parse (GtkCssParser *parser,
 | 
			
		||||
                          GFile        *base)
 | 
			
		||||
{
 | 
			
		||||
  GtkCssImage *image;
 | 
			
		||||
  GtkCssImageClass *klass;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (parser != NULL, NULL);
 | 
			
		||||
  g_return_val_if_fail (G_IS_FILE (base), NULL);
 | 
			
		||||
 | 
			
		||||
  image = g_object_new (GTK_TYPE_CSS_IMAGE, NULL);
 | 
			
		||||
 | 
			
		||||
  klass = GTK_CSS_IMAGE_GET_CLASS (image);
 | 
			
		||||
  if (!klass->parse (image, parser, base))
 | 
			
		||||
    {
 | 
			
		||||
      g_object_unref (image);
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return image;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										98
									
								
								gtk/gtkcssimageprivate.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								gtk/gtkcssimageprivate.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,98 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright © 2011 Red Hat Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * This library is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
 * License as published by the Free Software Foundation; either
 | 
			
		||||
 * version 2.1 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
 | 
			
		||||
 * Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public
 | 
			
		||||
 * License along with this library; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 *
 | 
			
		||||
 * Authors: Benjamin Otte <otte@gnome.org>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __GTK_CSS_IMAGE_PRIVATE_H__
 | 
			
		||||
#define __GTK_CSS_IMAGE_PRIVATE_H__
 | 
			
		||||
 | 
			
		||||
#include <cairo.h>
 | 
			
		||||
#include <glib-object.h>
 | 
			
		||||
 | 
			
		||||
#include "gtk/gtkstylecontext.h"
 | 
			
		||||
#include "gtk/gtkcssparserprivate.h"
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define GTK_TYPE_CSS_IMAGE           (_gtk_css_image_get_type ())
 | 
			
		||||
#define GTK_CSS_IMAGE(obj)           (G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_TYPE_CSS_IMAGE, GtkCssImage))
 | 
			
		||||
#define GTK_CSS_IMAGE_CLASS(cls)     (G_TYPE_CHECK_CLASS_CAST (cls, GTK_TYPE_CSS_IMAGE, GtkCssImageClass))
 | 
			
		||||
#define GTK_IS_CSS_IMAGE(obj)        (G_TYPE_CHECK_INSTANCE_TYPE (obj, GTK_TYPE_CSS_IMAGE))
 | 
			
		||||
#define GTK_IS_CSS_IMAGE_CLASS(obj)  (G_TYPE_CHECK_CLASS_TYPE (obj, GTK_TYPE_CSS_IMAGE))
 | 
			
		||||
#define GTK_CSS_IMAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CSS_IMAGE, GtkCssImageClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _GtkCssImage           GtkCssImage;
 | 
			
		||||
typedef struct _GtkCssImageClass      GtkCssImageClass;
 | 
			
		||||
 | 
			
		||||
struct _GtkCssImage
 | 
			
		||||
{
 | 
			
		||||
  GObject parent;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _GtkCssImageClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
 | 
			
		||||
  /* width of image or 0 if it has no width (optional) */
 | 
			
		||||
  int          (* get_width)                       (GtkCssImage        *image);
 | 
			
		||||
  /* height of image or 0 if it has no height (optional) */
 | 
			
		||||
  int          (* get_height)                      (GtkCssImage        *image);
 | 
			
		||||
  /* aspect ratio (width / height) of image or 0 if it has no aspect ratio (optional) */
 | 
			
		||||
  double       (* get_aspect_ratio)                (GtkCssImage        *image);
 | 
			
		||||
 | 
			
		||||
  /* create "computed value" in CSS terms, returns a new reference */
 | 
			
		||||
  GtkCssImage *(* compute)                         (GtkCssImage        *image,
 | 
			
		||||
                                                    GtkStyleContext    *context);
 | 
			
		||||
 | 
			
		||||
  /* draw to 0,0 with the given width and height */
 | 
			
		||||
  void         (* draw)                            (GtkCssImage        *image,
 | 
			
		||||
                                                    cairo_t            *cr,
 | 
			
		||||
                                                    double              width,
 | 
			
		||||
                                                    double              height);
 | 
			
		||||
  /* parse CSS, return TRUE on success */
 | 
			
		||||
  gboolean     (* parse)                           (GtkCssImage        *image,
 | 
			
		||||
                                                    GtkCssParser       *parser,
 | 
			
		||||
                                                    GFile              *base);
 | 
			
		||||
  /* print to CSS */
 | 
			
		||||
  void         (* print)                           (GtkCssImage        *image,
 | 
			
		||||
                                                    GString            *string);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType          _gtk_css_image_get_type             (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
GtkCssImage *  _gtk_css_image_new_parse            (GtkCssParser       *parser,
 | 
			
		||||
                                                    GFile              *base);
 | 
			
		||||
 | 
			
		||||
int            _gtk_css_image_get_width            (GtkCssImage        *image);
 | 
			
		||||
int            _gtk_css_image_get_height           (GtkCssImage        *image);
 | 
			
		||||
double         _gtk_css_image_get_aspect_ratio     (GtkCssImage        *image);
 | 
			
		||||
 | 
			
		||||
GtkCssImage *  _gtk_css_image_compute              (GtkCssImage        *image,
 | 
			
		||||
                                                    GtkStyleContext    *context);
 | 
			
		||||
 | 
			
		||||
void           _gtk_css_image_draw                 (GtkCssImage        *image,
 | 
			
		||||
                                                    cairo_t            *cr,
 | 
			
		||||
                                                    double              width,
 | 
			
		||||
                                                    double              height);
 | 
			
		||||
void           _gtk_css_image_print                (GtkCssImage        *image,
 | 
			
		||||
                                                    GString            *string);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* __GTK_CSS_IMAGE_PRIVATE_H__ */
 | 
			
		||||
		Reference in New Issue
	
	Block a user