From 0b3028d4b56b2b37c992d298189ca4fba3a5071e Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 17 Nov 2014 23:51:29 +0100 Subject: GObjectification, part I --- src/colloquium.c | 5 ++- src/narrative_window.c | 2 +- src/sc_editor.c | 84 ++++--------------------------------- src/sc_editor.h | 110 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 121 insertions(+), 80 deletions(-) (limited to 'src') diff --git a/src/colloquium.c b/src/colloquium.c index 51b60c9..e3ee61f 100644 --- a/src/colloquium.c +++ b/src/colloquium.c @@ -28,14 +28,15 @@ #include #include +#include "colloquium.h" #include "presentation.h" #include "narrative_window.h" -typedef struct +struct _colloquium { GtkApplication parent_instance; -} Colloquium; +}; typedef GtkApplicationClass ColloquiumClass; diff --git a/src/narrative_window.c b/src/narrative_window.c index 931cf6f..d868bda 100644 --- a/src/narrative_window.c +++ b/src/narrative_window.c @@ -158,7 +158,7 @@ NarrativeWindow *narrative_window_new(struct presentation *p, GApplication *app) GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), - sc_editor_get_widget(nw->sceditor)); + GTK_WIDGET(nw->sceditor)); /* Size of SCEditor surface in pixels */ /* FIXME: Somewhat arbitrary. Should come from slide itself */ diff --git a/src/sc_editor.c b/src/sc_editor.c index bde1731..d55c0bb 100644 --- a/src/sc_editor.c +++ b/src/sc_editor.c @@ -33,6 +33,7 @@ #include #include +#include "colloquium.h" #include "presentation.h" #include "slide_window.h" #include "render.h" @@ -44,86 +45,17 @@ #include "slideshow.h" -enum drag_reason -{ - DRAG_REASON_NONE, - DRAG_REASON_CREATE, - DRAG_REASON_IMPORT, - DRAG_REASON_RESIZE, - DRAG_REASON_MOVE -}; - - -enum corner -{ - CORNER_NONE, - CORNER_TL, - CORNER_TR, - CORNER_BL, - CORNER_BR -}; +G_DEFINE_TYPE(SCEditor, sc_editor, GTK_TYPE_DRAWING_AREA); -enum drag_status +static void sc_editor_class_init(SCEditorClass *klass) { - DRAG_STATUS_NONE, - DRAG_STATUS_COULD_DRAG, - DRAG_STATUS_DRAGGING, -}; +} -struct _sceditor +static void sc_editor_init(SCEditor *self) { - GtkWidget *drawingarea; - GtkIMContext *im_context; - int w; /* Surface size in pixels */ - int h; - double log_w; /* Size of surface in "SC units" */ - double log_h; - SCBlock *scblocks; - cairo_surface_t *surface; - struct frame top; - SCBlock *stylesheet; - ImageStore *is; - - /* Pointers to the frame currently being edited */ - struct frame *selection; - - PangoContext *pc; - - /* Location of the cursor */ - struct frame *cursor_frame; - int cursor_line; - int cursor_box; - int cursor_pos; /* characters into box */ - - /* Border surrounding actual slide within drawingarea */ - double border_offs_x; - double border_offs_y; - - /* Rubber band boxes and related stuff */ - double start_corner_x; - double start_corner_y; - double drag_corner_x; - double drag_corner_y; - double diagonal_length; - double box_x; - double box_y; - double box_width; - double box_height; - enum drag_reason drag_reason; - enum drag_status drag_status; - enum corner drag_corner; - - /* Stuff to do with drag and drop import of "content" */ - int drag_preview_pending; - int have_drag_data; - int drag_highlight; - double import_width; - double import_height; - int import_acceptable; - -}; +} /* Update the view, once it's been edited in some way. */ @@ -1466,14 +1398,12 @@ void sc_editor_set_logical_size(SCEditor *e, double w, double h) } -/* FIXME: GObjectify this */ SCEditor *sc_editor_new(SCBlock *scblocks, SCBlock *stylesheet) { SCEditor *sceditor; GtkTargetEntry targets[1]; - sceditor = calloc(1, sizeof(SCEditor)); - if ( sceditor == NULL ) return NULL; + sceditor = g_object_new(SC_TYPE_EDITOR, NULL); sceditor->scblocks = scblocks; sceditor->drawingarea = gtk_drawing_area_new(); diff --git a/src/sc_editor.h b/src/sc_editor.h index 6a65bd5..9f1d96c 100644 --- a/src/sc_editor.h +++ b/src/sc_editor.h @@ -28,10 +28,120 @@ #endif #include +#include +#include "frame.h" struct presentation; + + +#define SC_TYPE_EDITOR (sc_editor_get_type()) + +#define SC_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + SC_TYPE_EDITOR, SCEditor)) + +#define SC_IS_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + SC_TYPE_EDITOR)) + +#define SC_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((obj), \ + SC_TYPE_EDITOR, SCEditorClass)) + +#define SC_IS_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((obj), \ + SC_TYPE_EDITOR)) + +#define SC_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), \ + SC_TYPE_EDITOR, SCEditorClass)) + +enum drag_reason +{ + DRAG_REASON_NONE, + DRAG_REASON_CREATE, + DRAG_REASON_IMPORT, + DRAG_REASON_RESIZE, + DRAG_REASON_MOVE +}; + + +enum corner +{ + CORNER_NONE, + CORNER_TL, + CORNER_TR, + CORNER_BL, + CORNER_BR +}; + + +enum drag_status +{ + DRAG_STATUS_NONE, + DRAG_STATUS_COULD_DRAG, + DRAG_STATUS_DRAGGING, +}; + + +struct _sceditor +{ + GtkDrawingArea parent_instance; + + /*< private >*/ + GtkWidget *drawingarea; + GtkIMContext *im_context; + int w; /* Surface size in pixels */ + int h; + double log_w; /* Size of surface in "SC units" */ + double log_h; + SCBlock *scblocks; + cairo_surface_t *surface; + struct frame top; + SCBlock *stylesheet; + ImageStore *is; + + /* Pointers to the frame currently being edited */ + struct frame *selection; + + PangoContext *pc; + + /* Location of the cursor */ + struct frame *cursor_frame; + int cursor_line; + int cursor_box; + int cursor_pos; /* characters into box */ + + /* Border surrounding actual slide within drawingarea */ + double border_offs_x; + double border_offs_y; + + /* Rubber band boxes and related stuff */ + double start_corner_x; + double start_corner_y; + double drag_corner_x; + double drag_corner_y; + double diagonal_length; + double box_x; + double box_y; + double box_width; + double box_height; + enum drag_reason drag_reason; + enum drag_status drag_status; + enum corner drag_corner; + + /* Stuff to do with drag and drop import of "content" */ + int drag_preview_pending; + int have_drag_data; + int drag_highlight; + double import_width; + double import_height; + int import_acceptable; +}; + +struct _sceditorclass +{ + GtkDrawingAreaClass parent_class; +}; + typedef struct _sceditor SCEditor; +typedef struct _sceditorclass SCEditorClass; extern void sc_editor_set_scblock(SCEditor *e, SCBlock *scblocks); extern GtkWidget *sc_editor_get_widget(SCEditor *e); -- cgit v1.2.3