summaryrefslogtreecommitdiff
path: root/demos/csharp/linux/gtk_viewer/src/MainRender.cs
diff options
context:
space:
mode:
authorMichael Vrhel <michael.vrhel@artifex.com>2020-07-15 16:48:25 -0700
committerMichael Vrhel <michael.vrhel@artifex.com>2020-07-19 23:24:28 -0700
commit0f59de6b3daab30d405ee5c5c4ac943c26721622 (patch)
tree07891537abee8fd8cec44ae5c855c7f60540e47a /demos/csharp/linux/gtk_viewer/src/MainRender.cs
parent42b49069c0f87406dcd796183ba719d45dd8ce69 (diff)
downloadghostpdl-0f59de6b3daab30d405ee5c5c4ac943c26721622.tar.gz
Linux Demo Viewer: Various updates to try to get threading working
Diffstat (limited to 'demos/csharp/linux/gtk_viewer/src/MainRender.cs')
-rw-r--r--demos/csharp/linux/gtk_viewer/src/MainRender.cs118
1 files changed, 66 insertions, 52 deletions
diff --git a/demos/csharp/linux/gtk_viewer/src/MainRender.cs b/demos/csharp/linux/gtk_viewer/src/MainRender.cs
index 316da5e99..d5f9d5371 100644
--- a/demos/csharp/linux/gtk_viewer/src/MainRender.cs
+++ b/demos/csharp/linux/gtk_viewer/src/MainRender.cs
@@ -36,69 +36,72 @@ namespace gs_mono_example
private void MainPageCallback(int width, int height, int raster, double zoom_in,
int page_num, IntPtr data)
{
- try
- {
- Byte[] bitmap = new byte[raster * height];
+ Byte[] bitmap = new byte[raster * height];
- Marshal.Copy(data, bitmap, 0, raster * height);
- DocPage doc_page = m_docPages[page_num - 1];
+ idata_t page = new idata_t();
- if (doc_page.Content != Page_Content_t.FULL_RESOLUTION ||
- m_aa_change)
- {
- doc_page.Width = width;
- doc_page.Height = height;
- doc_page.Content = Page_Content_t.FULL_RESOLUTION;
- doc_page.Zoom = m_doczoom;
- doc_page.PixBuf = new Gdk.Pixbuf(bitmap, Gdk.Colorspace.Rgb, false, 8, width, height, raster);
- }
+ Marshal.Copy(data, bitmap, 0, raster * height);
- /* Get the 1.0 page scalings */
- if (m_firstime)
- {
- pagesizes_t page_size = new pagesizes_t();
- page_size.width = width;
- page_size.height = height;
- m_page_sizes.Add(page_size);
- }
- }
- catch (Exception except)
- {
- var t = except.Message;
- }
+ page.bitmap = bitmap;
+ page.page_num = page_num;
+ page.width = width;
+ page.height = height;
+ page.raster = raster;
+ page.zoom = zoom_in;
+ m_images_rendered.Add(page);
/* Dispatch progress bar update on UI thread */
Gtk.Application.Invoke(delegate {
- m_GtkProgressBar.Fraction = ((double)page_num / ((double)m_numpages));
+ m_GtkProgressBar.Fraction = ((double)page_num / ((double)page_num + 1));
});
}
- /* Done rendering. Update the pages with the new raster information if needed */
- private void RenderingDone()
+ /* Done rendering. Again in MS .NET this is on the main UI thread.
+ In MONO .NET not the case. */
+ private void RenderingDone()
+ {
+ /* Dispatch on UI thread */
+ Gtk.Application.Invoke(delegate {
+ RenderingDoneMain();
+ });
+ }
+
+ private void RenderingDoneMain()
{
- int page_index = m_firstpage - 1;
- m_toppage_pos = new List<int>(m_images_rendered.Count + 1);
- int offset = 0;
Gtk.TreeIter tree_iter;
-
m_GtkimageStoreMain.GetIterFirst(out tree_iter);
- for (int k = 0; k < m_numpages; k++)
+
+ for (int k = 0; k < m_images_rendered.Count; k++)
{
- m_GtkimageStoreMain.SetValue(tree_iter, 0, m_docPages[k].PixBuf);
- m_GtkimageStoreMain.IterNext(ref tree_iter);
+ DocPage doc_page = m_docPages[k];
+
+ if (doc_page.Content != Page_Content_t.FULL_RESOLUTION ||
+ m_aa_change)
+ {
+ doc_page.Width = m_images_rendered[k].width;
+ doc_page.Height = m_images_rendered[k].height;
+ doc_page.Content = Page_Content_t.FULL_RESOLUTION;
+
+ doc_page.Zoom = m_doczoom;
+ doc_page.PixBuf = new Gdk.Pixbuf(m_images_rendered[k].bitmap,
+ Gdk.Colorspace.Rgb, false, 8, m_images_rendered[k].width,
+ m_images_rendered[k].height, m_images_rendered[k].raster);
+
+ m_GtkimageStoreMain.SetValue(tree_iter, 0, m_docPages[k].PixBuf);
+ m_GtkimageStoreMain.IterNext(ref tree_iter);
+ }
}
- m_GtkaaCheck.Sensitive = true;
m_aa_change = false;
- m_firstime = false;
- m_toppage_pos.Add(offset);
- m_busy_render = false;
- m_images_rendered.Clear();
- m_file_open = true;
- m_busy_render = false;
-
- m_ghostscript.gsPageRenderedMain -= new ghostsharp.gsCallBackPageRenderedMain(gsPageRendered);
- }
+ m_firstime = false;
+ m_busy_render = false;
+ m_images_rendered.Clear();
+ m_file_open = true;
+ m_ghostscript.gsPageRenderedMain -= new ghostsharp.gsCallBackPageRenderedMain(gsPageRendered);
+ m_GtkaaCheck.Sensitive = true;
+ m_GtkZoomMinus.Sensitive = true;
+ m_GtkZoomPlus.Sensitive = true;
+ }
/* Render all pages full resolution */
private void RenderMainFirst()
@@ -113,10 +116,21 @@ namespace gs_mono_example
/* Render all, but only if not already busy, called via zoom or aa changes */
private void RenderMainAll()
{
- if (m_busy_render || !m_init_done)
- return;
- m_GtkaaCheck.Sensitive = false;
- RenderMainFirst();
- }
+ try
+ {
+ if (!m_init_done)
+ return;
+ m_GtkaaCheck.Sensitive = false;
+ m_GtkZoomMinus.Sensitive = false;
+ m_GtkZoomPlus.Sensitive = false;
+ RenderMainFirst();
+ }
+ catch(Exception except)
+ {
+ var mess = except.Message;
+ }
+
+
+ }
}
}