Update of /cvs/poppler/poppler/glib
In directory kemper:/tmp/cvs-serv13199/glib

Modified Files:
        poppler-page.cc poppler-page.h poppler.h test-poppler-glib.c 
Log Message:
2007-04-28  Carlos Garcia Campos <[EMAIL PROTECTED]>
        reviewed and some code by: Albert Astals Cid <[EMAIL PROTECTED]>

        * glib/poppler-page.cc:
        * glib/poppler-page.h:
        * glib/poppler.h:
        * glib/test-poppler-glib.c:
        * poppler/Makefile.am:
        * poppler/PageTransition.cc:
        * poppler/PageTransition.h:
        * qt/poppler-page-transition.cc:
        * qt/poppler-page-transition.h: Move Page Transition parsing from qt
        frontends to poppler core. Expose Page transitions on the glib
        frontend.


Index: poppler-page.cc
===================================================================
RCS file: /cvs/poppler/poppler/glib/poppler-page.cc,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -d -r1.56 -r1.57
--- poppler-page.cc     27 Apr 2007 21:25:30 -0000      1.56
+++ poppler-page.cc     27 Apr 2007 22:26:09 -0000      1.57
@@ -27,6 +27,7 @@
 #include <ErrorCodes.h>
 #include <UnicodeMap.h>
 #include <GfxState.h>
+#include <PageTransition.h>
 
 #include "poppler.h"
 #include "poppler-private.h"
@@ -141,6 +142,93 @@
   return page->page->getDuration ();
 }
 
+/**
+ * poppler_page_get_transition:
+ * @page: a #PopplerPage
+ *
+ * Returns the transition effect of @page
+ *
+ * Return value: a #PopplerPageTransition or NULL.
+ **/
+PopplerPageTransition *
+poppler_page_get_transition (PopplerPage *page)
+{
+  PageTransition *trans;
+  PopplerPageTransition *transition;
+  Object obj;
+  
+  g_return_val_if_fail (POPPLER_IS_PAGE (page), NULL);
+
+  trans = new PageTransition (page->page->getTrans (&obj));
+  obj.free ();
+
+  if (!trans->isOk ()) {
+    delete trans;
+    return NULL;
+  }
+
+  transition = poppler_page_transition_new ();
+
+  switch (trans->getType ())
+    {
+      case transitionReplace:
+        transition->type = POPPLER_PAGE_TRANSITION_REPLACE;
+       break;
+      case transitionSplit:
+       transition->type = POPPLER_PAGE_TRANSITION_SPLIT;
+       break;
+      case transitionBlinds:
+        transition->type = POPPLER_PAGE_TRANSITION_BLINDS;
+       break;
+      case transitionBox:
+        transition->type = POPPLER_PAGE_TRANSITION_BOX;
+       break;
+      case transitionWipe:
+        transition->type = POPPLER_PAGE_TRANSITION_WIPE;
+       break;
+      case transitionDissolve:
+        transition->type = POPPLER_PAGE_TRANSITION_DISSOLVE;
+       break;
+      case transitionGlitter:
+        transition->type = POPPLER_PAGE_TRANSITION_GLITTER;
+       break;
+      case transitionFly:
+        transition->type = POPPLER_PAGE_TRANSITION_FLY;
+       break;
+      case transitionPush:
+        transition->type = POPPLER_PAGE_TRANSITION_PUSH;
+       break;
+      case transitionCover:
+        transition->type = POPPLER_PAGE_TRANSITION_COVER;
+       break;
+      case transitionUncover:
+        transition->type = POPPLER_PAGE_TRANSITION_UNCOVER;
+        break;
+      case transitionFade:
+        transition->type = POPPLER_PAGE_TRANSITION_FADE;
+       break;
+      default:
+        g_assert_not_reached ();
+    }
+
+  transition->alignment = (trans->getAlignment() == transitionHorizontal) ?
+         POPPLER_PAGE_TRANSITION_HORIZONTAL :
+         POPPLER_PAGE_TRANSITION_VERTICAL;
+
+  transition->direction = (trans->getDirection() == transitionInward) ?
+         POPPLER_PAGE_TRANSITION_INWARD :
+         POPPLER_PAGE_TRANSITION_OUTWARD;
+
+  transition->duration = trans->getDuration();
+  transition->angle = trans->getAngle();
+  transition->scale = trans->getScale();
+  transition->rectangular = trans->isRectangular();
+  
+  delete trans;
+  
+  return transition;
+}
+
 #if defined (HAVE_CAIRO)
 
 typedef struct {
@@ -1040,6 +1128,40 @@
        g_free (mapping);
 }
 
+/* Page Transition */
+GType
+poppler_page_transition (void)
+{
+  static GType our_type = 0;
+  if (our_type == 0)
+    our_type = g_boxed_type_register_static("PopplerPageTransition",
+                                           (GBoxedCopyFunc) 
poppler_page_transition_copy,
+                                           (GBoxedFreeFunc) 
poppler_page_transition_free);
+  return our_type;
+}
+
+PopplerPageTransition *
+poppler_page_transition_new (void)
+{
+  return (PopplerPageTransition *) g_new0 (PopplerPageTransition, 1);
+}
+
+PopplerPageTransition *
+poppler_page_transition_copy (PopplerPageTransition *transition)
+{
+  PopplerPageTransition *new_transition;
+
+  new_transition = poppler_page_transition_new ();
+  *new_transition = *transition;
+  
+  return new_transition;
+}
+
+void
+poppler_page_transition_free (PopplerPageTransition *transition)
+{
+  g_free (transition);
+}
 
 /* Form Type */
 GType

Index: poppler-page.h
===================================================================
RCS file: /cvs/poppler/poppler/glib/poppler-page.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- poppler-page.h      24 Feb 2007 23:32:22 -0000      1.23
+++ poppler-page.h      27 Apr 2007 22:26:09 -0000      1.24
@@ -38,54 +38,55 @@
 #define POPPLER_IS_PAGE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
POPPLER_TYPE_PAGE))
 
 
-GType              poppler_page_get_type           (void) G_GNUC_CONST;
-void                poppler_page_render_to_pixbuf     (PopplerPage        
*page,
-                                                      int                 
src_x,
-                                                      int                 
src_y,
-                                                      int                 
src_width,
-                                                      int                 
src_height,
-                                                      double              
scale,
-                                                      int                 
rotation,
-                                                      GdkPixbuf          
*pixbuf);
+GType                 poppler_page_get_type             (void) G_GNUC_CONST;
+void                   poppler_page_render_to_pixbuf     (PopplerPage        
*page,
+                                                         int                 
src_x,
+                                                         int                 
src_y,
+                                                         int                 
src_width,
+                                                         int                 
src_height,
+                                                         double              
scale,
+                                                         int                 
rotation,
+                                                         GdkPixbuf          
*pixbuf);
 
 #ifdef POPPLER_HAS_CAIRO
-void                poppler_page_render               (PopplerPage        
*page,
-                                                      cairo_t            
*cairo);
-#endif
+void                   poppler_page_render               (PopplerPage        
*page,
+                                                         cairo_t            
*cairo);
+#endif 
 
-void                poppler_page_get_size             (PopplerPage        
*page,
-                                                      double             
*width,
-                                                      double             
*height);
-int                 poppler_page_get_index            (PopplerPage        
*page);
-double              poppler_page_get_duration         (PopplerPage        
*page);
-GdkPixbuf          *poppler_page_get_thumbnail        (PopplerPage        
*page);
-gboolean            poppler_page_get_thumbnail_size   (PopplerPage        
*page,
-                                                      int                
*width,
-                                                      int                
*height);
-GList             *poppler_page_find_text            (PopplerPage        *page,
-                                                      const  char        
*text);
-void                poppler_page_render_to_ps         (PopplerPage        
*page,
-                                                      PopplerPSFile      
*ps_file);
-char               *poppler_page_get_text             (PopplerPage        
*page,
-                                                      PopplerRectangle   
*rect);
-GList              *poppler_page_get_link_mapping     (PopplerPage        
*page);
-void                poppler_page_free_link_mapping    (GList              
*list);
-GdkRegion *         poppler_page_get_selection_region (PopplerPage        
*page,
-                                                      gdouble             
scale,
-                                                      PopplerRectangle   
*selection);
-void                poppler_page_render_selection     (PopplerPage        
*page,
-                                                      gdouble             
scale,
-                                                      int                 
rotation,
-                                                      GdkPixbuf          
*pixbuf,
-                                                      PopplerRectangle   
*selection,
-                                                      PopplerRectangle   
*old_selection,
-                                                      GdkColor         
*glyph_color,
-                                                      GdkColor         
*background_color);
-GList               *poppler_page_get_form_fields     (PopplerPage *page);
-void                poppler_page_free_form_fields    (GList *list);
+void                   poppler_page_get_size             (PopplerPage        
*page,
+                                                         double             
*width,
+                                                         double             
*height);
+int                    poppler_page_get_index            (PopplerPage        
*page);
+double                 poppler_page_get_duration         (PopplerPage        
*page);
+PopplerPageTransition *poppler_page_get_transition       (PopplerPage        
*page);
+GdkPixbuf             *poppler_page_get_thumbnail        (PopplerPage        
*page);
+gboolean               poppler_page_get_thumbnail_size   (PopplerPage        
*page,
+                                                         int                
*width,
+                                                         int                
*height);
+GList                *poppler_page_find_text            (PopplerPage        
*page,
+                                                         const  char        
*text);
+void                   poppler_page_render_to_ps         (PopplerPage        
*page,
+                                                         PopplerPSFile      
*ps_file);
+char                  *poppler_page_get_text             (PopplerPage        
*page,
+                                                         PopplerRectangle   
*rect);
+GList                 *poppler_page_get_link_mapping     (PopplerPage        
*page);
+void                   poppler_page_free_link_mapping    (GList              
*list);
+GdkRegion             *poppler_page_get_selection_region (PopplerPage        
*page,
+                                                         gdouble             
scale,
+                                                         PopplerRectangle   
*selection);
+void                   poppler_page_render_selection     (PopplerPage        
*page,
+                                                         gdouble             
scale,
+                                                         int                 
rotation,
+                                                         GdkPixbuf          
*pixbuf,
+                                                         PopplerRectangle   
*selection,
+                                                         PopplerRectangle   
*old_selection,
+                                                         GdkColor           
*glyph_color,
+                                                         GdkColor           
*background_color);
+GList                 *poppler_page_get_form_fields      (PopplerPage        
*page);
+void                  poppler_page_free_form_fields     (GList              
*list);
 
-void               poppler_page_get_crop_box         (PopplerPage *page,
-                                                      PopplerRectangle *rect);
+void                 poppler_page_get_crop_box          (PopplerPage        
*page,
+                                                         PopplerRectangle   
*rect);
 
 
 /* A rectangle on a page, with coordinates in PDF points. */
@@ -118,6 +119,24 @@
 PopplerLinkMapping *poppler_link_mapping_copy     (PopplerLinkMapping 
*mapping);
 void                poppler_link_mapping_free     (PopplerLinkMapping 
*mapping);
 
+/* Page Transition */
+#define POPPLER_TYPE_PAGE_TRANSITION                
(poppler_page_transition_get_type ())
+struct _PopplerPageTransition
+{
+  PopplerPageTransitionType type;
+  PopplerPageTransitionAlignment alignment;
+  PopplerPageTransitionDirection direction;
+  gint duration;
+  gint angle;
+  gdouble scale;
+  gboolean rectangular;
+};
+
+GType                  poppler_page_transition_get_type (void) G_GNUC_CONST;
+PopplerPageTransition *poppler_page_transition_new      (void);
+PopplerPageTransition *poppler_page_transition_copy     (PopplerPageTransition 
*transition);
+void                   poppler_page_transition_free     (PopplerPageTransition 
*transition);
+
 /* FormField */
 #define POPPLER_TYPE_FORM_FIELD                     
(poppler_form_field_get_type ())
 struct _PopplerTextField

Index: poppler.h
===================================================================
RCS file: /cvs/poppler/poppler/glib/poppler.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- poppler.h   24 Feb 2007 23:32:22 -0000      1.13
+++ poppler.h   27 Apr 2007 22:26:09 -0000      1.14
@@ -42,6 +42,34 @@
        POPPLER_ORIENTATION_SEASCAPE
 } PopplerOrientation;
 
+typedef enum
+{
+  POPPLER_PAGE_TRANSITION_REPLACE,
+  POPPLER_PAGE_TRANSITION_SPLIT,
+  POPPLER_PAGE_TRANSITION_BLINDS,
+  POPPLER_PAGE_TRANSITION_BOX,
+  POPPLER_PAGE_TRANSITION_WIPE,
+  POPPLER_PAGE_TRANSITION_DISSOLVE,
+  POPPLER_PAGE_TRANSITION_GLITTER,
+  POPPLER_PAGE_TRANSITION_FLY,
+  POPPLER_PAGE_TRANSITION_PUSH,
+  POPPLER_PAGE_TRANSITION_COVER,
+  POPPLER_PAGE_TRANSITION_UNCOVER,
+  POPPLER_PAGE_TRANSITION_FADE
+} PopplerPageTransitionType;
+
+typedef enum
+{
+  POPPLER_PAGE_TRANSITION_HORIZONTAL,
+  POPPLER_PAGE_TRANSITION_VERTICAL
+} PopplerPageTransitionAlignment;
+
+typedef enum
+{
+  POPPLER_PAGE_TRANSITION_INWARD,
+  POPPLER_PAGE_TRANSITION_OUTWARD
+} PopplerPageTransitionDirection;
+
 /* MUST be the same than poppler/Form.h fieldType */
 typedef enum
 {
@@ -51,21 +79,21 @@
        POPPLER_FORM_FIELD_SIGNATURE,
 } PopplerFormFieldType;
 
-
-typedef struct _PopplerDocument    PopplerDocument;
-typedef struct _PopplerIndexIter   PopplerIndexIter;
-typedef struct _PopplerFontsIter   PopplerFontsIter;
-typedef struct _PopplerRectangle   PopplerRectangle;
-typedef struct _PopplerLinkMapping PopplerLinkMapping;
-typedef struct _PopplerFormField   PopplerFormField;
-typedef struct _PopplerPage        PopplerPage;
-typedef struct _PopplerFontInfo    PopplerFontInfo;
-typedef struct _PopplerPSFile      PopplerPSFile;
-typedef union  _PopplerAction      PopplerAction;
-typedef struct _PopplerDest        PopplerDest;
-typedef struct _PopplerTextField PopplerTextField;
-typedef struct _PopplerButtonField PopplerButtonField;
-typedef struct _PopplerChoiceField PopplerChoiceField;
+typedef struct _PopplerDocument       PopplerDocument;
+typedef struct _PopplerIndexIter      PopplerIndexIter;
+typedef struct _PopplerFontsIter      PopplerFontsIter;
+typedef struct _PopplerRectangle      PopplerRectangle;
+typedef struct _PopplerLinkMapping    PopplerLinkMapping;
+typedef struct _PopplerPageTransition PopplerPageTransition;
+typedef struct _PopplerFormField      PopplerFormField;
+typedef struct _PopplerPage           PopplerPage;
+typedef struct _PopplerFontInfo       PopplerFontInfo;
+typedef struct _PopplerPSFile         PopplerPSFile;
+typedef union  _PopplerAction         PopplerAction;
+typedef struct _PopplerDest           PopplerDest;
+typedef struct _PopplerTextField      PopplerTextField;
+typedef struct _PopplerButtonField    PopplerButtonField;
+typedef struct _PopplerChoiceField    PopplerChoiceField;
 
 typedef enum
 {

Index: test-poppler-glib.c
===================================================================
RCS file: /cvs/poppler/poppler/glib/test-poppler-glib.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- test-poppler-glib.c 26 Dec 2006 19:56:29 -0000      1.19
+++ test-poppler-glib.c 27 Apr 2007 22:26:09 -0000      1.20
@@ -109,11 +109,62 @@
   g_free (linearized);
 }
 
+static const gchar *
+transition_effect_name (PopplerPageTransitionType type)
+{
+  switch (type)
+    {
+      case POPPLER_PAGE_TRANSITION_REPLACE:
+       return "Replace";
+      case POPPLER_PAGE_TRANSITION_SPLIT:
+       return "Split";
+      case POPPLER_PAGE_TRANSITION_BLINDS:
+       return "Blinds";
+      case POPPLER_PAGE_TRANSITION_BOX:
+       return "Box";
+      case POPPLER_PAGE_TRANSITION_WIPE:
+       return "Wipe";
+      case POPPLER_PAGE_TRANSITION_DISSOLVE:
+       return "Dissolve";
+      case POPPLER_PAGE_TRANSITION_GLITTER:
+       return "Glitter";
+      case POPPLER_PAGE_TRANSITION_FLY:
+       return "Fly";
+      case POPPLER_PAGE_TRANSITION_PUSH:
+       return "Push";
+      case POPPLER_PAGE_TRANSITION_COVER:
+       return "Cover";
+      case POPPLER_PAGE_TRANSITION_UNCOVER:
+       return "Uncover";
+      case POPPLER_PAGE_TRANSITION_FADE:
+       return "Fade";
+    }
+
+  return "Unknown";
+}
+
+static void
+print_page_transition (PopplerPageTransition *transition)
+{
+  printf ("\t\tEffect: %s\n", transition_effect_name (transition->type));
+  printf ("\t\tAlignment: %s\n",
+         transition->alignment == POPPLER_PAGE_TRANSITION_HORIZONTAL ?
+         "Horizontal" : "Vertical");
+  printf ("\t\tDirection: %s\n",
+         transition->direction == POPPLER_PAGE_TRANSITION_INWARD ?
+         "Inward" : "Outward");
+  printf ("\t\tDuration: %d\n", transition->duration);
+  printf ("\t\tAngle: %d\n", transition->angle);
+  printf ("\t\tScale: %.2f\n", transition->scale);
+  printf ("\t\tRectangular: %s\n", transition->rectangular ? "Yes" : "No");
+}
+
 int main (int argc, char *argv[])
 {
   PopplerDocument *document;
   PopplerBackend backend;
   PopplerPage *page;
+  PopplerPageTransition *transition;
   GEnumValue *enum_value;
   char *label;
   GError *error;
@@ -154,6 +205,15 @@
   else
     printf ("\tpage duration:\tno duration for page\n");
 
+  transition = poppler_page_get_transition (page);
+  if (transition) {
+    printf ("\tpage transition:\n");
+    print_page_transition (transition);
+    poppler_page_transition_free (transition);
+  } else {
+    printf ("\tpage transition:no transition effect for page\n");
+  }
+
   thumb = poppler_page_get_thumbnail (page);
   if (thumb != NULL) {
     gdk_pixbuf_save (thumb, "thumb.png", "png", &error, NULL);

_______________________________________________
poppler mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/poppler

Reply via email to