Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/dvi/view.cc
diff options
context:
space:
mode:
authorSøren Sandmann <sandmann@redhat.com>2004-12-21 23:57:26 (GMT)
committer Søren Sandmann Pedersen <ssp@src.gnome.org>2004-12-21 23:57:26 (GMT)
commit4296951e94a43c723e9522b588cab178eb66d144 (patch)
tree63ba229741d10df67fe87f24b6241903e16e9764 /dvi/view.cc
parent3e73e947a3a8c03da8f35f52e2a42ba066e2be2a (diff)
New directory with the beginning of a .dvi backend.
Tue Dec 21 18:55:06 2004 Søren Sandmann <sandmann@redhat.com> * dvi/*: New directory with the beginning of a .dvi backend.
Diffstat (limited to 'dvi/view.cc')
-rwxr-xr-xdvi/view.cc113
1 files changed, 113 insertions, 0 deletions
diff --git a/dvi/view.cc b/dvi/view.cc
new file mode 100755
index 0000000..0f2f4b5
--- /dev/null
+++ b/dvi/view.cc
@@ -0,0 +1,113 @@
+#include "view.hh"
+#include "dl-dvi-fontdefinition.hh"
+
+using DviLib::DviPage;
+using DviLib::DviFontdefinition;
+
+View::View (Model *model_arg)
+{
+ model = model_arg;
+
+ model->add_observer (*this);
+
+ drawing_area = gtk_drawing_area_new ();
+ gtk_widget_show (drawing_area);
+ gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area),
+ BASE_DPI * PAPER_WIDTH,
+ BASE_DPI * PAPER_HEIGHT);
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "realize",
+ (GtkSignalFunc) on_da_realize, this);
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
+ (GtkSignalFunc) on_da_expose, this);
+}
+
+void
+View::create_pixmap (void)
+{
+ pixmap = gdk_pixmap_new(drawing_area->window,
+ BASE_DPI * PAPER_WIDTH,
+ BASE_DPI * PAPER_HEIGHT,
+ -1);
+}
+
+void
+View::expose (GdkEventExpose *event)
+{
+ gdk_draw_pixmap (
+ drawing_area->window,
+ drawing_area->style->fg_gc[GTK_WIDGET_STATE (drawing_area)],
+ pixmap,
+ event->area.x, event->area.y,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
+}
+
+void
+View::redraw (void) const
+{
+ // clear page
+ gdk_draw_rectangle (pixmap,
+ drawing_area->style->white_gc,
+ TRUE, 0, 0,
+ BASE_DPI * PAPER_WIDTH,
+ BASE_DPI * PAPER_HEIGHT);
+
+ cout << "width " << BASE_DPI * PAPER_WIDTH << endl;
+ cout << "height " << BASE_DPI * PAPER_HEIGHT << endl;
+
+ // create a painter
+ DviPainter *painter =
+ new DviPainter (pixmap,
+ drawing_area->style->fg_gc[GTK_WIDGET_STATE
+ (drawing_area)],
+ model->get_dvi_file (),
+ BASE_DPI,
+ new FontFactory());
+ // get page
+ DviPage *page;
+ try
+ {
+ page = model->get_dvi_file ()->get_page (0);
+ }
+ catch (string s)
+ {
+ cout << s;
+ abort ();
+ }
+
+ // draw it with the painter
+ page->execute (* painter);
+
+}
+
+void
+View::notify (void) const
+{
+ ModelState state = model->get_state ();
+
+ switch (state) {
+ case HAS_FILE:
+ redraw ();
+ break;
+
+ case NO_FILE:
+ break;
+
+ case ERROR:
+ break;
+ }
+}
+
+void
+on_da_realize (GtkDrawingArea *da, View *v)
+{
+ v->create_pixmap ();
+ v->notify ();
+}
+
+gint
+on_da_expose (GtkWidget *widget, GdkEventExpose *event, View *v)
+{
+ v->expose (event);
+ return FALSE;
+}