Started implementing the canvas and the document.
This commit is contained in:
parent
55c25ae1bd
commit
db46ae5505
98
src/canvas.c
98
src/canvas.c
@ -1 +1,99 @@
|
||||
/*
|
||||
* canvas.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 "canvas.h"
|
||||
#include "document.h"
|
||||
|
||||
/* http://www.gnomejournal.org/article/34/writing-a-widget-using-cairo-and-gtk28 */
|
||||
|
||||
/**
|
||||
* SECTION:canvas
|
||||
* @short_description: A canvas.
|
||||
* @see_also: #LogdiagDocument
|
||||
*
|
||||
* #LogdiagCanvas is used for displaying #LogdiagDocument objects.
|
||||
*/
|
||||
|
||||
/*
|
||||
* LogdiagCanvasPrivate:
|
||||
* @document: A document object assigned to this canvas as a model.
|
||||
*/
|
||||
struct _LogdiagCanvasPrivate
|
||||
{
|
||||
LogdiagDocument *document;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (LogdiagCanvas, logdiag_canvas, GTK_TYPE_DRAWING_AREA);
|
||||
|
||||
static void
|
||||
logdiag_canvas_finalize (GObject *gobject);
|
||||
|
||||
|
||||
static void
|
||||
logdiag_canvas_class_init (LogdiagCanvasClass *klass)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
GtkWidgetClass *widget_class;
|
||||
|
||||
object_class = G_OBJECT_CLASS (klass);
|
||||
object_class->finalize = logdiag_canvas_finalize;
|
||||
|
||||
widget_class = GTK_WIDGET_CLASS (klass);
|
||||
|
||||
/**
|
||||
* LogdiagCanvas::set-scroll-adjustments:
|
||||
* @canvas: The canvas object.
|
||||
*
|
||||
* Contents of the library have changed.
|
||||
*/
|
||||
/*
|
||||
widget_class->set_scroll_adjustments_signal = g_signal_new
|
||||
("set-scroll-adjustments", G_TYPE_FROM_CLASS (widget_class),
|
||||
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
|
||||
0, // G_STRUCT_OFFSET (LogdiagCanvasClass, ...)
|
||||
NULL, NULL,
|
||||
gtk_marshal_NONE__POINTER_POINTER,
|
||||
G_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT);
|
||||
*/
|
||||
g_type_class_add_private (klass, sizeof (LogdiagCanvasPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
logdiag_canvas_init (LogdiagCanvas *self)
|
||||
{
|
||||
self->priv = G_TYPE_INSTANCE_GET_PRIVATE
|
||||
(self, LOGDIAG_TYPE_CANVAS, LogdiagCanvasPrivate);
|
||||
}
|
||||
|
||||
static void
|
||||
logdiag_canvas_finalize (GObject *gobject)
|
||||
{
|
||||
LogdiagCanvas *self;
|
||||
|
||||
self = LOGDIAG_CANVAS (gobject);
|
||||
|
||||
/* Chain up to the parent class. */
|
||||
G_OBJECT_CLASS (logdiag_canvas_parent_class)->finalize (gobject);
|
||||
}
|
||||
|
||||
/**
|
||||
* logdiag_canvas_new:
|
||||
*
|
||||
* Create an instance.
|
||||
*/
|
||||
LogdiagCanvas *
|
||||
logdiag_canvas_new (void)
|
||||
{
|
||||
return g_object_new (LOGDIAG_TYPE_CANVAS, NULL);
|
||||
}
|
||||
|
59
src/canvas.h
59
src/canvas.h
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* canvas.h
|
||||
*
|
||||
* This file is a part of logdiag.
|
||||
* Copyright Přemysl Janouch 2010. All rights reserved.
|
||||
*
|
||||
* See the file LICENSE for licensing information.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CANVAS_H__
|
||||
#define __CANVAS_H__
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
#define LOGDIAG_TYPE_CANVAS (logdiag_canvas_get_type ())
|
||||
#define LOGDIAG_CANVAS(obj) (G_TYPE_CHECK_INSTANCE_CAST \
|
||||
((obj), LOGDIAG_TYPE_CANVAS, LogdiagCanvas))
|
||||
#define LOGDIAG_CANVAS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
|
||||
((klass), LOGDIAG_TYPE_CANVAS, LogdiagCanvasClass))
|
||||
#define LOGDIAG_IS_CANVAS(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
|
||||
((obj), LOGDIAG_TYPE_CANVAS))
|
||||
#define LOGDIAG_IS_CANVAS_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
|
||||
((klass), LOGDIAG_TYPE_CANVAS))
|
||||
#define LOGDIAG_CANVAS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
|
||||
((obj), LOGDIAG_CANVAS, LogdiagCanvasClass))
|
||||
|
||||
typedef struct _LogdiagCanvas LogdiagCanvas;
|
||||
typedef struct _LogdiagCanvasPrivate LogdiagCanvasPrivate;
|
||||
typedef struct _LogdiagCanvasClass LogdiagCanvasClass;
|
||||
|
||||
|
||||
/**
|
||||
* LogdiagCanvas:
|
||||
*/
|
||||
struct _LogdiagCanvas
|
||||
{
|
||||
/*< private >*/
|
||||
GtkDrawingArea parent_instance;
|
||||
LogdiagCanvasPrivate *priv;
|
||||
|
||||
/*< public >*/
|
||||
};
|
||||
|
||||
struct _LogdiagCanvasClass
|
||||
{
|
||||
GtkDrawingAreaClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GType logdiag_canvas_get_type (void) G_GNUC_CONST;
|
||||
|
||||
LogdiagCanvas *logdiag_canvas_new (void);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* ! __CANVAS_H__ */
|
@ -0,0 +1,91 @@
|
||||
/*
|
||||
* document.h
|
||||
*
|
||||
* This file is a part of logdiag.
|
||||
* Copyright Přemysl Janouch 2010. All rights reserved.
|
||||
*
|
||||
* See the file LICENSE for licensing information.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __DOCUMENT_H__
|
||||
#define __DOCUMENT_H__
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
#define LOGDIAG_TYPE_DOCUMENT (logdiag_symbol_library_get_type ())
|
||||
#define LOGDIAG_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST \
|
||||
((obj), LOGDIAG_TYPE_DOCUMENT, LogdiagDocument))
|
||||
#define LOGDIAG_DOCUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST \
|
||||
((klass), LOGDIAG_TYPE_DOCUMENT, LogdiagDocumentClass))
|
||||
#define LOGDIAG_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE \
|
||||
((obj), LOGDIAG_TYPE_DOCUMENT))
|
||||
#define LOGDIAG_IS_DOCUMENT_CLASS(klass) (G_TYPE_CHECK_INSTANCE_TYPE \
|
||||
((klass), LOGDIAG_TYPE_DOCUMENT))
|
||||
#define LOGDIAG_DOCUMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS \
|
||||
((obj), LOGDIAG_DOCUMENT, LogdiagDocumentClass))
|
||||
|
||||
typedef struct _LogdiagDocument LogdiagDocument;
|
||||
/*typedef struct _LogdiagDocumentPrivate LogdiagDocumentPrivate;*/
|
||||
typedef struct _LogdiagDocumentClass LogdiagDocumentClass;
|
||||
|
||||
|
||||
/**
|
||||
* LogdiagDocument:
|
||||
*/
|
||||
struct _LogdiagDocument
|
||||
{
|
||||
/*< private >*/
|
||||
GObject parent_instance;
|
||||
|
||||
/*< public >*/
|
||||
};
|
||||
|
||||
struct _LogdiagDocumentClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GType logdiag_document_get_type (void) G_GNUC_CONST;
|
||||
|
||||
LogdiagDocument *logdiag_document_new (void);
|
||||
gboolean logdiag_document_new_from_file (const char *file_name, GError *error);
|
||||
gboolean logdiag_document_save_to_file (const char *file_name, GError *error);
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* LogdiagDocumentPrivate:
|
||||
* @objects: All the objects in the document.
|
||||
*/
|
||||
struct _LogdiagDocumentPrivate
|
||||
{
|
||||
GSList *objects;
|
||||
};
|
||||
|
||||
/** The contents of the document have changed. */
|
||||
signal documentChanged (...);
|
||||
|
||||
/* TODO: A list of objects: */
|
||||
LogdiagDocumentSymbol
|
||||
LogdiagDocumentLabel
|
||||
|
||||
logdiag_document_add_symbol (LogdiagSymbol *symbol, x, y);
|
||||
|
||||
/* XXX: Separated lists of objects
|
||||
* or a single list for all objects?
|
||||
*/
|
||||
/* TODO: Wires. */
|
||||
logdiag_document_selection_...
|
||||
logdiag_document_selection_get_json (LogdiagDocument *self);
|
||||
logdiag_document_insert_json (LogdiagDocument *self);
|
||||
/** Go back or forward in the history of changes. */
|
||||
/* TODO: An interface that informs about the history. */
|
||||
logdiag_document_history_go (LogdiagDocument *self);
|
||||
#endif /* 0 */
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* ! __DOCUMENT_H__ */
|
@ -35,7 +35,7 @@ typedef struct _LogdiagSymbolCategoryClass LogdiagSymbolCategoryClass;
|
||||
* @parent: The parent object, may be LogdiagSymbolLibrary
|
||||
* or another LogdiagSymbolCategory.
|
||||
* @name: The name of the category.
|
||||
* @image_path: Path to the image of the category.
|
||||
* @image_path: Path to the image for this category.
|
||||
* @children: Children of this category.
|
||||
*/
|
||||
struct _LogdiagSymbolCategory
|
||||
@ -52,7 +52,7 @@ struct _LogdiagSymbolCategory
|
||||
|
||||
struct _LogdiagSymbolCategoryClass
|
||||
{
|
||||
GtkObjectClass parent_class;
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
|
@ -177,6 +177,7 @@ logdiag_symbol_library_load (LogdiagSymbolLibrary *self, const char *path)
|
||||
|
||||
/**
|
||||
* logdiag_symbol_library_clear:
|
||||
* @self: A symbol library object.
|
||||
*
|
||||
* Clears all the contents.
|
||||
*/
|
||||
@ -246,6 +247,7 @@ logdiag_symbol_category_finalize (GObject *gobject)
|
||||
|
||||
/**
|
||||
* logdiag_symbol_category_new:
|
||||
* @parent: The parent library for this category.
|
||||
*
|
||||
* Create an instance.
|
||||
*/
|
||||
@ -276,16 +278,72 @@ logdiag_symbol_category_new (LogdiagSymbolLibrary *parent)
|
||||
|
||||
/*
|
||||
* LogdiagSymbolPrivate:
|
||||
* @parent_library: The parent LogdiagSymbolLibrary.
|
||||
* @library: The parent LogdiagSymbolLibrary.
|
||||
* The library contains the real function for rendering.
|
||||
*/
|
||||
struct _LogdiagSymbolPrivate
|
||||
{
|
||||
LogdiagSymbolLibrary *parent_library;
|
||||
LogdiagSymbolLibrary *library;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (LogdiagSymbol, logdiag_symbol, G_TYPE_OBJECT);
|
||||
|
||||
static void
|
||||
logdiag_symbol_finalize (GObject *gobject);
|
||||
|
||||
|
||||
static void
|
||||
logdiag_symbol_class_init (LogdiagSymbolClass *klass)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
|
||||
object_class = G_OBJECT_CLASS (klass);
|
||||
object_class->finalize = logdiag_symbol_finalize;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (LogdiagSymbolPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
logdiag_symbol_init (LogdiagSymbol *self)
|
||||
{
|
||||
self->priv = G_TYPE_INSTANCE_GET_PRIVATE
|
||||
(self, LOGDIAG_TYPE_SYMBOL_LIBRARY, LogdiagSymbolPrivate);
|
||||
}
|
||||
|
||||
static void
|
||||
logdiag_symbol_finalize (GObject *gobject)
|
||||
{
|
||||
LogdiagSymbol *self;
|
||||
|
||||
self = LOGDIAG_SYMBOL (gobject);
|
||||
g_object_unref (self->priv->library);
|
||||
|
||||
/* Chain up to the parent class. */
|
||||
G_OBJECT_CLASS (logdiag_symbol_parent_class)->finalize (gobject);
|
||||
}
|
||||
|
||||
/**
|
||||
* logdiag_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.
|
||||
*/
|
||||
LogdiagSymbol *logdiag_symbol_new (LogdiagSymbolLibrary *library,
|
||||
const gchar *filename)
|
||||
{
|
||||
LogdiagSymbol *symbol;
|
||||
|
||||
symbol = g_object_new (LOGDIAG_TYPE_SYMBOL, NULL);
|
||||
/* TODO: Use the filename, Luke. */
|
||||
|
||||
symbol->priv->library = library;
|
||||
g_object_ref (library);
|
||||
}
|
||||
|
||||
/**
|
||||
* logdiag_symbol_build_identifier:
|
||||
* @self: A symbol object.
|
||||
*
|
||||
* Build an identifier for the symbol.
|
||||
* The identifier is in the format "Category/Category/Symbol".
|
||||
@ -298,6 +356,12 @@ logdiag_symbol_build_identifier (LogdiagSymbol *self)
|
||||
|
||||
/**
|
||||
* logdiag_symbol_draw:
|
||||
* @self: A symbol object.
|
||||
* @surface: A cairo surface to be drawn on.
|
||||
* @param: Parameters for the symbol in a table.
|
||||
* @x: The X coordinate on the surface.
|
||||
* @y: The Y coordinate on the surface.
|
||||
* @zoom: Zoom ratio.
|
||||
*
|
||||
* Draw the symbol onto a Cairo surface.
|
||||
*/
|
||||
|
12
src/symbol.h
12
src/symbol.h
@ -27,34 +27,34 @@ G_BEGIN_DECLS
|
||||
((obj), LOGDIAG_SYMBOL, LogdiagSymbolClass))
|
||||
|
||||
typedef struct _LogdiagSymbol LogdiagSymbol;
|
||||
/*typedef struct _LogdiagSymbolPrivate LogdiagSymbolPrivate;*/
|
||||
typedef struct _LogdiagSymbolPrivate LogdiagSymbolPrivate;
|
||||
typedef struct _LogdiagSymbolClass LogdiagSymbolClass;
|
||||
|
||||
|
||||
/**
|
||||
* LogdiagSymbol:
|
||||
* @parent: The parent category.
|
||||
* @name: The name of this symbol.
|
||||
*/
|
||||
struct _LogdiagSymbol
|
||||
{
|
||||
/*< private >*/
|
||||
GObject parent_instance;
|
||||
/* LogdiagSymbolPrivate *priv;*/
|
||||
LogdiagSymbolPrivate *priv;
|
||||
|
||||
/*< public >*/
|
||||
LogdiagSymbolCategory *parent;
|
||||
char *name;
|
||||
gchar *name;
|
||||
};
|
||||
|
||||
struct _LogdiagSymbolClass
|
||||
{
|
||||
GtkObjectClass parent_class;
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GType logdiag_symbol_get_type (void) G_GNUC_CONST;
|
||||
|
||||
LogdiagSymbol *logdiag_symbol_new (LogdiagSymbolLibrary *library,
|
||||
const gchar *filename);
|
||||
char *logdiag_symbol_build_identifier (LogdiagSymbol *self);
|
||||
void logdiag_symbol_draw (LogdiagSymbol *self, cairo_t *surface,
|
||||
GHashTable *param, gint x, gint y, gdouble zoom);
|
||||
|
@ -13,8 +13,11 @@
|
||||
#include "config.h"
|
||||
|
||||
#include "window-main.h"
|
||||
#include "canvas.h"
|
||||
#include "document.h"
|
||||
#include "symbol-library.h"
|
||||
#include "symbol-category.h"
|
||||
#include "symbol.h"
|
||||
|
||||
|
||||
/**
|
||||
@ -37,11 +40,19 @@ struct _LogdiagWindowMainPrivate
|
||||
GtkWidget *toolbar;
|
||||
|
||||
LogdiagSymbolLibrary *library;
|
||||
LogdiagCanvas *canvas;
|
||||
|
||||
GtkWidget *statusbar;
|
||||
guint statusbar_menu_context_id;
|
||||
};
|
||||
|
||||
struct DocumentData
|
||||
{
|
||||
LogdiagDocument *document;
|
||||
const gchar *file_name;
|
||||
/* Canvas viewport settings (for multitabbed) */
|
||||
};
|
||||
|
||||
/* Define the type. */
|
||||
G_DEFINE_TYPE (LogdiagWindowMain, logdiag_window_main, GTK_TYPE_WINDOW);
|
||||
|
||||
@ -219,6 +230,11 @@ logdiag_window_main_init (LogdiagWindowMain *self)
|
||||
|
||||
load_toolbar (self);
|
||||
|
||||
/* Canvas. */
|
||||
priv->canvas = logdiag_canvas_new ();
|
||||
gtk_box_pack_start (GTK_BOX (priv->hbox), GTK_WIDGET (priv->canvas),
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
/* TODO: GtkHPaned */
|
||||
|
||||
priv->statusbar = gtk_statusbar_new ();
|
||||
@ -227,7 +243,7 @@ logdiag_window_main_init (LogdiagWindowMain *self)
|
||||
gtk_box_pack_end (GTK_BOX (priv->vbox), priv->statusbar, FALSE, FALSE, 0);
|
||||
|
||||
|
||||
/* Do this on disposal. */
|
||||
/* TODO: Do this on disposal. */
|
||||
/* g_object_unref(ui_manager); */
|
||||
|
||||
/* Proceed to showing the window. */
|
||||
|
Loading…
Reference in New Issue
Block a user