UT_Error _importGraphic(const UT_ConstByteBufPtr & pBB) { GdkPixbuf * pixbuf = NULL; GError * err = NULL; RsvgHandle * rsvg = rsvg_handle_new (); if ( FALSE == rsvg_handle_write ( rsvg, static_cast<const guchar *>(pBB->getPointer (0)), static_cast<gsize>(pBB->getLength ()), &err ) ) { UT_DEBUGMSG(("DOM: couldn't write to loader: %s\n", err->message)); g_error_free(err); return UT_ERROR ; } if ( FALSE == rsvg_handle_close ( rsvg, &err ) ) { UT_DEBUGMSG(("DOM: couldn't write to loader: %s\n", err->message)); g_error_free(err); g_object_unref(G_OBJECT(rsvg)); return UT_ERROR ; } pixbuf = rsvg_handle_get_pixbuf ( rsvg ) ; g_object_unref(G_OBJECT(rsvg)); if (!pixbuf) { return UT_ERROR; } g_object_ref (pixbuf); // Initialize stuff to create our PNG. UT_Error error = Initialize_PNG(); if (error) { return error; } if (setjmp(png_jmpbuf(m_pPNG))) { g_object_unref(G_OBJECT(pixbuf)); png_destroy_write_struct(&m_pPNG, &m_pPNGInfo); return UT_ERROR; } // // Build the png member variables. // _createPNGFromPixbuf(pixbuf); // // Get rid of these now that they are no longer needed // g_object_unref(G_OBJECT(pixbuf)); png_destroy_write_struct(&m_pPNG, &m_pPNGInfo); return UT_OK; }
/** needed for the stejmp context */ UT_Error IE_ImpGraphic_GdkPixbuf::_png_write(GdkPixbuf * pixbuf) { if (setjmp(png_jmpbuf(m_pPNG))) { DELETEP(m_pPngBB); png_destroy_write_struct(&m_pPNG, &m_pPNGInfo); g_object_unref(G_OBJECT(pixbuf)); return UT_ERROR; } // // Build the png member variables. // _createPNGFromPixbuf(pixbuf); // cleanup g_object_unref(G_OBJECT(pixbuf)); png_destroy_write_struct(&m_pPNG, &m_pPNGInfo); return UT_OK; }