📄 ptk-file-icon-renderer.c
字号:
/** C Implementation: ptkfileiconrenderer** Description: PtkFileIconRenderer is used to render file icons*** Author: Hong Jen Yee (PCMan) <pcman.tw (AT) gmail.com>, (C) 2006** Copyright: See COPYING file that comes with this distribution** Part of this class is taken from GtkCellRendererPixbuf written by* Red Hat, Inc., Jonathan Blandford <jrb@redhat.com>**/#include "ptk-file-icon-renderer.h"static voidptk_file_icon_renderer_init ( PtkFileIconRenderer *renderer );static voidptk_file_icon_renderer_class_init ( PtkFileIconRendererClass *klass );static voidptk_file_icon_renderer_get_property ( GObject *object, guint param_id, GValue *value, GParamSpec *pspec );static voidptk_file_icon_renderer_set_property ( GObject *object, guint param_id, const GValue *value, GParamSpec *pspec );static voidptk_file_icon_renderer_finalize ( GObject *gobject );static voidptk_file_icon_renderer_get_size ( GtkCellRenderer *cell, GtkWidget *widget, GdkRectangle *cell_area, gint *x_offset, gint *y_offset, gint *width, gint *height );static voidptk_file_icon_renderer_render ( GtkCellRenderer *cell, GdkWindow *window, GtkWidget *widget, GdkRectangle *background_area, GdkRectangle *cell_area, GdkRectangle *expose_area, guint flags );enum{ PROP_INFO = 1, PROP_FLAGS, PROP_FOLLOW_STATE};static gpointer parent_class;static GdkPixbuf* link_icon = NULL;/* GdkPixbuf RGBA C-Source image dump */#ifdef __SUNPRO_C#pragma align 4 (link_icon_data)#endif#ifdef __GNUC__static const guint8 link_icon_data[] __attribute__ ((__aligned__ (4))) =#elsestatic const guint8 link_icon_data[] =#endif { "" /* Pixbuf magic (0x47646b50) */ "GdkP" /* length: header (24) + pixel_data (400) */ "\0\0\1\250" /* pixdata_type (0x1010002) */ "\1\1\0\2" /* rowstride (40) */ "\0\0\0(" /* width (10) */ "\0\0\0\12" /* height (10) */ "\0\0\0\12" /* pixel_data: */ "\200\200\200\377\200\200\200\377\200\200\200\377\200\200\200\377\200" "\200\200\377\200\200\200\377\200\200\200\377\200\200\200\377\200\200" "\200\377\0\0\0\377\200\200\200\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\0\0\0\377\200\200\200\377\377\377\377\377\0" "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\377\377\377\377\377" "\377\377\377\0\0\0\377\200\200\200\377\377\377\377\377\0\0\0\377\0\0" "\0\377\0\0\0\377\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\0\0\0\377\200\200\200\377\377\377\377\377\0\0\0\377\0\0\0\377\0" "\0\0\377\0\0\0\377\0\0\0\377\377\377\377\377\377\377\377\377\0\0\0\377" "\200\200\200\377\377\377\377\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" "\377\0\0\0\377\0\0\0\377\377\377\377\377\0\0\0\377\200\200\200\377\377" "\377\377\377\0\0\0\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0" "\0\377\0\0\0\377\377\377\377\377\0\0\0\377\200\200\200\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0" "\377\0\0\0\377\377\377\377\377\0\0\0\377\200\200\200\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\377\0\0\0\377" "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" "\0\0\0\377\0\0\0\377" };/*************************************************************************** * * ptk_file_icon_renderer_get_type: here we register our type with * the GObject type system if we * haven't done so yet. Everything * else is done in the callbacks. * ***************************************************************************/GTypeptk_file_icon_renderer_get_type ( void ){ static GType renderer_type = 0; if ( G_UNLIKELY( !renderer_type ) ) { static const GTypeInfo renderer_info = { sizeof ( PtkFileIconRendererClass ), NULL, /* base_init */ NULL, /* base_finalize */ ( GClassInitFunc ) ptk_file_icon_renderer_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof ( PtkFileIconRenderer ), 0, /* n_preallocs */ ( GInstanceInitFunc ) ptk_file_icon_renderer_init, }; /* Derive from GtkCellRendererPixbuf */ renderer_type = g_type_register_static ( GTK_TYPE_CELL_RENDERER_PIXBUF, "PtkFileIconRenderer", &renderer_info, 0 ); } return renderer_type;}/*************************************************************************** * * ptk_file_icon_renderer_init: set some default properties of the * parent (GtkCellRendererPixbuf). * ***************************************************************************/static voidptk_file_icon_renderer_init ( PtkFileIconRenderer *renderer ){ if ( !link_icon ) { link_icon = gdk_pixbuf_new_from_inline( sizeof(link_icon_data), link_icon_data, FALSE, NULL ); g_object_add_weak_pointer( G_OBJECT(link_icon), (gpointer)&link_icon ); } else gdk_pixbuf_ref( (link_icon) );}/*************************************************************************** * * ptk_file_icon_renderer_class_init: * ***************************************************************************/static voidptk_file_icon_renderer_class_init ( PtkFileIconRendererClass *klass ){ GtkCellRendererClass * parent_renderer_class = GTK_CELL_RENDERER_CLASS( klass ); GObjectClass *object_class = G_OBJECT_CLASS( klass ); parent_class = g_type_class_peek_parent ( klass ); object_class->finalize = ptk_file_icon_renderer_finalize; /* Hook up functions to set and get our * custom cell renderer properties */ object_class->get_property = ptk_file_icon_renderer_get_property; object_class->set_property = ptk_file_icon_renderer_set_property; parent_renderer_class->get_size = ptk_file_icon_renderer_get_size; parent_renderer_class->render = ptk_file_icon_renderer_render; g_object_class_install_property ( object_class, PROP_INFO, g_param_spec_pointer ( "info", "File info", "File info", G_PARAM_READWRITE ) ); g_object_class_install_property ( object_class, PROP_FOLLOW_STATE, g_param_spec_boolean ( "follow-state", "Follow State", "Whether the rendered pixbuf should be " "colorized according to the state", FALSE, G_PARAM_READWRITE ) );}/*************************************************************************** * * ptk_file_icon_renderer_finalize: free any resources here * ***************************************************************************/static voidptk_file_icon_renderer_finalize ( GObject *object ){ PtkFileIconRenderer* renderer = PTK_FILE_ICON_RENDERER(object); if( renderer->info ) vfs_file_info_unref( renderer->info ); gdk_pixbuf_unref( (link_icon) ); ( * G_OBJECT_CLASS ( parent_class ) ->finalize ) ( object );}/*************************************************************************** * * ptk_file_icon_renderer_get_property: as it says * ***************************************************************************/static voidptk_file_icon_renderer_get_property ( GObject *object, guint param_id, GValue *value, GParamSpec *psec ){ PtkFileIconRenderer * renderer = PTK_FILE_ICON_RENDERER( object ); switch ( param_id ) { /* case PROP_FLAGS: g_value_set_long(value, renderer->flags); break; */ case PROP_INFO: if( renderer->info ) vfs_file_info_ref( renderer->info ); g_value_set_pointer( value, renderer->info ); case PROP_FOLLOW_STATE: g_value_set_boolean ( value, renderer->follow_state ); default: G_OBJECT_WARN_INVALID_PROPERTY_ID ( object, param_id, psec ); break; }}/*************************************************************************** * * ptk_file_icon_renderer_set_property: as it says * ***************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -