11-06-2009, 01:17 AM | #1 |
Guru
Posts: 976
Karma: 687
Join Date: Nov 2007
Device: Dell X51v; iLiad v2
|
What's wrong with my C code?
I have a small program (not really executable, just for experiement):
Code:
#include <glib.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
//#include <glib/gi18n-lib.h>
#include <string.h>
#include <libdjvu/ddjvuapi.h>
typedef struct _DjvuDocument DjvuDocument;
typedef struct _EvRenderContext EvRenderContext;
struct _DjvuDocument {
GObject parent_instance;
ddjvu_context_t *d_context;
ddjvu_document_t *d_document;
ddjvu_format_t *d_format;
ddjvu_format_t *thumbs_format;
gchar *uri;
/* PS exporter */
gchar *ps_filename;
GString *opts;
};
struct _EvRenderContext
{
GObject parent;
//EvPage *page;
gint rotation;
gdouble scale;
};
cairo_surface_t *djvu_document_render (DjvuDocument *djvu_document, int page_index)
{
EvRenderContext *rc;
cairo_surface_t *surface;
gchar *pixels;
gint rowstride;
ddjvu_rect_t rrect;
ddjvu_rect_t prect;
ddjvu_page_t *d_page;
ddjvu_page_rotation_t rotation;
double page_width, page_height, tmp;
static const cairo_user_data_key_t key;
d_page = ddjvu_page_create_by_pageno (djvu_document->d_document, page_index);
while (!ddjvu_page_decoding_done (d_page))
djvu_handle_events(djvu_document, TRUE, NULL);
page_width = ddjvu_page_get_width (d_page) * rc->scale * SCALE_FACTOR + 0.5;
page_height = ddjvu_page_get_height (d_page) * rc->scale * SCALE_FACTOR + 0.5;
switch (rc->rotation) {
case 90:
rotation = DDJVU_ROTATE_90;
tmp = page_height;
page_height = page_width;
page_width = tmp;
break;
case 180:
rotation = DDJVU_ROTATE_180;
break;
case 270:
rotation = DDJVU_ROTATE_270;
tmp = page_height;
page_height = page_width;
page_width = tmp;
break;
default:
rotation = DDJVU_ROTATE_0;
}
///#ifdef HAVE_CAIRO_FORMAT_STRIDE_FOR_WIDTH
rowstride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, page_width);
//#else
// rowstride = page_width * 4;
//#endif
pixels = (gchar *) g_malloc (page_height * rowstride);
surface = cairo_image_surface_create_for_data ((guchar *)pixels,
CAIRO_FORMAT_RGB24,
page_width,
page_height,
rowstride);
cairo_surface_set_user_data (surface, &key,
pixels, (cairo_destroy_func_t)g_free);
prect.x = 0;
prect.y = 0;
prect.w = page_width;
prect.h = page_height;
rrect = prect;
ddjvu_page_set_rotation (d_page, rotation);
ddjvu_page_render (d_page, DDJVU_RENDER_COLOR,
&prect,
&rrect,
djvu_document->d_format,
rowstride,
pixels);
return surface;
}
/*
static void
djvu_document_finalize (GObject *object)
{
DjvuDocument *djvu_document = DJVU_DOCUMENT (object);
if (djvu_document->d_document)
ddjvu_document_release (djvu_document->d_document);
if (djvu_document->opts)
g_string_free (djvu_document->opts, TRUE);
if (djvu_document->ps_filename)
g_free (djvu_document->ps_filename);
ddjvu_context_release (djvu_document->d_context);
ddjvu_format_release (djvu_document->d_format);
ddjvu_format_release (djvu_document->thumbs_format);
g_free (djvu_document->uri);
G_OBJECT_CLASS (djvu_document_parent_class)->finalize (object);
}*/
int main()
{
return 0;
}
gcc -o test lua-djview.c `pkg-config gtk+-2.0 ddjvuapi --libs --cflags` using GCC4.1.2 in Debian 5. And I alwasy got error message: lua-djview.c:35: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token Line 35 is marked in red. The code is copied from source code of Evince with some modification. I know it must be a silly problem, but I just can't figure it out. Please help. Thanx. Last edited by ericshliao; 11-06-2009 at 01:21 AM. |
11-06-2009, 01:07 PM | #2 |
Guru
Posts: 976
Karma: 687
Join Date: Nov 2007
Device: Dell X51v; iLiad v2
|
Sorry. Please ignore this problem. I found that the above code is not correct. Some variables undefinded, required headers not include...It's all my fault.
Added: I am trying to create a djvu module for lua, so that I can create a djvu reader for iLiad using GTK+, instead of QTGui. It should save ram and loading time. Evince uses Cairo to convert page image gererated from Djvulibre API to cairo_surface_t, then draw it on GdkWindow. That's really a clever way. Last edited by ericshliao; 11-06-2009 at 01:31 PM. |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Let's create a source code repository for DR 800 related code? | jraf | iRex | 3 | 03-11-2010 01:26 PM |
Its all gone wrong! Please help | blackrat779 | Bookeen | 11 | 06-08-2009 04:43 AM |
What have I done wrong | justlizz | Calibre | 2 | 05-13-2009 06:45 PM |
Help! Something is wrong... | ficbot | Fictionwise eBookwise | 4 | 03-01-2009 08:57 PM |
Am I doing something wrong? | NavyDad6 | Amazon Kindle | 3 | 02-26-2009 03:04 AM |