X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=pdf%2Fxpdf%2Fgpdf.cc;h=5eff140135117bc259a96d241574dffde11de882;hb=5f8665905e640372b862cfe30b71628cd1e40051;hp=33e3dda8ff0f79fd46217ca5d7f20d8b53f1128f;hpb=8db6ea908fea5d48ff174580a3398b67ee265717;p=evince.git diff --git a/pdf/xpdf/gpdf.cc b/pdf/xpdf/gpdf.cc index 33e3dda8..5eff1401 100644 --- a/pdf/xpdf/gpdf.cc +++ b/pdf/xpdf/gpdf.cc @@ -3,8 +3,8 @@ // gpdf.cc // // Copyright 1996 Derek B. Noonburg -// Copyright 1999 Miguel de Icaza // Copyright 1999 Michael Meeks. +// Copyright 1999 Miguel de Icaza // //======================================================================== @@ -41,6 +41,29 @@ GBool printCommands = gFalse; gint gpdf_debug; poptContext ctx; +#define DOC_ROOT_MAGIC 0xad3f556d +struct DOC_ROOT { + guint32 magic; + GString *title; + PDFDoc *pdf; + GtkWidget *toplevel; + GtkWidget *table; + GnomeAppBar *appbar; + GtkDrawingArea *area; + GdkPixmap *pixmap; + OutputDev *out; + GdkColor paper; +}; + +DOC_ROOT *hack_global = NULL; + +static void +crummy_cmd (GtkWidget *widget, DOC_ROOT *tmp) +{ + printf ("Crummy\n"); +} + + const struct poptOption gpdf_popt_options [] = { { "debug", '\0', POPT_ARG_INT, &gpdf_debug, 0, N_("Enables some debugging functions"), N_("LEVEL") }, @@ -48,69 +71,121 @@ const struct poptOption gpdf_popt_options [] = { }; +static GnomeUIInfo dummy_menu [] = { + { GNOME_APP_UI_ITEM, N_("_dummy"), + N_("What a dummy!"), crummy_cmd }, + GNOMEUIINFO_END +}; + +static GnomeUIInfo main_menu [] = { + { GNOME_APP_UI_SUBTREE, N_("_Dummy"), NULL, dummy_menu }, + GNOMEUIINFO_END +}; + //------------------------------------------------------------------------ // loadFile / displayPage //------------------------------------------------------------------------ -static GBool loadFile(GString *fileName) { - GString *title; - PDFDoc *newDoc; +static gint +doc_config_event (GtkWidget *widget, void *ugly) +{ + DOC_ROOT *doc = hack_global; + + g_return_val_if_fail (doc, FALSE); + g_return_val_if_fail (doc->magic == DOC_ROOT_MAGIC, FALSE); + + if (doc->pixmap) + gdk_pixmap_unref(doc->pixmap); + + doc->pixmap = gdk_pixmap_new(widget->window, + widget->allocation.width, + widget->allocation.height, + -1); + + printf ("Creating pixmap of size %d %d\n", + widget->allocation.width, widget->allocation.height); + gdk_color_white (gtk_widget_get_default_colormap(), &doc->paper); + doc->out = new GOutputDev (doc->pixmap, doc->paper); + + return TRUE; +} + +static gint +doc_redraw_event (GtkWidget *widget, void *ugly) +{ + DOC_ROOT *doc = hack_global; + + g_return_val_if_fail (doc, FALSE); + g_return_val_if_fail (doc->magic == DOC_ROOT_MAGIC, FALSE); + + if (doc->out && doc->pdf) { + printf ("There are %d pages\n", doc->pdf->getNumPages()); + + doc->pdf->displayPage(doc->out, 1, 72, 0, gTrue); + gdk_draw_pixmap (widget->window, + widget->style->white_gc, + doc->pixmap, + 0, 0, + 0, 0, + widget->allocation.width, + widget->allocation.height); + + } else + printf ("Null pointer error %p %p\n", doc->out, doc->pdf); + + return FALSE; +} + +static GBool +loadFile(GString *fileName) +{ + DOC_ROOT *doc = new DOC_ROOT(); char s[20]; char *p; - // busy cursor - if (win) - win->setBusyCursor(gTrue); + hack_global = doc; + doc->magic = DOC_ROOT_MAGIC; // open PDF file - newDoc = new PDFDoc(fileName); - if (!newDoc->isOk()) { - delete newDoc; - if (win) - win->setBusyCursor(gFalse); + doc->pdf = new PDFDoc(fileName); + if (!doc->pdf->isOk()) { + delete doc->pdf; + delete doc; return gFalse; } - // replace old document - if (doc) - delete doc; - doc = newDoc; + g_assert (doc->pdf->getCatalog()); - // nothing displayed yet - page = -99; + doc->toplevel = gnome_app_new ("gpdf", "gpdf"); + gtk_window_set_policy(GTK_WINDOW(doc->toplevel), 1, 1, 0); + gtk_window_set_default_size (GTK_WINDOW(doc->toplevel), 600, 400); + doc->table = GTK_WIDGET (gtk_table_new (0, 0, 0)); + doc->appbar = GNOME_APPBAR (gnome_appbar_new (FALSE, TRUE, + GNOME_PREFERENCES_USER)); + gnome_app_set_statusbar (GNOME_APP (doc->toplevel), + GTK_WIDGET (doc->appbar)); + gnome_app_set_contents (GNOME_APP (doc->toplevel), doc->table); + gnome_app_create_menus_with_data (GNOME_APP (doc->toplevel), main_menu, doc); + gnome_app_install_menu_hints(GNOME_APP (doc->toplevel), main_menu); - // init PostScript output params - if (psFileName) - delete psFileName; - if (defPSFileName) { - psFileName = defPSFileName->copy(); - } else { - p = fileName->getCString() + fileName->getLength() - 4; - if (!strcmp(p, ".pdf") || !strcmp(p, ".PDF")) - psFileName = new GString(fileName->getCString(), - fileName->getLength() - 4); - else - psFileName = fileName->copy(); - psFileName->append(".ps"); - } - psFirstPage = 1; - psLastPage = doc->getNumPages(); - - // set up title, number-of-pages display; back to normal cursor - if (win) { - title = new GString("xpdf: "); - title->append(fileName); - win->setTitle(title); - sprintf(s, "of %d", doc->getNumPages()); - numPagesLabel->setText(s); - win->setBusyCursor(gFalse); - } + doc->pixmap = NULL; + doc->area = GTK_DRAWING_AREA (gtk_drawing_area_new ()); + gtk_signal_connect (GTK_OBJECT(doc->area),"configure_event", + (GtkSignalFunc) doc_config_event, doc); + gtk_signal_connect (GTK_OBJECT (doc->area), "expose_event", + (GtkSignalFunc) doc_redraw_event, doc); + + gtk_table_attach (GTK_TABLE (doc->table), GTK_WIDGET (doc->area), + 0, 1, 1, 2, + GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, + 0, 0); + + gtk_widget_show_all (doc->toplevel); - // done return gTrue; } -static void displayPage(int page1, int zoom1, int rotate1) { +/*static void displayPage(int page1, int zoom1, int rotate1) { char s[20]; // check for document @@ -144,7 +219,7 @@ static void displayPage(int page1, int zoom1, int rotate1) { // back to regular cursor win->setBusyCursor(gFalse); -} + }*/ int main (int argc, char *argv []) @@ -156,6 +231,8 @@ main (int argc, char *argv []) "gpdf", "0.1", argc, argv, gpdf_popt_options, 0, &ctx); + initParams (xpdfConfigFile); /* Init font path */ + view_files = poptGetArgs (ctx); /* Load files */ if (view_files) { @@ -173,5 +250,7 @@ main (int argc, char *argv []) gtk_main (); + freeParams(); + /* Destroy files */ }