summaryrefslogtreecommitdiff
path: root/platform/windows/mupdfwinrt/muctx.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/windows/mupdfwinrt/muctx.h')
-rw-r--r--platform/windows/mupdfwinrt/muctx.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/platform/windows/mupdfwinrt/muctx.h b/platform/windows/mupdfwinrt/muctx.h
new file mode 100644
index 00000000..16c44cd1
--- /dev/null
+++ b/platform/windows/mupdfwinrt/muctx.h
@@ -0,0 +1,123 @@
+#pragma once
+
+#include <memory>
+#include <functional>
+#include <vector>
+#include <windows.h>
+#include "status.h"
+#include "Cache.h"
+extern "C" {
+#include "mupdf/fitz.h"
+#include "mupdf/pdf-tools.h"
+}
+
+
+#define MAX_SEARCH 500
+
+enum { SVG_OUT, PNM_OUT, PCL_OUT, PWG_OUT };
+enum { HTML = 0, XML, TEXT };
+
+typedef struct point_s
+{
+ double X;
+ double Y;
+} point_t;
+
+/* Links */
+typedef struct document_link_s
+{
+ link_t type;
+ point_t upper_left;
+ point_t lower_right;
+ std::unique_ptr<char[]> uri;
+ int page_num;
+} document_link_t;
+#define sh_link std::shared_ptr<document_link_t>
+#define sh_vector_link std::shared_ptr<std::vector<sh_link>>
+
+/* Text Search */
+typedef struct text_search_s
+{
+ point_t upper_left;
+ point_t lower_right;
+} text_search_t;
+#define sh_text std::shared_ptr<text_search_t>
+#define sh_vector_text std::shared_ptr<std::vector<sh_text>>
+
+/* Content Results */
+typedef struct content_s
+{
+ int page;
+ std::string string_orig;
+ std::string string_margin;
+} content_t;
+#define sh_content std::shared_ptr<content_t>
+#define sh_vector_content std::shared_ptr<std::vector<sh_content>>
+
+#ifdef _WINRT_DLL
+using namespace Windows::Storage::Streams;
+using namespace Windows::Foundation;
+
+typedef struct win_stream_struct_s
+{
+ IRandomAccessStream^ stream;
+ unsigned char public_buffer[4096];
+} win_stream_struct;
+#else
+typedef struct win_stream_struct_s
+{
+ char* stream;
+} win_stream_struct;
+#endif
+
+class muctx
+{
+private:
+ CRITICAL_SECTION mu_criticalsec[FZ_LOCK_MAX];
+ win_stream_struct win_stream;
+ fz_locks_context mu_locks;
+ fz_context *mu_ctx;
+ fz_document *mu_doc;
+ fz_outline *mu_outline;
+ fz_rect mu_hit_bbox[MAX_SEARCH];
+ void FlattenOutline(fz_outline *outline, int level,
+ sh_vector_content contents_vec);
+ Cache *page_cache;
+ Cache *annot_cache;
+
+public:
+ muctx(void);
+ ~muctx(void);
+ void CleanUp(void);
+ int GetPageCount();
+ status_t InitializeContext();
+ status_t RenderPage(int page_num, unsigned char *bmp_data, int bmp_width,
+ int bmp_height, float scale, bool flipy);
+ status_t RenderPageMT(void *dlist, void *a_dlist, int page_width, int page_height,
+ unsigned char *bmp_data, int bmp_width, int bmp_height,
+ float scale, bool flipy, bool tile, point_t top_left,
+ point_t bottom_right);
+ fz_display_list* CreateDisplayList(int page_num, int *width, int *height);
+ fz_display_list * CreateDisplayListText(int page_num, int *width,
+ int *height, fz_text_page **text, int *length);
+ fz_display_list * CreateAnnotationList(int page_num);
+ int MeasurePage(int page_num, point_t *size);
+ point_t MeasurePage(fz_page *page);
+ unsigned int GetLinks(int page_num, sh_vector_link links_vec);
+ void SetAA(int level);
+ int GetTextSearch(int page_num, char* needle, sh_vector_text texts_vec);
+ int GetContents(sh_vector_content contents_vec);
+ std::string GetText(int page_num, int type);
+ void ReleaseText(void *text);
+ bool RequiresPassword(void);
+ bool ApplyPassword(char* password);
+ status_t SavePage(char *filename, int pagenum, int resolution, int type,
+ bool append);
+
+#ifdef _WINRT_DLL
+ status_t InitializeStream(IRandomAccessStream^ readStream, char *ext);
+#else
+ status_t OpenDocument(char *filename);
+#endif
+
+};