Convert LdSymbol into an abstract class.
Created LdLuaSymbol, which subclasses LdSymbol.
This commit is contained in:
parent
23a1f25130
commit
efe45e9601
|
@ -91,7 +91,8 @@ set (logdiag_SOURCES
|
|||
src/ld-library.c
|
||||
src/ld-symbol-category.c
|
||||
src/ld-symbol.c
|
||||
src/ld-lua.c)
|
||||
src/ld-lua.c
|
||||
src/ld-lua-symbol.c)
|
||||
set (logdiag_HEADERS
|
||||
${CMAKE_CURRENT_BINARY_DIR}/config.h
|
||||
src/ld-marshal.h
|
||||
|
@ -101,7 +102,8 @@ set (logdiag_HEADERS
|
|||
src/ld-library.h
|
||||
src/ld-symbol-category.h
|
||||
src/ld-symbol.h
|
||||
src/ld-lua.h)
|
||||
src/ld-lua.h
|
||||
src/ld-lua-symbol.h)
|
||||
|
||||
# Generate a configure file
|
||||
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
|
||||
|
|
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
* ld-lua-symbol.c
|
||||
*
|
||||
* This file is a part of logdiag.
|
||||
* Copyright Přemysl Janouch 2010. All rights reserved.
|
||||
*
|
||||
* See the file LICENSE for licensing information.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "ld-library.h"
|
||||
#include "ld-symbol.h"
|
||||
#include "ld-symbol-category.h"
|
||||
#include "ld-lua.h"
|
||||
#include "ld-lua-symbol.h"
|
||||
|
||||
|
||||
/**
|
||||
* SECTION:ld-lua-symbol
|
||||
* @short_description: A symbol.
|
||||
* @see_also: #LdSymbol
|
||||
*
|
||||
* #LdLuaSymbol is an implementation of #LdSymbol.
|
||||
*/
|
||||
|
||||
/*
|
||||
* LdLuaSymbolPrivate:
|
||||
* @lua: Parent Lua object.
|
||||
*/
|
||||
struct _LdLuaSymbolPrivate
|
||||
{
|
||||
LdLua *lua;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (LdLuaSymbol, ld_lua_symbol, LD_TYPE_SYMBOL);
|
||||
|
||||
static void ld_lua_symbol_finalize (GObject *gobject);
|
||||
|
||||
|
||||
static void
|
||||
ld_lua_symbol_class_init (LdLuaSymbolClass *klass)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
|
||||
object_class = G_OBJECT_CLASS (klass);
|
||||
object_class->finalize = ld_lua_symbol_finalize;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (LdLuaSymbolPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
ld_lua_symbol_init (LdLuaSymbol *self)
|
||||
{
|
||||
self->priv = G_TYPE_INSTANCE_GET_PRIVATE
|
||||
(self, LD_TYPE_LUA_SYMBOL, LdLuaSymbolPrivate);
|
||||
}
|
||||
|
||||
static void
|
||||
ld_lua_symbol_finalize (GObject *gobject)
|
||||
{
|
||||
LdLuaSymbol *self;
|
||||
|
||||
self = LD_LUA_SYMBOL (gobject);
|
||||
g_object_unref (self->priv->lua);
|
||||
|
||||
/* Chain up to the parent class. */
|
||||
G_OBJECT_CLASS (ld_lua_symbol_parent_class)->finalize (gobject);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ld_symbol_new:
|
||||
* @library: A library object.
|
||||
* @filename: The file from which the symbol will be loaded.
|
||||
*
|
||||
* Load a symbol from a file into the library.
|
||||
*/
|
||||
LdSymbol *
|
||||
ld_lua_symbol_new (LdSymbolCategory *parent, LdLua *lua)
|
||||
{
|
||||
LdLuaSymbol *symbol;
|
||||
|
||||
symbol = g_object_new (LD_TYPE_LUA_SYMBOL, NULL);
|
||||
|
||||
/* TODO: Create a separate ld-symbol-private.h, include it in this file
|
||||
* and then assign and ref the parent category here.
|
||||
*/
|
||||
|
||||
symbol->priv->lua = lua;
|
||||
g_object_ref (lua);
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* ld-lua-symbol.h
|
||||
*
|
||||
* This file is a part of logdiag.
|
||||
* Copyright Přemysl Janouch 2010. All rights reserved.
|
||||
*
|
||||
* See the file LICENSE for licensing information.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __LD_LUA_SYMBOL_H__
|
||||
#define __LD_LUA_SYMBOL_H__
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
#define LD_TYPE_LUA_SYMBOL (ld_lua_symbol_get_type ())
|
||||
#define LD_LUA_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST \
|
||||
((obj), LD_TYPE_LUA_SYMBOL, LdLuaSymbol))
|
||||
#define LD_LUA_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
|
||||
((klass), LD_TYPE_LUA_SYMBOL, LdLuaSymbolClass))
|
||||
#define LD_IS_LUA_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
|
||||
((obj), LD_TYPE_LUA_SYMBOL))
|
||||
#define LD_IS_LUA_SYMBOL_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
|
||||
((klass), LD_TYPE_LUA_SYMBOL))
|
||||
#define LD_LUA_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
|
||||
((obj), LD_LUA_SYMBOL, LdLuaSymbolClass))
|
||||
|
||||
typedef struct _LdLuaSymbol LdLuaSymbol;
|
||||
typedef struct _LdLuaSymbolPrivate LdLuaSymbolPrivate;
|
||||
typedef struct _LdLuaSymbolClass LdLuaSymbolClass;
|
||||
|
||||
|
||||
/**
|
||||
* LdLuaSymbol:
|
||||
* @name: The name of this symbol.
|
||||
*/
|
||||
struct _LdLuaSymbol
|
||||
{
|
||||
/*< private >*/
|
||||
LdSymbol parent_instance;
|
||||
LdLuaSymbolPrivate *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* LdLuaSymbolClass:
|
||||
* @parent_class: The parent class.
|
||||
*/
|
||||
struct _LdLuaSymbolClass
|
||||
{
|
||||
LdSymbolClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GType ld_lua_symbol_get_type (void) G_GNUC_CONST;
|
||||
|
||||
LdSymbol *ld_lua_symbol_new (LdSymbolCategory *parent, LdLua *lua);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* ! __LD_LUA_SYMBOL_H__ */
|
||||
|
|
@ -28,18 +28,17 @@
|
|||
|
||||
/*
|
||||
* LdSymbolPrivate:
|
||||
* @library: The parent LdLibrary.
|
||||
* The library contains the real function for rendering.
|
||||
* @parent: The parent LdSymbolCategory. It is used to identify
|
||||
* the object within it's library.
|
||||
*/
|
||||
struct _LdSymbolPrivate
|
||||
{
|
||||
LdLibrary *library;
|
||||
LdSymbolCategory *parent;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (LdSymbol, ld_symbol, G_TYPE_OBJECT);
|
||||
G_DEFINE_ABSTRACT_TYPE (LdSymbol, ld_symbol, G_TYPE_OBJECT);
|
||||
|
||||
static void
|
||||
ld_symbol_finalize (GObject *gobject);
|
||||
static void ld_symbol_finalize (GObject *gobject);
|
||||
|
||||
|
||||
static void
|
||||
|
@ -57,7 +56,7 @@ static void
|
|||
ld_symbol_init (LdSymbol *self)
|
||||
{
|
||||
self->priv = G_TYPE_INSTANCE_GET_PRIVATE
|
||||
(self, LD_TYPE_SYMBOL_LIBRARY, LdSymbolPrivate);
|
||||
(self, LD_TYPE_SYMBOL, LdSymbolPrivate);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -66,29 +65,12 @@ ld_symbol_finalize (GObject *gobject)
|
|||
LdSymbol *self;
|
||||
|
||||
self = LD_SYMBOL (gobject);
|
||||
g_object_unref (self->priv->library);
|
||||
g_object_unref (self->priv->parent);
|
||||
|
||||
/* Chain up to the parent class. */
|
||||
G_OBJECT_CLASS (ld_symbol_parent_class)->finalize (gobject);
|
||||
}
|
||||
|
||||
/**
|
||||
* ld_symbol_new:
|
||||
* @library: A library object.
|
||||
* @filename: The file from which the symbol will be loaded.
|
||||
*
|
||||
* Load a symbol from a file into the library.
|
||||
*/
|
||||
LdSymbol *ld_symbol_new (LdLibrary *library)
|
||||
{
|
||||
LdSymbol *symbol;
|
||||
|
||||
symbol = g_object_new (LD_TYPE_SYMBOL, NULL);
|
||||
|
||||
symbol->priv->library = library;
|
||||
g_object_ref (library);
|
||||
}
|
||||
|
||||
/**
|
||||
* ld_symbol_build_identifier:
|
||||
* @self: A symbol object.
|
||||
|
@ -96,9 +78,10 @@ LdSymbol *ld_symbol_new (LdLibrary *library)
|
|||
* Build an identifier for the symbol.
|
||||
* The identifier is in the format "Category/Category/Symbol".
|
||||
*/
|
||||
char *
|
||||
gchar *
|
||||
ld_symbol_build_identifier (LdSymbol *self)
|
||||
{
|
||||
/* TODO: Implement. */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -106,12 +89,18 @@ ld_symbol_build_identifier (LdSymbol *self)
|
|||
* ld_symbol_draw:
|
||||
* @self: A symbol object.
|
||||
* @cr: A cairo surface to be drawn on.
|
||||
* @param: Parameters for the symbol in a table.
|
||||
*
|
||||
* Draw the symbol onto a Cairo surface.
|
||||
*/
|
||||
void
|
||||
ld_symbol_draw (LdSymbol *self, cairo_t *cr, GHashTable *param)
|
||||
ld_symbol_draw (LdSymbol *self, cairo_t *cr)
|
||||
{
|
||||
return;
|
||||
LdSymbolClass *klass;
|
||||
|
||||
g_return_if_fail (LD_IS_SYMBOL (self));
|
||||
g_return_if_fail (cr != NULL);
|
||||
|
||||
klass = LD_SYMBOL_GET_CLASS (self);
|
||||
if (klass->draw)
|
||||
klass->draw (self, cr);
|
||||
}
|
||||
|
|
|
@ -45,19 +45,26 @@ struct _LdSymbol
|
|||
gchar *name;
|
||||
};
|
||||
|
||||
/**
|
||||
* LdSymbolClass:
|
||||
* @parent_class: The parent class.
|
||||
* @draw: Draw the symbol on a Cairo surface.
|
||||
*/
|
||||
struct _LdSymbolClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
void (*draw) (LdSymbol *self, cairo_t *cr);
|
||||
};
|
||||
|
||||
|
||||
GType ld_symbol_get_type (void) G_GNUC_CONST;
|
||||
|
||||
LdSymbol *ld_symbol_new (LdLibrary *library);
|
||||
gchar *ld_symbol_build_identifier (LdSymbol *self);
|
||||
void ld_symbol_draw (LdSymbol *self, cairo_t *cr, GHashTable *param);
|
||||
|
||||
/* TODO: An interface for symbol terminals. */
|
||||
void ld_symbol_draw (LdSymbol *self, cairo_t *cr);
|
||||
|
||||
/* TODO: An interface for symbol terminals etc. */
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
|
Loading…
Reference in New Issue