void lsm_dom_view_render (LsmDomView *view, cairo_t *cairo, double x, double y) { LsmDomViewClass *view_class; g_return_if_fail (LSM_IS_DOM_VIEW (view)); g_return_if_fail (LSM_IS_DOM_DOCUMENT (view->document)); g_return_if_fail (cairo != NULL); lsm_dom_view_set_cairo_context (view, cairo); cairo_save (view->cairo); cairo_translate (view->cairo, x, y); view_class = LSM_DOM_VIEW_GET_CLASS (view); if (view_class->render != NULL) view_class->render (view); cairo_restore (view->cairo); lsm_debug_render ("[LsmDomView::render] cairo status = %s", cairo_status_to_string (cairo_status (view->cairo))); lsm_dom_view_set_cairo_context (view, NULL); }
void lsm_dom_document_save_to_stream (LsmDomDocument *document, GOutputStream *stream, GError **error) { g_return_if_fail (LSM_IS_DOM_DOCUMENT (document)); g_return_if_fail (G_IS_OUTPUT_STREAM (stream)); lsm_dom_node_write_to_stream (LSM_DOM_NODE (document), stream, error); }
void lsm_dom_document_append_from_memory (LsmDomDocument *document, LsmDomNode *node, const void *buffer, int size, GError **error) { g_return_if_fail (LSM_IS_DOM_DOCUMENT (document)); g_return_if_fail (LSM_IS_DOM_NODE (node) || node == NULL); g_return_if_fail (buffer != NULL); _parse_memory (document, node, buffer, size, error); }
static void render_test (gconstpointer user_data) { const char *filename = user_data; char *basename; LsmDomDocument *document; LsmDomView *view; LsmBox viewport; unsigned int width, height; cairo_t *cairo; cairo_surface_t *surface; basename = g_path_get_basename (filename); document = lsm_dom_document_new_from_path (filename, NULL); g_assert (LSM_IS_DOM_DOCUMENT (document)); view = lsm_dom_document_create_view (document); g_assert (LSM_IS_DOM_VIEW (view)); viewport.x = 0.0; viewport.y = 0.0; viewport.width = 480.0; viewport.height = 360.0; lsm_dom_view_set_resolution (view, 96); lsm_dom_view_set_viewport_pixels (view, &viewport); lsm_dom_view_get_size_pixels (LSM_DOM_VIEW (view), &width, &height, NULL); surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); cairo = cairo_create (surface); cairo_surface_destroy (surface); if (cairo_status (cairo) == CAIRO_STATUS_SUCCESS) { lsm_dom_view_render (LSM_DOM_VIEW (view), cairo, 1, 1); if (cairo_status (cairo) != CAIRO_STATUS_SUCCESS) { g_test_message ("cairo_status = %s", cairo_status_to_string (cairo_status (cairo))); if (!g_key_file_get_boolean (suite_options, basename, "ignore-cairo-status", NULL)) { g_test_message ("incorrect cairo status"); g_test_fail (); } } } cairo_destroy (cairo); g_object_unref (view); g_object_unref (document); g_free (basename); }
void lsm_dom_view_set_document (LsmDomView *view, LsmDomDocument *document) { g_return_if_fail (LSM_IS_DOM_VIEW (view)); g_return_if_fail (document == NULL || LSM_IS_DOM_DOCUMENT (document)); if (view->document == document) return; if (view->document != NULL) g_object_unref (view->document); if (document != NULL) g_object_ref (document); view->document = document; }
static void render_test (gconstpointer user_data) { const char *filename = user_data; LsmDomDocument *document; LsmDomView *view; LsmBox viewport; unsigned int width, height; cairo_t *cairo; cairo_surface_t *surface; document = lsm_dom_document_new_from_path (filename, NULL); g_assert (LSM_IS_DOM_DOCUMENT (document)); view = lsm_dom_document_create_view (document); g_assert (LSM_IS_DOM_VIEW (view)); viewport.x = 0.0; viewport.y = 0.0; viewport.width = 480.0; viewport.height = 360.0; lsm_dom_view_set_resolution (view, 96); lsm_dom_view_set_viewport_pixels (view, &viewport); lsm_dom_view_get_size_pixels (LSM_DOM_VIEW (view), &width, &height, NULL); surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); cairo = cairo_create (surface); cairo_surface_destroy (surface); if (cairo_status (cairo) == CAIRO_STATUS_SUCCESS) { lsm_dom_view_render (LSM_DOM_VIEW (view), cairo, 1, 1); g_assert (cairo_status (cairo) == CAIRO_STATUS_SUCCESS); } cairo_destroy (cairo); g_object_unref (view); g_object_unref (document); }
static void lsm_dom_parser_start_element(void *user_data, const xmlChar *name, const xmlChar **attrs) { LsmDomSaxParserState *state = user_data; LsmDomNode *node; int i; if (state->is_error) { state->error_depth++; return; } if (state->document == NULL) { state->document = lsm_dom_implementation_create_document (NULL, (char *) name); state->current_node = LSM_DOM_NODE (state->document); g_return_if_fail (LSM_IS_DOM_DOCUMENT (state->document)); } node = LSM_DOM_NODE (lsm_dom_document_create_element (LSM_DOM_DOCUMENT (state->document), (char *) name)); if (LSM_IS_DOM_NODE (node) && lsm_dom_node_append_child (state->current_node, node) != NULL) { if (attrs != NULL) for (i = 0; attrs[i] != NULL && attrs[i+1] != NULL; i += 2) lsm_dom_element_set_attribute (LSM_DOM_ELEMENT (node), (char *) attrs[i], (char *) attrs[i+1]); state->current_node = node; state->is_error = FALSE; state->error_depth = 0; } else { state->is_error = TRUE; state->error_depth = 1; } }