1 /*_________________________________ epson-layout.c _________________________________*/
\r
3 /* 1 2 3 4 5 6 7 8 */
\r
4 /*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
\r
5 /*******************************************|********************************************/
\r
7 * Copyright (c) 2009 Seiko Epson Corporation All rights reserved.
\r
9 * Copyright protection claimed includes all forms and matters of
\r
10 * copyrightable material and information now allowed by statutory or judicial
\r
11 * law or hereinafter granted, including without limitation, material generated
\r
12 * from the software programs which are displayed on the screen such as icons,
\r
13 * screen display looks, etc.
\r
16 /*******************************************|********************************************/
\r
18 /* Extent Layout Module */
\r
20 /* Public Function Calls */
\r
21 /* -------------------------- */
\r
22 /* EPS_ERR_CODE elAppendQRCode (qrcode ); */
\r
23 /* EPS_ERR_CODE elComposeQrcode (pSrc, pDst, bpp, pRec ); */
\r
24 /* EPS_ERR_CODE elCDClipping (pSrc, pDst, bpp, pRec ); */
\r
26 /*******************************************|********************************************/
\r
28 /*------------------------------------ Includes -------------------------------------*/
\r
29 /*******************************************|********************************************/
\r
30 #include "epson-escpr-def.h"
\r
31 #include "epson-escpr-err.h"
\r
32 #include "epson-escpr-media.h"
\r
33 #include "epson-escpr-mem.h"
\r
34 #include "epson-layout.h"
\r
36 /*----------------------------- Local Macro Definitions -------------------------------*/
\r
37 /*******************************************|********************************************/
\r
38 #ifdef EPS_LOG_MODULE_ELT
\r
39 #define EPS_LOG_MODULE EPS_LOG_MODULE_ELT
\r
41 #define EPS_LOG_MODULE 0
\r
44 /*---------------------------- ESC/P-R Lib Global Variables --------------------------*/
\r
45 /*******************************************|********************************************/
\r
47 /*** Extern Function */
\r
48 extern EPS_CMN_FUNC epsCmnFnc;
\r
50 /*** Print Job Structure */
\r
51 /*** -------------------------------------------------------------------------------*/
\r
52 extern EPS_PRINT_JOB printJob;
\r
55 /*--------------------------- Data Structure Declarations ---------------------------*/
\r
56 /*******************************************|********************************************/
\r
59 /*-------------------------- Local Functions Declaration ----------------------------*/
\r
60 /*******************************************|********************************************/
\r
61 static EPS_UINT32 isqrt(EPS_UINT32 x);
\r
64 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
65 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
66 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
67 /*-------------------- Public Functions ---------------------*/
\r
68 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
69 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
70 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
72 /*******************************************|********************************************/
\r
74 /* Function name: elGetDots() */
\r
78 /* Name: Type: Description: */
\r
79 /* resolution EPS_UINT8 I: resolution */
\r
80 /* length EPS_INT32 I: length */
\r
86 /* calc the number of the dots in the resolution. */
\r
88 /*******************************************|********************************************/
\r
89 EPS_INT32 elGetDots (
\r
91 EPS_UINT8 resolution,
\r
92 EPS_FLOAT millimeter
\r
97 if(resolution == EPS_IR_360X360){ /* EPS_IR_360X360 == 0 */
\r
98 dots = (EPS_INT32)(millimeter * 14.1732); /* 0.03937 * 360 = 14.1732 */
\r
99 } else if( resolution & EPS_IR_720X720 ){
\r
100 dots = (EPS_INT32)(millimeter * 28.3464); /* 0.03937 * 720 = 28.3464 */
\r
101 } else if( resolution & EPS_IR_300X300 ){
\r
102 dots = (EPS_INT32)(millimeter * 11.811); /* 0.03937 * 300 = 11.811 */
\r
103 } else if( resolution & EPS_IR_1200X1200 ){
\r
104 dots = (EPS_INT32)(millimeter * 47.244); /* 0.03937 * 1200 = 23.622 */
\r
105 } else if( resolution & EPS_IR_600X600 ){
\r
106 dots = (EPS_INT32)(millimeter * 23.622); /* 0.03937 * 600 = 23.622 */
\r
108 /* default 360dpi */
\r
109 dots = (EPS_INT32)(millimeter * 14.1732); /* 0.03937 * 360 = 14.1732 */
\r
116 #ifdef GCOMSW_EL_CDLABEL
\r
117 /*******************************************|********************************************/
\r
119 /* Function name: elCDClipping() */
\r
123 /* Name: Type: Description: */
\r
124 /* pSrc const EPS_UINT8* I: source buffer */
\r
125 /* pDst EPS_UINT8* O: destination buffer */
\r
126 /* bpp EPS_UINT8 I: byte per pixel */
\r
127 /* pRec EPS_RECT* I/O: byte per pixel */
\r
129 /* Return value: */
\r
133 /* clip band line to cd label */
\r
135 /*******************************************|********************************************/
\r
136 EPS_ERR_CODE elCDClipping (
\r
138 const EPS_UINT8* pSrc,
\r
144 #define GET_RADIUS(mm) (EPS_INT32)(elGetDots(printJob.attr.inputResolution, mm)/2)
\r
145 #define X_OF_SECANT(r, y) ((EPS_INT32)isqrt((r-y) * (r+y)))
\r
147 EPS_LINE_SEGMENT segOut, segIn;
\r
148 EPS_INT32 rOut = GET_RADIUS(printJob.attr.cdDimOut);
\r
149 EPS_INT32 rIn = GET_RADIUS(printJob.attr.cdDimIn);
\r
151 EPS_UINT32 wOut = 0;
\r
152 EPS_UINT32 wIn = 0;
\r
156 /* calc clipping segment */
\r
157 y = rOut - pRec->top;
\r
162 wOut = X_OF_SECANT(rOut, y);
\r
163 segOut.start = rOut - wOut;
\r
164 segOut.length = wOut * 2;
\r
166 if(y <= rIn && y >= -rIn) {
\r
167 wIn = X_OF_SECANT(rIn, y);
\r
168 segIn.start = wOut - wIn;
\r
169 segIn.length = wIn * 2;
\r
175 /* EPS_DBGPRINT((" (%04d - %04d) (%04d - %04d)\n",
\r
176 segOut.start, segOut.length,
\r
177 segIn.start, segIn.length));
\r
180 memcpy(pDst, pSrc + segOut.start * bpp, segOut.length * bpp);
\r
183 if( 0 < segIn.start){
\r
184 memset(pDst + segIn.start * bpp, 0xFF, segIn.length * bpp);
\r
187 pRec->left = segOut.start;
\r
188 pRec->right = segOut.start + segOut.length;
\r
190 EPS_RETURN( EPS_ERR_NONE );
\r
193 static EPS_UINT32 isqrt(EPS_UINT32 x)
\r
195 EPS_INT32 b = 15; /* this is the next bit we try */
\r
196 EPS_UINT32 r = 0; /* r will contain the result */
\r
197 EPS_UINT32 r2= 0; /* here we maintain r squared */
\r
201 EPS_UINT32 sr2=r2;
\r
203 /* compute (r+(1<<b))**2, we have r**2 already. */
\r
204 r2 += (EPS_UINT32)((r<<(1+b))+(1<<(b+b)));
\r
205 r += (EPS_UINT32)(1<<b);
\r
215 #endif /* GCOMSW_EL_CDLABEL */
\r
217 /*_________________________________ epson-layout.c _________________________________*/
\r
219 /*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
\r
220 /* 1 2 3 4 5 6 7 8 */
\r
221 /*******************************************|********************************************/
\r
222 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
223 /***** End of File *** End of File *** End of File *** End of File *** End of File ******/
\r
224 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r