[glabels/zint] Refactoring of barcode structure.



commit 6717882e759c320e468683f8c69cf8af1281d91b
Author: Jim Evins <evins snaught com>
Date:   Sun Jul 11 00:49:15 2010 -0400

    Refactoring of barcode structure.
    
    Minor refactoring of API to barcode structure.

 src/bc-gnubarcode.c |   21 ++----
 src/bc-iec16022.c   |    8 +--
 src/bc-iec18004.c   |    8 +--
 src/bc-postnet.c    |   18 ++---
 src/bc-zint.c       |   23 ++-----
 src/bc.c            |  190 +++++++++++++++++++++++++++++++--------------------
 src/bc.h            |   50 +++++++++-----
 src/label-barcode.c |    8 +-
 8 files changed, 172 insertions(+), 154 deletions(-)
---
diff --git a/src/bc-gnubarcode.c b/src/bc-gnubarcode.c
index 11f132a..d8d096d 100644
--- a/src/bc-gnubarcode.c
+++ b/src/bc-gnubarcode.c
@@ -217,8 +217,6 @@ render_pass1 (struct Barcode_Item *bci,
 {
 	gint                 validbits = BARCODE_NO_ASCII;
 	glBarcode           *gbc;
-	glBarcodeShapeLine  *line;
-	glBarcodeShapeAlpha *bchar;
 	gdouble              scalef = 1.0;
 	gdouble              x;
 	gint                 i, j, barlen;
@@ -315,12 +313,7 @@ render_pass1 (struct Barcode_Item *bci,
 					yr -= (isdigit (*p) ? 20 : 10) * scalef;
 				}
 			}
-                        line = gl_barcode_shape_line_new ();
-			line->x = x0;
-			line->y = y0;
-			line->length = yr;
-			line->width = (j * scalef) - SHRINK_AMOUNT;
-                        gl_barcode_add_shape (gbc, (glBarcodeShape *)line);
+                        gl_barcode_add_line (gbc, x0, y0, yr, (j * scalef) - SHRINK_AMOUNT);
 		}
 		x += j * scalef;
 
@@ -342,17 +335,13 @@ render_pass1 (struct Barcode_Item *bci,
 				g_message ("impossible data: %s", p);
 				continue;
 			}
-                        bchar = gl_barcode_shape_alpha_new ();
-			bchar->x = f1 * scalef + bci->margin;
+			x0 = f1 * scalef + bci->margin;
 			if (mode == '-') {
-				bchar->y =
-				    bci->margin + bci->height - 8 * scalef;
+				y0 = bci->margin + bci->height - 8 * scalef;
 			} else {
-				bchar->y = bci->margin;
+				y0 = bci->margin;
 			}
-			bchar->fsize = f2 * FONT_SCALE * scalef;
-			bchar->c = c;
-                        gl_barcode_add_shape (gbc, (glBarcodeShape *)bchar);
+                        gl_barcode_add_char (gbc, x0, y0, (f2 * FONT_SCALE * scalef), c);
 		}
 	}
 
diff --git a/src/bc-iec16022.c b/src/bc-iec16022.c
index 834e9f9..e56990d 100644
--- a/src/bc-iec16022.c
+++ b/src/bc-iec16022.c
@@ -96,7 +96,6 @@ render_iec16022 (const gchar *grid,
                  gdouble      h)
 {
         glBarcode          *gbc;
-        glBarcodeShapeLine *line;
         gint                x, y;
         gdouble             aspect_ratio, pixel_size;
 
@@ -127,12 +126,7 @@ render_iec16022 (const gchar *grid,
 
                         if (*grid++)
                         {
-                                line = gl_barcode_shape_line_new ();
-                                line->x      = x*pixel_size + pixel_size/2.0;
-                                line->y      = y*pixel_size;
-                                line->length = pixel_size;
-                                line->width  = pixel_size;
-                                gl_barcode_add_shape (gbc, (glBarcodeShape *)line);
+                                gl_barcode_add_box (gbc, x*pixel_size, y*pixel_size, pixel_size, pixel_size);
                         }
 
                 }
diff --git a/src/bc-iec18004.c b/src/bc-iec18004.c
index f5f1ada..33f2789 100644
--- a/src/bc-iec18004.c
+++ b/src/bc-iec18004.c
@@ -101,7 +101,6 @@ render_iec18004 (const gchar *grid,
                  gdouble      h)
 {
         glBarcode          *gbc;
-        glBarcodeShapeLine *line;
         gint                x, y;
         gdouble             aspect_ratio, pixel_size;
 
@@ -136,12 +135,7 @@ render_iec18004 (const gchar *grid,
                          * bits are meaningless for us. */
                         if ((*grid++) & 1)
                         {
-                                line = gl_barcode_shape_line_new ();
-                                line->x      = x*pixel_size + pixel_size/2.0;
-                                line->y      = y*pixel_size;
-                                line->length = pixel_size;
-                                line->width  = pixel_size;
-                                gl_barcode_add_shape (gbc, (glBarcodeShape *)line);
+                                gl_barcode_add_box (gbc, x*pixel_size, y*pixel_size, pixel_size, pixel_size);
                         }
 
                 }
diff --git a/src/bc-postnet.c b/src/bc-postnet.c
index 9a3ba32..3aa1765 100644
--- a/src/bc-postnet.c
+++ b/src/bc-postnet.c
@@ -85,8 +85,7 @@ gl_barcode_postnet_new (const gchar    *id,
 {
         gchar              *code, *p;
         glBarcode          *gbc;
-        glBarcodeShapeLine *line;
-        gdouble             x;
+        gdouble             x, y, length, width;
 
 	/* Validate code length for all subtypes. */
 	if ( (g_ascii_strcasecmp (id, "POSTNET") == 0) ) {
@@ -128,19 +127,16 @@ gl_barcode_postnet_new (const gchar    *id,
 	/* Now traverse the code string and create a list of lines */
 	x = POSTNET_HORIZ_MARGIN;
 	for (p = code; *p != 0; p++) {
-                line = gl_barcode_shape_line_new ();
-		line->x = x;
-		line->y = POSTNET_VERT_MARGIN;
+		y = POSTNET_VERT_MARGIN;
 		if (*p == '0') {
-			line->y +=
-			    POSTNET_FULLBAR_HEIGHT - POSTNET_HALFBAR_HEIGHT;
-			line->length = POSTNET_HALFBAR_HEIGHT;
+			y += POSTNET_FULLBAR_HEIGHT - POSTNET_HALFBAR_HEIGHT;
+			length = POSTNET_HALFBAR_HEIGHT;
 		} else {
-			line->length = POSTNET_FULLBAR_HEIGHT;
+			length = POSTNET_FULLBAR_HEIGHT;
 		}
-		line->width = POSTNET_BAR_WIDTH;
+		width = POSTNET_BAR_WIDTH;
 
-                gl_barcode_add_shape (gbc, (glBarcodeShape *)line);
+                gl_barcode_add_line (gbc, x, y, length, width);
 
 		x += POSTNET_BAR_PITCH;
 	}
diff --git a/src/bc-zint.c b/src/bc-zint.c
index ca83f61..c8d6d07 100644
--- a/src/bc-zint.c
+++ b/src/bc-zint.c
@@ -59,7 +59,6 @@ gl_barcode_zint_new (const gchar          *id,
 {
 	glBarcode           *gbc;
 	struct zint_symbol  *symbol;
-	gint                 type;
 	gint		     result;
 
 	symbol = ZBarcode_Create();
@@ -182,9 +181,7 @@ gl_barcode_zint_new (const gchar          *id,
 static glBarcode *render_zint(struct zint_symbol *symbol, gboolean text_flag)
 {
         glBarcode            *gbc;
-        glBarcodeShapeBox    *box;
-        glBarcodeShapeString *bstring;
-	
+
         struct zint_render        *render;
         struct zint_render_line   *zline;
         struct zint_render_string *zstring;
@@ -195,14 +192,7 @@ static glBarcode *render_zint(struct zint_symbol *symbol, gboolean text_flag)
 	
         for ( zline = render->lines; zline != NULL; zline = zline->next )
         {
-                box = gl_barcode_shape_box_new ();
-
-                box->x      = (gdouble) zline->x;
-                box->y      = (gdouble) zline->y;
-                box->width  = (gdouble) zline->width;
-                box->height = (gdouble) zline->length;
-
-                gl_barcode_add_shape (gbc, (glBarcodeShape *)box);
+                gl_barcode_add_box (gbc, zline->x, zline->y, zline->width, zline->length);
         }
 
 	/*
@@ -212,12 +202,9 @@ static glBarcode *render_zint(struct zint_symbol *symbol, gboolean text_flag)
         {
                 for ( zstring = render->strings; zstring != NULL; zstring = zstring->next )
                 {
-                        bstring = gl_barcode_shape_string_new();
-                        bstring->x = (double) zstring->x;
-                        bstring->y = (double) zstring->y;
-                        bstring->fsize = (double) zstring->fsize;
-                        bstring->str   = g_strndup (zstring->text, zstring->length);
-                        gl_barcode_add_shape (gbc, (glBarcodeShape *)bstring);
+                        gl_barcode_add_string (gbc,
+                                               zstring->x, zstring->y,
+                                               zstring->fsize, (gchar *)zstring->text, zstring->length);
                 }
         }
 
diff --git a/src/bc.c b/src/bc.c
index 247b506..ca3d42f 100644
--- a/src/bc.c
+++ b/src/bc.c
@@ -382,6 +382,11 @@ static const Backend backends[] = {
 /* Private function prototypes.                           */
 /*========================================================*/
 
+static void gl_barcode_add_shape        (glBarcode      *bc,
+                                         glBarcodeShape *shape);
+
+static void gl_barcode_shape_free       (glBarcodeShape *shape);
+
 
 /*---------------------------------------------------------------------------*/
 /* Convert id to index into above table.                                     */
@@ -428,79 +433,6 @@ name_to_index (const gchar *name)
 
 
 /*****************************************************************************/
-/* Allocate new Line shape.                                                  */
-/*****************************************************************************/
-glBarcodeShapeLine *
-gl_barcode_shape_line_new (void)
-{
-        glBarcodeShapeLine *line_shape = g_new0 (glBarcodeShapeLine, 1);
-        line_shape->type = GL_BARCODE_SHAPE_LINE;
-
-        return line_shape;
-}
-
-
-/*****************************************************************************/
-/* Allocate new Box shape.                                                   */
-/*****************************************************************************/
-glBarcodeShapeBox *
-gl_barcode_shape_box_new (void)
-{
-        glBarcodeShapeBox *box_shape = g_new0 (glBarcodeShapeBox, 1);
-        box_shape->type = GL_BARCODE_SHAPE_BOX;
-
-        return box_shape;
-}
-
-
-/*****************************************************************************/
-/* Allocate new Alpha shape.                                                 */
-/*****************************************************************************/
-glBarcodeShapeAlpha *
-gl_barcode_shape_alpha_new (void)
-{
-        glBarcodeShapeAlpha *alpha_shape = g_new0 (glBarcodeShapeAlpha, 1);
-        alpha_shape->type = GL_BARCODE_SHAPE_ALPHA;
-
-        return alpha_shape;
-}
-
-
-/*****************************************************************************/
-/* Allocate new String shape.                                                */
-/*****************************************************************************/
-glBarcodeShapeString *
-gl_barcode_shape_string_new (void)
-{
-        glBarcodeShapeString *string_shape = g_new0 (glBarcodeShapeString, 1);
-        string_shape->type = GL_BARCODE_SHAPE_STRING;
-
-        return string_shape;
-}
-
-
-/*****************************************************************************/
-/* Free a shape primitive.                                                   */
-/*****************************************************************************/
-void
-gl_barcode_shape_free (glBarcodeShape *shape)
-{
-        switch (shape->type)
-        {
-
-        case GL_BARCODE_SHAPE_STRING:
-                g_free (shape->string.str);
-                break;
-
-        default:
-                break;
-        }
-
-        g_free (shape);
-}
-
-
-/*****************************************************************************/
 /* Call appropriate barcode backend to create barcode in intermediate format.*/
 /*****************************************************************************/
 glBarcode *
@@ -552,9 +484,98 @@ gl_barcode_free (glBarcode **gbc)
 
 
 /*****************************************************************************/
-/* Add shape to barcode.                                                     */
+/* Add a line.                                                               */
+/*****************************************************************************/
+void
+gl_barcode_add_line (glBarcode      *bc,
+                     gdouble         x,
+                     gdouble         y,
+                     gdouble         length,
+                     gdouble         width)
+{
+        glBarcodeShapeLine *line_shape = g_new0 (glBarcodeShapeLine, 1);
+        line_shape->type = GL_BARCODE_SHAPE_LINE;
+
+        line_shape->x      = x;
+        line_shape->y      = y;
+        line_shape->length = length;
+        line_shape->width  = width;
+
+        gl_barcode_add_shape (bc, (glBarcodeShape *)line_shape);
+}
+
+
+/*****************************************************************************/
+/* Add box.                                                                  */
+/*****************************************************************************/
+void
+gl_barcode_add_box (glBarcode      *bc,
+                    gdouble         x,
+                    gdouble         y,
+                    gdouble         width,
+                    gdouble         height)
+{
+        glBarcodeShapeBox *box_shape = g_new0 (glBarcodeShapeBox, 1);
+        box_shape->type = GL_BARCODE_SHAPE_BOX;
+
+        box_shape->x      = x;
+        box_shape->y      = y;
+        box_shape->width  = width;
+        box_shape->height = height;
+
+        gl_barcode_add_shape (bc, (glBarcodeShape *)box_shape);
+}
+
+
+/*****************************************************************************/
+/* Add character.                                                            */
 /*****************************************************************************/
 void
+gl_barcode_add_char (glBarcode      *bc,
+                     gdouble         x,
+                     gdouble         y,
+                     gdouble         fsize,
+                     gchar           c)
+{
+        glBarcodeShapeChar *char_shape = g_new0 (glBarcodeShapeChar, 1);
+        char_shape->type = GL_BARCODE_SHAPE_CHAR;
+
+        char_shape->x      = x;
+        char_shape->y      = y;
+        char_shape->fsize  = fsize;
+        char_shape->c      = c;
+
+        gl_barcode_add_shape (bc, (glBarcodeShape *)char_shape);
+}
+
+
+/*****************************************************************************/
+/* Add string.                                                               */
+/*****************************************************************************/
+void
+gl_barcode_add_string (glBarcode      *bc,
+                       gdouble         x,
+                       gdouble         y,
+                       gdouble         fsize,
+                       gchar          *string,
+                       gsize           length)
+{
+        glBarcodeShapeString *string_shape = g_new0 (glBarcodeShapeString, 1);
+        string_shape->type = GL_BARCODE_SHAPE_STRING;
+
+        string_shape->x      = x;
+        string_shape->y      = y;
+        string_shape->fsize  = fsize;
+        string_shape->string = g_strndup(string, length);
+
+        gl_barcode_add_shape (bc, (glBarcodeShape *)string_shape);
+}
+
+
+/*****************************************************************************/
+/* Add shape to barcode.                                                     */
+/*****************************************************************************/
+static void
 gl_barcode_add_shape (glBarcode      *bc,
                       glBarcodeShape *shape)
 {
@@ -566,6 +587,27 @@ gl_barcode_add_shape (glBarcode      *bc,
 
 
 /*****************************************************************************/
+/* Free a shape primitive.                                                   */
+/*****************************************************************************/
+static void
+gl_barcode_shape_free (glBarcodeShape *shape)
+{
+        switch (shape->type)
+        {
+
+        case GL_BARCODE_SHAPE_STRING:
+                g_free (shape->string.string);
+                break;
+
+        default:
+                break;
+        }
+
+        g_free (shape);
+}
+
+
+/*****************************************************************************/
 /* Get a list of names for valid barcode styles.                             */
 /*****************************************************************************/
 GList *
diff --git a/src/bc.h b/src/bc.h
index 6c7cbcb..c32fbd3 100644
--- a/src/bc.h
+++ b/src/bc.h
@@ -38,7 +38,7 @@ G_BEGIN_DECLS
 typedef enum {
         GL_BARCODE_SHAPE_LINE,
         GL_BARCODE_SHAPE_BOX,
-        GL_BARCODE_SHAPE_ALPHA,
+        GL_BARCODE_SHAPE_CHAR,
         GL_BARCODE_SHAPE_STRING,
 } glBarcodeShapeType;
 
@@ -100,7 +100,7 @@ typedef struct {
 typedef struct {
 
         /* Begin Common Fields */
-        glBarcodeShapeType  type; /* Always GL_BARCODE_SHAPE_LINE. */
+        glBarcodeShapeType  type; /* Always GL_BARCODE_SHAPE_BOX. */
         gdouble             x;
         gdouble             y;
         /* End Common Fields */
@@ -111,7 +111,7 @@ typedef struct {
 } glBarcodeShapeBox;
 
 /*
- * glBarcodeShapeAlpha:
+ * glBarcodeShapeChar:
  *
  * @ =  origin (x,y) from top left corner of barcode
  *
@@ -128,7 +128,7 @@ typedef struct {
 typedef struct {
 
         /* Begin Common Fields */
-        glBarcodeShapeType  type; /* Always GL_BARCODE_SHAPE_ALPHA. */
+        glBarcodeShapeType  type; /* Always GL_BARCODE_SHAPE_CHAR. */
         gdouble             x;
         gdouble             y;
         /* End Common Fields */
@@ -136,7 +136,7 @@ typedef struct {
         gdouble             fsize;
         gchar               c;
 
-} glBarcodeShapeAlpha;
+} glBarcodeShapeChar;
 
 /*
  * glBarcodeShapeString:
@@ -157,13 +157,13 @@ typedef struct {
 typedef struct {
 
         /* Begin Common Fields */
-        glBarcodeShapeType  type; /* Always GL_BARCODE_SHAPE_ALPHA. */
+        glBarcodeShapeType  type; /* Always GL_BARCODE_SHAPE_STRING. */
         gdouble             x;
         gdouble             y;
         /* End Common Fields */
 
         gdouble             fsize;
-        gchar              *str;
+        gchar              *string;
 
 } glBarcodeShapeString;
 
@@ -174,18 +174,11 @@ typedef union {
 
         glBarcodeShapeLine    line;
         glBarcodeShapeBox     box;
-        glBarcodeShapeAlpha   alpha;
+        glBarcodeShapeChar    bchar;
         glBarcodeShapeString  string;
 
 } glBarcodeShape;
 
-glBarcodeShapeLine   *gl_barcode_shape_line_new   (void);
-glBarcodeShapeBox    *gl_barcode_shape_box_new    (void);
-glBarcodeShapeAlpha  *gl_barcode_shape_alpha_new  (void);
-glBarcodeShapeString *gl_barcode_shape_string_new (void);
-
-void                  gl_barcode_shape_free       (glBarcodeShape *shape);
-
 
 /********************************/
 /* Barcode Intermediate Format. */
@@ -213,8 +206,31 @@ glBarcode       *gl_barcode_new              (const gchar    *id,
 
 void             gl_barcode_free             (glBarcode     **bc);
 
-void             gl_barcode_add_shape        (glBarcode      *bc,
-                                              glBarcodeShape *shape);
+void             gl_barcode_add_line         (glBarcode      *bc,
+                                              gdouble         x,
+                                              gdouble         y,
+                                              gdouble         length,
+                                              gdouble         width);
+
+void             gl_barcode_add_box          (glBarcode      *bc,
+                                              gdouble         x,
+                                              gdouble         y,
+                                              gdouble         width,
+                                              gdouble         height);
+
+void             gl_barcode_add_char         (glBarcode      *bc,
+                                              gdouble         x,
+                                              gdouble         y,
+                                              gdouble         fsize,
+                                              gchar           c);
+
+void             gl_barcode_add_string       (glBarcode      *bc,
+                                              gdouble         x,
+                                              gdouble         y,
+                                              gdouble         fsize,
+                                              gchar          *string,
+                                              gsize           length);
+
 
 GList           *gl_barcode_get_styles_list  (void);
 void             gl_barcode_free_styles_list (GList          *styles_list);
diff --git a/src/label-barcode.c b/src/label-barcode.c
index 7f3cf8f..5367261 100644
--- a/src/label-barcode.c
+++ b/src/label-barcode.c
@@ -425,7 +425,7 @@ draw_object (glLabelObject *object,
         glBarcodeShape       *shape;
         glBarcodeShapeLine   *line;
         glBarcodeShapeBox    *box;
-        glBarcodeShapeAlpha  *bchar;
+        glBarcodeShapeChar   *bchar;
         glBarcodeShapeString *bstring;
         GList                *p;
         gdouble               x_offset, y_offset;
@@ -521,8 +521,8 @@ draw_object (glLabelObject *object,
 
                                 break;
 
-                        case GL_BARCODE_SHAPE_ALPHA:
-                                bchar = (glBarcodeShapeAlpha *) shape;
+                        case GL_BARCODE_SHAPE_CHAR:
+                                bchar = (glBarcodeShapeChar *) shape;
 
                                 layout = pango_cairo_create_layout (cr);
 
@@ -556,7 +556,7 @@ draw_object (glLabelObject *object,
                                 pango_layout_set_font_description (layout, desc);
                                 pango_font_description_free       (desc);
 
-                                pango_layout_set_text (layout, bstring->str, -1);
+                                pango_layout_set_text (layout, bstring->string, -1);
 
                                 pango_layout_get_size (layout, &iw, &ih);
                                 layout_width = (gdouble)iw / (gdouble)PANGO_SCALE;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]