?? metado.java
字號:
cb.arc(state.transformX(l), state.transformY(b), state.transformX(r), state.transformY(t), 0, 360); strokeAndFill(); break; } case META_ARC: { if (isNullStrokeFill(state.getLineNeutral())) break; float yend = state.transformY(in.readShort()); float xend = state.transformX(in.readShort()); float ystart = state.transformY(in.readShort()); float xstart = state.transformX(in.readShort()); float b = state.transformY(in.readShort()); float r = state.transformX(in.readShort()); float t = state.transformY(in.readShort()); float l = state.transformX(in.readShort()); float cx = (r + l) / 2; float cy = (t + b) / 2; float arc1 = getArc(cx, cy, xstart, ystart); float arc2 = getArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) arc2 += 360; cb.arc(l, b, r, t, arc1, arc2); cb.stroke(); break; } case META_PIE: { if (isNullStrokeFill(state.getLineNeutral())) break; float yend = state.transformY(in.readShort()); float xend = state.transformX(in.readShort()); float ystart = state.transformY(in.readShort()); float xstart = state.transformX(in.readShort()); float b = state.transformY(in.readShort()); float r = state.transformX(in.readShort()); float t = state.transformY(in.readShort()); float l = state.transformX(in.readShort()); float cx = (r + l) / 2; float cy = (t + b) / 2; float arc1 = getArc(cx, cy, xstart, ystart); float arc2 = getArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) arc2 += 360; ArrayList ar = cb.bezierArc(l, b, r, t, arc1, arc2); if (ar.size() == 0) break; float pt[] = (float [])ar.get(0); cb.moveTo(cx, cy); cb.lineTo(pt[0], pt[1]); for (int k = 0; k < ar.size(); ++k) { pt = (float [])ar.get(k); cb.curveTo(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]); } cb.lineTo(cx, cy); strokeAndFill(); break; } case META_CHORD: { if (isNullStrokeFill(state.getLineNeutral())) break; float yend = state.transformY(in.readShort()); float xend = state.transformX(in.readShort()); float ystart = state.transformY(in.readShort()); float xstart = state.transformX(in.readShort()); float b = state.transformY(in.readShort()); float r = state.transformX(in.readShort()); float t = state.transformY(in.readShort()); float l = state.transformX(in.readShort()); float cx = (r + l) / 2; float cy = (t + b) / 2; float arc1 = getArc(cx, cy, xstart, ystart); float arc2 = getArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) arc2 += 360; ArrayList ar = cb.bezierArc(l, b, r, t, arc1, arc2); if (ar.size() == 0) break; float pt[] = (float [])ar.get(0); cx = pt[0]; cy = pt[1]; cb.moveTo(cx, cy); for (int k = 0; k < ar.size(); ++k) { pt = (float [])ar.get(k); cb.curveTo(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]); } cb.lineTo(cx, cy); strokeAndFill(); break; } case META_RECTANGLE: { if (isNullStrokeFill(true)) break; float b = state.transformY(in.readShort()); float r = state.transformX(in.readShort()); float t = state.transformY(in.readShort()); float l = state.transformX(in.readShort()); cb.rectangle(l, b, r - l, t - b); strokeAndFill(); break; } case META_INTERSECTCLIPRECT: { float b = state.transformY(in.readShort()); float r = state.transformX(in.readShort()); float t = state.transformY(in.readShort()); float l = state.transformX(in.readShort()); cb.rectangle(l, b, r - l, t - b); cb.eoClip(); cb.newPath(); break; } case META_EXTTEXTOUT: { int y = in.readShort(); int x = in.readShort(); int count = in.readWord(); int flag = in.readWord(); int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; if ((flag & (MetaFont.ETO_CLIPPED | MetaFont.ETO_OPAQUE)) != 0) { x1 = in.readShort(); y1 = in.readShort(); x2 = in.readShort(); y2 = in.readShort(); } byte text[] = new byte[count]; int k; for (k = 0; k < count; ++k) { byte c = (byte)in.readByte(); if (c == 0) break; text[k] = c; } String s; try { s = new String(text, 0, k, "Cp1252"); } catch (UnsupportedEncodingException e) { s = new String(text, 0, k); } outputText(x, y, flag, x1, y1, x2, y2, s); break; } case META_TEXTOUT: { int count = in.readWord(); byte text[] = new byte[count]; int k; for (k = 0; k < count; ++k) { byte c = (byte)in.readByte(); if (c == 0) break; text[k] = c; } String s; try { s = new String(text, 0, k, "Cp1252"); } catch (UnsupportedEncodingException e) { s = new String(text, 0, k); } count = (count + 1) & 0xfffe; in.skip(count - k); int y = in.readShort(); int x = in.readShort(); outputText(x, y, 0, 0, 0, 0, 0, s); break; } case META_SETBKCOLOR: state.setCurrentBackgroundColor(in.readColor()); break; case META_SETTEXTCOLOR: state.setCurrentTextColor(in.readColor()); break; case META_SETTEXTALIGN: state.setTextAlign(in.readWord()); break; case META_SETBKMODE: state.setBackgroundMode(in.readWord()); break; case META_SETPOLYFILLMODE: state.setPolyFillMode(in.readWord()); break; case META_SETPIXEL: { Color color = in.readColor(); int y = in.readShort(); int x = in.readShort(); cb.saveState(); cb.setColorFill(color); cb.rectangle(state.transformX(x), state.transformY(y), .2f, .2f); cb.fill(); cb.restoreState(); break; } } in.skip((tsize * 2) - (in.getLength() - lenMarker)); } } public void outputText(int x, int y, int flag, int x1, int y1, int x2, int y2, String text) throws IOException { MetaFont font = state.getCurrentFont(); float refX = state.transformX(x); float refY = state.transformY(y); float sin = (float)Math.sin(font.getAngle()); float cos = (float)Math.cos(font.getAngle()); float fontSize = font.getFontSize(state); BaseFont bf = font.getFont(); int align = state.getTextAlign(); float textWidth = bf.getWidthPoint(text, fontSize); float tx = 0; float ty = 0; float descender = bf.getFontDescriptor(BaseFont.DESCENT, fontSize); float ury = bf.getFontDescriptor(BaseFont.BBOXURY, fontSize); cb.saveState(); cb.concatCTM(cos, sin, -sin, cos, refX, refY); if ((align & MetaState.TA_CENTER) == MetaState.TA_CENTER) tx = -textWidth / 2; else if ((align & MetaState.TA_RIGHT) == MetaState.TA_RIGHT) tx = -textWidth; if ((align & MetaState.TA_BASELINE) == MetaState.TA_BASELINE) ty = 0; else if ((align & MetaState.TA_BOTTOM) == MetaState.TA_BOTTOM) ty = -descender; else ty = -ury; Color textColor; if (state.getBackgroundMode() == MetaState.OPAQUE) { textColor = state.getCurrentBackgroundColor(); cb.setColorFill(textColor); cb.rectangle(tx, ty + descender, textWidth, ury - descender); cb.fill(); } textColor = state.getCurrentTextColor(); cb.setColorFill(textColor); cb.beginText(); cb.setFontAndSize(bf, fontSize); cb.setTextMatrix(tx, ty); cb.showText(text); cb.endText(); if (font.isUnderline()) { cb.rectangle(tx, ty - fontSize / 4, textWidth, fontSize / 15); cb.fill(); } if (font.isStrikeout()) { cb.rectangle(tx, ty + fontSize / 3, textWidth, fontSize / 15); cb.fill(); } cb.restoreState(); } public boolean isNullStrokeFill(boolean isRectangle) { MetaPen pen = state.getCurrentPen(); MetaBrush brush = state.getCurrentBrush(); boolean noPen = (pen.getStyle() == MetaPen.PS_NULL); int style = brush.getStyle(); boolean isBrush = (style == MetaBrush.BS_SOLID || (style == MetaBrush.BS_HATCHED && state.getBackgroundMode() == MetaState.OPAQUE)); boolean result = noPen && !isBrush; if (!noPen) { if (isRectangle) state.setLineJoinRectangle(cb); else state.setLineJoinPolygon(cb); } return result; } public void strokeAndFill(){ MetaPen pen = state.getCurrentPen(); MetaBrush brush = state.getCurrentBrush(); int penStyle = pen.getStyle(); int brushStyle = brush.getStyle(); if (penStyle == MetaPen.PS_NULL) { cb.closePath(); if (state.getPolyFillMode() == MetaState.ALTERNATE) { cb.eoFill(); } else { cb.fill(); } } else { boolean isBrush = (brushStyle == MetaBrush.BS_SOLID || (brushStyle == MetaBrush.BS_HATCHED && state.getBackgroundMode() == MetaState.OPAQUE)); if (isBrush) { if (state.getPolyFillMode() == MetaState.ALTERNATE) cb.closePathEoFillStroke(); else cb.closePathFillStroke(); } else { cb.closePathStroke(); } } } static float getArc(float xCenter, float yCenter, float xDot, float yDot) { double s = Math.atan2(yDot - yCenter, xDot - xCenter); if (s < 0) s += Math.PI * 2; return (float)(s / Math.PI * 180); }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -