canvas.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { CHAR_WIDTH_SCALE_MAP } from './utils'
  2. const _expand = ctx => {
  3. return {
  4. setFont({fontFamily: ff = 'sans-serif', fontSize: fs = 14, fontWeight: fw = 'normal' , textStyle: ts = 'normal'}) {
  5. // let ctx = this.ctx
  6. // 设置属性
  7. // #ifndef MP-TOUTIAO
  8. // fw = fw == 'bold' ? 'bold' : 'normal'
  9. // ts = ts == 'italic' ? 'italic' : 'normal'
  10. // #endif
  11. // #ifdef MP-TOUTIAO
  12. fw = fw == 'bold' ? 'bold' : ''
  13. ts = ts == 'italic' ? 'italic' : ''
  14. // #endif
  15. // fs = toPx(fs)
  16. ctx.font = `${ts} ${fw} ${fs}px ${ff}`;
  17. },
  18. measureText(text, fontSize) {
  19. // #ifndef APP-PLUS
  20. return ctx._measureText(text)
  21. // #endif
  22. // #ifdef APP-PLUS
  23. // app measureText为0需要累加计算0
  24. return {
  25. width: text.split("").reduce((widthScaleSum, char) => {
  26. let code = char.charCodeAt(0);
  27. let widthScale = CHAR_WIDTH_SCALE_MAP[code - 0x20] || 1;
  28. return widthScaleSum + widthScale;
  29. }, 0) * fontSize
  30. };
  31. // #endif
  32. }
  33. }
  34. }
  35. export function expand(ctx) {
  36. ctx._measureText = ctx.measureText
  37. return Object.assign(ctx, _expand(ctx))
  38. }
  39. export function adaptor(ctx) {
  40. ctx._measureText = ctx.measureText
  41. return Object.assign(ctx, _expand(ctx), {
  42. setStrokeStyle(val) {
  43. ctx.strokeStyle = val;
  44. },
  45. setLineWidth(val) {
  46. ctx.lineWidth = val;
  47. },
  48. setLineCap(val) {
  49. ctx.lineCap = val;
  50. },
  51. setFillStyle(val) {
  52. ctx.fillStyle = val;
  53. },
  54. setFontSize(val) {
  55. ctx.font = String(val);
  56. },
  57. setGlobalAlpha(val) {
  58. ctx.globalAlpha = val;
  59. },
  60. setLineJoin(val) {
  61. ctx.lineJoin = val;
  62. },
  63. setTextAlign(val) {
  64. ctx.textAlign = val;
  65. },
  66. setMiterLimit(val) {
  67. ctx.miterLimit = val;
  68. },
  69. setShadow(offsetX, offsetY, blur, color) {
  70. ctx.shadowOffsetX = offsetX;
  71. ctx.shadowOffsetY = offsetY;
  72. ctx.shadowBlur = blur;
  73. ctx.shadowColor = color;
  74. },
  75. setTextBaseline(val) {
  76. ctx.textBaseline = val;
  77. },
  78. createCircularGradient() {},
  79. draw() {},
  80. });
  81. }