]> www.fi.muni.cz Git - evince.git/blob - dvi/view.cc
Updated Swedish translation.
[evince.git] / dvi / view.cc
1 #include "view.hh"
2 #include "dl-dvi-fontdefinition.hh"
3
4 using DviLib::DviPage;
5 using DviLib::DviFontdefinition;
6
7 View::View (Model *model_arg)
8 {
9     model = model_arg;
10     
11     model->add_observer (*this);
12     
13     drawing_area = gtk_drawing_area_new ();
14     gtk_widget_show (drawing_area);
15     gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 
16                            BASE_DPI * PAPER_WIDTH,
17                            BASE_DPI * PAPER_HEIGHT);
18     gtk_signal_connect (GTK_OBJECT (drawing_area), "realize",
19                         (GtkSignalFunc) on_da_realize, this);
20     gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
21                         (GtkSignalFunc) on_da_expose, this);
22 }
23
24 void
25 View::create_pixmap (void)
26 {
27     pixmap = gdk_pixmap_new(drawing_area->window,
28                             BASE_DPI * PAPER_WIDTH,
29                             BASE_DPI * PAPER_HEIGHT,
30                             -1);
31 }
32
33 void
34 View::expose (GdkEventExpose *event)
35 {
36     gdk_draw_pixmap (
37         drawing_area->window,
38         drawing_area->style->fg_gc[GTK_WIDGET_STATE (drawing_area)],
39         pixmap,
40         event->area.x,     event->area.y,
41         event->area.x,     event->area.y,
42         event->area.width, event->area.height);
43 }
44
45 void
46 View::redraw (void) const
47 {
48     // clear page
49     gdk_draw_rectangle (pixmap, 
50                         drawing_area->style->white_gc,
51                         TRUE, 0, 0,
52                         BASE_DPI * PAPER_WIDTH,
53                         BASE_DPI * PAPER_HEIGHT);
54     
55     cout << "width " << BASE_DPI * PAPER_WIDTH << endl;
56     cout << "height " << BASE_DPI * PAPER_HEIGHT << endl;
57     
58     // create a painter
59     DviPainter *painter =                               
60         new DviPainter (pixmap,
61                         drawing_area->style->fg_gc[GTK_WIDGET_STATE 
62                                                    (drawing_area)],
63                         model->get_dvi_file (),
64                         BASE_DPI,
65                         new FontFactory());
66     // get page
67     DviPage *page;
68     try 
69     {
70         page = model->get_dvi_file ()->get_page (0);
71     }
72     catch (string s)
73     {
74         cout << s;
75         abort ();
76     }
77     
78     // draw it with the painter
79     page->execute (* painter);
80     
81 }
82
83 void
84 View::notify (void) const
85 {
86     ModelState state = model->get_state ();
87     
88     switch (state) {
89     case HAS_FILE: 
90         redraw ();
91         break;
92         
93     case NO_FILE:
94         break;
95         
96     case ERROR:
97         break;
98     }
99 }
100
101 void
102 on_da_realize (GtkDrawingArea *da, View *v)
103 {
104     v->create_pixmap ();
105     v->notify ();
106 }
107
108 gint
109 on_da_expose (GtkWidget *widget, GdkEventExpose *event, View *v)
110 {
111     v->expose (event);
112     return FALSE;
113 }