using System; using System.Collections.Generic; using System.Runtime.InteropServices; using GhostMono; namespace gs_mono_example { public partial class MainWindow { private static List m_thumbnails; /* Assign current pages to blown up thumbnail images */ private void ThumbAssignMain(int page_num, int width, int height, double zoom_in) { DocPage doc_page = new DocPage(); doc_page.Content = Page_Content_t.THUMBNAIL; doc_page.Zoom = zoom_in; doc_page.Width = (int)(width / (Constants.SCALE_THUMB)); doc_page.Height = (int)(height / (Constants.SCALE_THUMB)); doc_page.PixBuf = m_thumbnails[page_num - 1].PixBuf.ScaleSimple(doc_page.Width, doc_page.Height, Gdk.InterpType.Nearest); doc_page.PageNum = page_num; m_docPages.Add(doc_page); if (page_num == 1) m_page_scroll_pos.Add(height); else m_page_scroll_pos.Add(height + m_page_scroll_pos[page_num - 2]); } private void ThumbsDone() { m_GtkProgressBar.Fraction = 1.0; m_ghostscript.gsPageRenderedMain -= new ghostsharp.gsCallBackPageRenderedMain(gsThumbRendered); m_numpages = m_thumbnails.Count; if (m_numpages < 1) { ShowMessage(NotifyType_t.MESS_STATUS, "File failed to open properly"); CleanUp(); } else { m_currpage = 1; m_GtkpageEntry.Text = "1"; m_GtkpageTotal.Text = "/" + m_numpages; m_GtkzoomEntry.Text = "100"; m_GtkmainScroll.ShowAll(); m_init_done = true; RemoveProgressBar(); RenderMainFirst(); } } /* Callback from GS with the rendered thumbnail. Also update progress */ private void ThumbPageCallback(int width, int height, int raster, double zoom_in, int page_num, IntPtr data) { Byte[] bitmap = null; bitmap = new byte[raster * height]; Marshal.Copy(data, bitmap, 0, raster * height); DocPage doc_page = new DocPage(); m_thumbnails.Add(doc_page); doc_page.Content = Page_Content_t.THUMBNAIL; doc_page.Width = width; doc_page.Height = height; doc_page.Zoom = zoom_in; doc_page.PixBuf = new Gdk.Pixbuf(bitmap, Gdk.Colorspace.Rgb, false, 8, width, height, raster); m_GtkimageStoreThumb.AppendValues(doc_page.PixBuf); ThumbAssignMain(page_num, width, height, 1.0); m_GtkimageStoreMain.AppendValues(m_docPages[page_num-1].PixBuf); m_GtkProgressBar.Fraction = ((double)page_num / ((double)page_num + 1)); return; } /* Render the thumbnail images */ private void RenderThumbs() { AddProgressBar("Rendering Thumbs"); m_ghostscript.gsPageRenderedMain += new ghostsharp.gsCallBackPageRenderedMain(gsThumbRendered); m_ghostscript.gsDisplayDeviceRenderAll(m_currfile, Constants.SCALE_THUMB, false, GS_Task_t.DISPLAY_DEV_THUMBS_NON_PDF); } } }