diff --git a/backend/codablock.c b/backend/codablock.c
index 58335f87..53d9dff4 100644
--- a/backend/codablock.c
+++ b/backend/codablock.c
@@ -845,7 +845,7 @@ int codablock(struct zint_symbol *symbol, unsigned char source[], int length) {
);
}
/* >>> Data */
- emptyColumns=useColumns;
+ emptyColumns=useColumns;
/* +++ One liner don't have start/stop code */
if (rows == 1)
emptyColumns +=2;
@@ -987,5 +987,9 @@ int codablock(struct zint_symbol *symbol, unsigned char source[], int length) {
if (!(symbol->output_options & BARCODE_BIND)) {
symbol->output_options += BARCODE_BIND;
}
+
+ if (symbol->border_width < 2) {
+ symbol->border_width = 2;
+ }
return 0;
}
diff --git a/backend/common.c b/backend/common.c
index e14588ec..2c04b59f 100644
--- a/backend/common.c
+++ b/backend/common.c
@@ -177,7 +177,7 @@ int is_stackable(const int symbology) {
case BARCODE_TELEPEN_NUM:
case BARCODE_ITF14:
case BARCODE_CODE32:
- case BARCODE_CODABLOCK:
+ case BARCODE_CODABLOCKF:
retval = 1;
}
diff --git a/backend/library.c b/backend/library.c
index 37d6ad82..3e3e686b 100644
--- a/backend/library.c
+++ b/backend/library.c
@@ -402,7 +402,7 @@ static int gs1_compliant(const int symbology) {
case BARCODE_CODE49:
case BARCODE_QRCODE:
case BARCODE_DOTCODE:
- case BARCODE_CODABLOCK:
+ case BARCODE_CODABLOCKF:
result = 1;
break;
}
@@ -549,7 +549,7 @@ int ZBarcode_ValidID(int symbol_id) {
case BARCODE_GRIDMATRIX:
case BARCODE_HANXIN:
case BARCODE_DOTCODE:
- case BARCODE_CODABLOCK:
+ case BARCODE_CODABLOCKF:
result = 1;
break;
}
@@ -779,7 +779,7 @@ static int reduced_charset(struct zint_symbol *symbol, const unsigned char *sour
break;
case BARCODE_DOTCODE: error_number = dotcode(symbol, preprocessed, in_length);
break;
- case BARCODE_CODABLOCK: error_number = codablock(symbol, preprocessed, in_length);
+ case BARCODE_CODABLOCKF: error_number = codablock(symbol, preprocessed, in_length);
break;
}
@@ -880,7 +880,7 @@ int ZBarcode_Encode(struct zint_symbol *symbol, unsigned char *source, int in_le
symbol->symbology = BARCODE_AUSPOST;
}
if (symbol->symbology == 73) {
- symbol->symbology = BARCODE_CODABLOCK;
+ symbol->symbology = BARCODE_CODABLOCKF;
symbol->input_mode = GS1_MODE;
}
if (symbol->symbology == 78) {
diff --git a/backend/ps.c b/backend/ps.c
index e0b8d6eb..51979902 100644
--- a/backend/ps.c
+++ b/backend/ps.c
@@ -881,8 +881,14 @@ int ps_plot(struct zint_symbol *symbol) {
} else {
fprintf(feps, "%.2f %.2f %.2f %.2f setcmykcolor\n", cyan_ink, magenta_ink, yellow_ink, black_ink);
}
- for (r = 1; r < symbol->rows; r++) {
- fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", 2.0 * scaler, ((r * row_height) + textoffset + yoffset - 1) * scaler, xoffset * scaler, symbol->width * scaler);
+ if (symbol->symbology != BARCODE_CODABLOCKF) {
+ for (r = 1; r < symbol->rows; r++) {
+ fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", 2.0 * scaler, ((r * row_height) + textoffset + yoffset - 1) * scaler, xoffset * scaler, symbol->width * scaler);
+ }
+ } else {
+ for (r = 1; r < symbol->rows; r++) {
+ fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", 2.0 * scaler, ((r * row_height) + textoffset + yoffset - 1) * scaler, (xoffset + 11) * scaler, (symbol->width - 25) * scaler);
+ }
}
}
}
@@ -893,8 +899,13 @@ int ps_plot(struct zint_symbol *symbol) {
} else {
fprintf(feps, "%.2f %.2f %.2f %.2f setcmykcolor\n", cyan_ink, magenta_ink, yellow_ink, black_ink);
}
- fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, textoffset * scaler, 0.0, (symbol->width + xoffset + xoffset) * scaler);
- fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, (textoffset + symbol->height + symbol->border_width) * scaler, 0.0, (symbol->width + xoffset + xoffset) * scaler);
+ if (symbol->symbology != BARCODE_CODABLOCKF) {
+ fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, textoffset * scaler, 0.0, (symbol->width + xoffset + xoffset) * scaler);
+ fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, (textoffset + symbol->height + symbol->border_width) * scaler, 0.0, (symbol->width + xoffset + xoffset) * scaler);
+ } else {
+ fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, textoffset * scaler, xoffset * scaler, symbol->width * scaler);
+ fprintf(feps, "%.2f %.2f TB %.2f %.2f TR\n", symbol->border_width * scaler, (textoffset + symbol->height + symbol->border_width) * scaler, xoffset * scaler, symbol->width * scaler);
+ }
}
if (symbol->output_options & BARCODE_BOX) {
/* side bars */
diff --git a/backend/raster.c b/backend/raster.c
index 16be4d12..7fcf3120 100644
--- a/backend/raster.c
+++ b/backend/raster.c
@@ -171,6 +171,21 @@ void draw_bar(char *pixelbuf, int xpos, int xlen, int ypos, int ylen, int image_
}
}
+void draw_circle(char *pixelbuf, int image_width, int image_height, int x0, int y0, int radius, char fill) {
+ int x, y;
+
+ for (y = -radius; y <= radius; y++) {
+ for (x = -radius; x <= radius; x++) {
+ if ((x * x) + (y * y) <= (radius * radius)) {
+ if ((y + y0 >= 0) && (y + y0 < image_height)
+ && (x + x0 >= 0) && (x + x0 < image_width)) {
+ *(pixelbuf + ((y + y0) * image_width) + (x + x0)) = fill;
+ }
+ }
+ }
+ }
+}
+
int bullseye_pixel(int row, int col) {
int block_val, block_pos, return_val;
@@ -185,18 +200,31 @@ int bullseye_pixel(int row, int col) {
return return_val;
}
-void draw_bullseye(char *pixelbuf, int image_width, int xoffset, int yoffset) {
+void draw_bullseye(char *pixelbuf, int image_width, int image_height, int xoffset, int yoffset) {
/* Central bullseye in Maxicode symbols */
int i, j;
-
+
for (j = 103; j < 196; j++) {
for (i = 0; i < 93; i++) {
if (bullseye_pixel(j - 103, i)) {
- /* if(bullseye[(((j - 103) * 93) + i)] == 1) { */
*(pixelbuf + (image_width * j) + (image_width * yoffset) + i + 99 + xoffset) = '1';
}
}
}
+
+/*
+ // At some point (probably after 2.5 release) the above clumsy drawing method should
+ // be replaced by something more like the code below
+
+ int scaler = 10;
+
+ draw_circle(pixelbuf, image_width, image_height, (14.5 * scaler) + xoffset, (int)(15 * scaler) + yoffset, (int)(4.57 * scaler), '1');
+ draw_circle(pixelbuf, image_width, image_height, (14.5 * scaler) + xoffset, (int)(15 * scaler) + yoffset, (int)(3.78 * scaler), '0');
+ draw_circle(pixelbuf, image_width, image_height, (14.5 * scaler) + xoffset, (int)(15 * scaler) + yoffset, (int)(2.99 * scaler), '1');
+ draw_circle(pixelbuf, image_width, image_height, (14.5 * scaler) + xoffset, (int)(15 * scaler) + yoffset, (int)(2.20 * scaler), '0');
+ draw_circle(pixelbuf, image_width, image_height, (14.5 * scaler) + xoffset, (int)(15 * scaler) + yoffset, (int)(1.39 * scaler), '1');
+ draw_circle(pixelbuf, image_width, image_height, (14.5 * scaler) + xoffset, (int)(15 * scaler) + yoffset, (int)(0.60 * scaler), '0');
+*/
}
void draw_hexagon(char *pixelbuf, int image_width, int xposn, int yposn) {
@@ -378,7 +406,7 @@ int plot_raster_maxicode(struct zint_symbol *symbol, int rotate_angle, int data_
}
}
- draw_bullseye(pixelbuf, image_width, (2 * xoffset), (2 * yoffset));
+ draw_bullseye(pixelbuf, image_width, image_height, (2 * xoffset), (2 * yoffset));
for (row = 0; row < symbol->rows; row++) {
yposn = row * 9;
@@ -478,21 +506,6 @@ void to_latin1(unsigned char source[], unsigned char preprocessed[]) {
return;
}
-void draw_circle(char *pixelbuf, int image_width, int image_height, int x0, int y0, int radius) {
- int x, y;
-
- for (y = -radius; y <= radius; y++) {
- for (x = -radius; x <= radius; x++) {
- if ((x * x) + (y * y) <= (radius * radius)) {
- if ((y + y0 >= 0) && (y + y0 < image_height)
- && (x + x0 >= 0) && (x + x0 < image_width)) {
- *(pixelbuf + ((y + y0) * image_width) + (x + x0)) = '1';
- }
- }
- }
- }
-}
-
int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int data_type) {
float scaler = 2 * symbol->scale;
char *scaled_pixelbuf;
@@ -531,7 +544,8 @@ int plot_raster_dotty(struct zint_symbol *symbol, int rotate_angle, int data_typ
draw_circle(scaled_pixelbuf, scale_width, scale_height,
(int) ((i + xoffset) * scaler) + (scaler / 2.0),
(int) ((r + yoffset) * scaler) + (scaler / 2.0),
- (int) (scaler / 2.0));
+ (int) (scaler / 2.0),
+ '1');
}
}
}
@@ -948,13 +962,24 @@ int plot_raster_default(struct zint_symbol *symbol, int rotate_angle, int data_t
/* Put boundary bars or box around symbol */
if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) {
/* boundary bars */
- draw_bar(pixelbuf, 0, (symbol->width + xoffset + xoffset) * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height);
- draw_bar(pixelbuf, 0, (symbol->width + xoffset + xoffset) * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height);
+ if (symbol->symbology != BARCODE_CODABLOCKF) {
+ draw_bar(pixelbuf, 0, (symbol->width + xoffset + xoffset) * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height);
+ draw_bar(pixelbuf, 0, (symbol->width + xoffset + xoffset) * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height);
+ } else {
+ draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, textoffset * 2, symbol->border_width * 2, image_width, image_height);
+ draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, (textoffset + symbol->height + symbol->border_width) * 2, symbol->border_width * 2, image_width, image_height);
+ }
if ((symbol->output_options & BARCODE_BIND) != 0) {
if ((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) {
/* row binding */
- for (r = 1; r < symbol->rows; r++) {
- draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, ((r * row_height) + textoffset + yoffset - 1) * 2, 2 * 2, image_width, image_height);
+ if (symbol->symbology != BARCODE_CODABLOCKF) {
+ for (r = 1; r < symbol->rows; r++) {
+ draw_bar(pixelbuf, xoffset * 2, symbol->width * 2, ((r * row_height) + textoffset + yoffset - 1) * 2, 2 * 2, image_width, image_height);
+ }
+ } else {
+ for (r = 1; r < symbol->rows; r++) {
+ draw_bar(pixelbuf, (xoffset + 11) * 2 , (symbol->width - 25) * 2, ((r * row_height) + textoffset + yoffset - 1) * 2, 2 * 2, image_width, image_height);
+ }
}
}
}
diff --git a/backend/svg.c b/backend/svg.c
index 9a823fd8..9442b3e9 100644
--- a/backend/svg.c
+++ b/backend/svg.c
@@ -617,14 +617,25 @@ int svg_plot(struct zint_symbol *symbol) {
if (symbol->output_options & BARCODE_BIND) {
if ((symbol->rows > 1) && (is_stackable(symbol->symbology) == 1)) {
/* row binding */
- for (r = 1; r < symbol->rows; r++) {
- fprintf(fsvg, " \n", xoffset * scaler, ((r * row_height) + yoffset - 1) * scaler, symbol->width * scaler, 2.0 * scaler);
+ if (symbol->symbology != BARCODE_CODABLOCKF) {
+ for (r = 1; r < symbol->rows; r++) {
+ fprintf(fsvg, " \n", xoffset * scaler, ((r * row_height) + yoffset - 1) * scaler, symbol->width * scaler, 2.0 * scaler);
+ }
+ } else {
+ for (r = 1; r < symbol->rows; r++) {
+ fprintf(fsvg, " \n", (xoffset + 11) * scaler, ((r * row_height) + yoffset - 1) * scaler, (symbol->width - 25) * scaler, 2.0 * scaler);
+ }
}
}
}
if ((symbol->output_options & BARCODE_BOX) || (symbol->output_options & BARCODE_BIND)) {
- fprintf(fsvg, " \n", 0.0, 0.0, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler);
- fprintf(fsvg, " \n", 0.0, (symbol->height + symbol->border_width) * scaler, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler);
+ if (symbol->symbology != BARCODE_CODABLOCKF) {
+ fprintf(fsvg, " \n", 0.0, 0.0, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler);
+ fprintf(fsvg, " \n", 0.0, (symbol->height + symbol->border_width) * scaler, (symbol->width + xoffset + xoffset) * scaler, symbol->border_width * scaler);
+ } else {
+ fprintf(fsvg, " \n", xoffset * scaler, 0.0, symbol->width * scaler, symbol->border_width * scaler);
+ fprintf(fsvg, " \n", xoffset * scaler, (symbol->height + symbol->border_width) * scaler, symbol->width * scaler, symbol->border_width * scaler);
+ }
}
if (symbol->output_options & BARCODE_BOX) {
/* side bars */
diff --git a/backend/zint.h b/backend/zint.h
index 798e06f4..7cb73081 100644
--- a/backend/zint.h
+++ b/backend/zint.h
@@ -143,7 +143,7 @@ extern "C" {
#define BARCODE_RM4SCC 70
#define BARCODE_DATAMATRIX 71
#define BARCODE_EAN14 72
-#define BARCODE_CODABLOCK 74
+#define BARCODE_CODABLOCKF 74
#define BARCODE_NVE18 75
#define BARCODE_JAPANPOST 76
#define BARCODE_KOREAPOST 77
diff --git a/backend_qt4/qzint.cpp b/backend_qt4/qzint.cpp
index 38793ecd..15557bb5 100644
--- a/backend_qt4/qzint.cpp
+++ b/backend_qt4/qzint.cpp
@@ -394,8 +394,13 @@ namespace Zint {
yoffset = m_borderWidth;
break;
case BIND:
- painter.fillRect(0, 0, m_zintSymbol->width + xoffset + xoffset, m_borderWidth, QBrush(m_fgColor));
- painter.fillRect(0, m_zintSymbol->height + m_borderWidth, m_zintSymbol->width + xoffset + xoffset, m_borderWidth, QBrush(m_fgColor));
+ if (m_zintSymbol->symbology != BARCODE_CODABLOCKF) {
+ painter.fillRect(0, 0, m_zintSymbol->width + xoffset + xoffset, m_borderWidth, QBrush(m_fgColor));
+ painter.fillRect(0, m_zintSymbol->height, m_zintSymbol->width + xoffset + xoffset, m_borderWidth, QBrush(m_fgColor));
+ } else {
+ painter.fillRect(xoffset, 0, m_zintSymbol->width, m_borderWidth, QBrush(m_fgColor));
+ painter.fillRect(xoffset, m_zintSymbol->height, m_zintSymbol->width, m_borderWidth, QBrush(m_fgColor));
+ }
painter.translate(m_zintSymbol->whitespace_width, m_borderWidth);
yoffset = m_borderWidth;
break;
@@ -516,10 +521,12 @@ namespace Zint {
}
/* Add row binding */
if (((m_zintSymbol->symbology == BARCODE_CODE16K)
- || (m_zintSymbol->symbology == BARCODE_CODE49)
- || (m_zintSymbol->symbology == BARCODE_CODABLOCK)) && (row != 0)) {
+ || (m_zintSymbol->symbology == BARCODE_CODE49)) && (row != 0)) {
painter.fillRect(0, y - 1, m_zintSymbol->width, 2, QBrush(m_fgColor));
}
+ if ((m_zintSymbol->symbology == BARCODE_CODABLOCKF) && (row != 0)) {
+ painter.fillRect(11, y - 1, m_zintSymbol->width - 25, 2, QBrush(m_fgColor));
+ }
y += m_zintSymbol->row_height[row];
}
}