Fixing regression errors, better logic
This commit is contained in:
		
							parent
							
								
									bbdec90c0d
								
							
						
					
					
						commit
						5c8753dcba
					
				@ -23,6 +23,7 @@ var CanvasExtraState = (function CanvasExtraStateClosure() {
 | 
				
			|||||||
    this.alphaIsShape = false;
 | 
					    this.alphaIsShape = false;
 | 
				
			||||||
    this.fontSize = 0;
 | 
					    this.fontSize = 0;
 | 
				
			||||||
    this.textMatrix = IDENTITY_MATRIX;
 | 
					    this.textMatrix = IDENTITY_MATRIX;
 | 
				
			||||||
 | 
					    this.fontMatrix = IDENTITY_MATRIX;
 | 
				
			||||||
    this.leading = 0;
 | 
					    this.leading = 0;
 | 
				
			||||||
    // Current point (in user coordinates)
 | 
					    // Current point (in user coordinates)
 | 
				
			||||||
    this.x = 0;
 | 
					    this.x = 0;
 | 
				
			||||||
@ -546,40 +547,36 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    setFont: function canvasGraphicsSetFont(fontRefName, size) {
 | 
					    setFont: function canvasGraphicsSetFont(fontRefName, size) {
 | 
				
			||||||
      var fontObj = this.objs.get(fontRefName).fontObj;
 | 
					      var fontObj = this.objs.get(fontRefName).fontObj;
 | 
				
			||||||
 | 
					      var current = this.current;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (!fontObj) {
 | 
					      if (!fontObj)
 | 
				
			||||||
        throw 'Can\'t find font for ' + fontRefName;
 | 
					        throw 'Can\'t find font for ' + fontRefName;
 | 
				
			||||||
      }
 | 
					
 | 
				
			||||||
 | 
					      // Slice-clone matrix so we can manipulate it without affecting original
 | 
				
			||||||
 | 
					      if (fontObj.fontMatrix)
 | 
				
			||||||
 | 
					        current.fontMatrix = fontObj.fontMatrix.slice(0);
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        current.fontMatrix = IDENTITY_MATRIX.slice(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // A valid matrix needs all main diagonal elements to be non-zero
 | 
					      // A valid matrix needs all main diagonal elements to be non-zero
 | 
				
			||||||
      // This also ensures we bypass FF bugzilla bug #719844.
 | 
					      // This also ensures we bypass FF bugzilla bug #719844.
 | 
				
			||||||
      if (fontObj.fontMatrix[0] === 0 ||
 | 
					      if (current.fontMatrix[0] === 0 ||
 | 
				
			||||||
          fontObj.fontMatrix[3] === 0) {
 | 
					          current.fontMatrix[3] === 0) {
 | 
				
			||||||
        warn('Invalid font matrix for font ' + fontRefName);
 | 
					        warn('Invalid font matrix for font ' + fontRefName);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Fallback
 | 
					 | 
				
			||||||
        fontObj.fontMatrix = IDENTITY_MATRIX;
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      var name = fontObj.loadedName || 'sans-serif';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      // Clone fontMatrix so we can manipulate it without affecting original
 | 
					 | 
				
			||||||
      this.current.fontMatrix = fontObj.fontMatrix.slice(0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      // The spec for Tf (setFont) says that 'size' specifies the font 'scale',
 | 
					      // The spec for Tf (setFont) says that 'size' specifies the font 'scale',
 | 
				
			||||||
      // and in some docs this can be negative. We implement this in fontMatrix.
 | 
					      // and in some docs this can be negative (inverted x-y axes).
 | 
				
			||||||
 | 
					      // We implement this condition with fontMatrix.
 | 
				
			||||||
      if (size < 0) {
 | 
					      if (size < 0) {
 | 
				
			||||||
        size = -size;
 | 
					        size = -size;
 | 
				
			||||||
        this.current.fontMatrix[0] = -fontObj.fontMatrix[0];
 | 
					        current.fontMatrix[0] *= -1;
 | 
				
			||||||
        this.current.fontMatrix[3] = -fontObj.fontMatrix[3];
 | 
					        current.fontMatrix[3] *= -1;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      this.current.font = fontObj;
 | 
					      this.current.font = fontObj;
 | 
				
			||||||
      this.current.fontSize = size;
 | 
					      this.current.fontSize = size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Cache font matrix sign
 | 
					 | 
				
			||||||
      this.current.fontMatrixXSign = this.current.fontMatrix[0] > 0 ? 1 : -1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      var name = fontObj.loadedName || 'sans-serif';
 | 
					      var name = fontObj.loadedName || 'sans-serif';
 | 
				
			||||||
      var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') :
 | 
					      var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') :
 | 
				
			||||||
                                 (fontObj.bold ? 'bold' : 'normal');
 | 
					                                 (fontObj.bold ? 'bold' : 'normal');
 | 
				
			||||||
@ -692,7 +689,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
          var transformed = Util.applyTransform([glyph.width, 0], fontMatrix);
 | 
					          var transformed = Util.applyTransform([glyph.width, 0], fontMatrix);
 | 
				
			||||||
          var width = transformed[0] * fontSize +
 | 
					          var width = transformed[0] * fontSize +
 | 
				
			||||||
              current.fontMatrixXSign * charSpacing;
 | 
					              Util.sign(current.fontMatrix[0]) * charSpacing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          ctx.translate(width, 0);
 | 
					          ctx.translate(width, 0);
 | 
				
			||||||
          current.x += width * textHScale;
 | 
					          current.x += width * textHScale;
 | 
				
			||||||
@ -723,13 +720,13 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
				
			|||||||
          var glyph = glyphs[i];
 | 
					          var glyph = glyphs[i];
 | 
				
			||||||
          if (glyph === null) {
 | 
					          if (glyph === null) {
 | 
				
			||||||
            // word break
 | 
					            // word break
 | 
				
			||||||
            x += current.fontMatrixXSign * wordSpacing;
 | 
					            x += Util.sign(current.fontMatrix[0]) * wordSpacing;
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          var char = glyph.fontChar;
 | 
					          var char = glyph.fontChar;
 | 
				
			||||||
          var charWidth = glyph.width * fontSize * 0.001 +
 | 
					          var charWidth = glyph.width * fontSize * 0.001 +
 | 
				
			||||||
              current.fontMatrixXSign * charSpacing;
 | 
					              Util.sign(current.fontMatrix[0]) * charSpacing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          switch (textRenderingMode) {
 | 
					          switch (textRenderingMode) {
 | 
				
			||||||
            default: // other unsupported rendering modes
 | 
					            default: // other unsupported rendering modes
 | 
				
			||||||
 | 
				
			|||||||
@ -93,6 +93,10 @@ var Util = (function UtilClosure() {
 | 
				
			|||||||
    return [xt, yt];
 | 
					    return [xt, yt];
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Util.sign = function sign(num) {
 | 
				
			||||||
 | 
					    return num < 0 ? -1 : 1;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return Util;
 | 
					  return Util;
 | 
				
			||||||
})();
 | 
					})();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user