print_img: correct off-center print area via per-device pin_offset

On the PT-P900W the print area is not centered on the 560-pin printhead:
its center sits at pin 272 rather than the head center (pin 280), a fixed
8-pin offset that is constant across all tape widths. Centering the raster
data on the head therefore prints ~0.5mm off-center (measured as a constant
~1mm margin delta across 12/18/36mm tapes, confirmed against the spec).

Add a pin_offset field to _pt_dev_info (0 = centered, the default for all
existing printers) and apply it in print_img. Set it to -8 for the
PT-P900Wc, which reproduces the spec left-margin exactly for every tape
width ((560-print_area)/2 - 8 = documented left margin).

Reference: Brother "Software Developer's Manual - Raster Command Reference,
PT-P900/P900W/P950NW", section 2.3.5 "Raster line" (per-tape left/right
margin and print-area pin counts for the 560-pin head).
https://download.brother.com/welcome/docp100407/cv_ptp900_eng_raster_102.pdf
This commit is contained in:
Tobias Klausmann
2026-07-18 08:01:24 +02:00
committed by Dominic Radermacher
parent 9af6276135
commit 921206cd5f
3 changed files with 19 additions and 3 deletions
+7 -1
View File
@@ -186,7 +186,13 @@ int print_img(ptouch_dev ptdev, gdImage *im, int chain, int precut)
return -1;
}
printf(_("image size (%ipx x %ipx)\n"), gdImageSX(im), gdImageSY(im));
int offset = ((int)max_pixels / 2) - (gdImageSY(im)/2); /* always print centered */
int offset = ((int)max_pixels / 2) - (gdImageSY(im)/2); /* center within the printhead */
/* Some models do not center the print area on the printhead. pin_offset
is a fixed per-device shift (in pins/px, constant across tape widths)
that corrects for this; it is 0 where centering is already correct.
See the Brother "Software Developer's Manual - Raster Command
Reference, PT-P900/P900W/P950NW", section 2.3.5 "Raster line". */
offset += ptdev->devinfo->pin_offset;
printf("max_pixels=%ld, offset=%d\n", max_pixels, offset);
if ((ptdev->devinfo->flags & FLAG_RASTER_PACKBITS) == FLAG_RASTER_PACKBITS) {
if (arguments.debug) {