コード例 #1
0
 function setGlobalCompositeOperation(newGlobalCompositeOperation) {
   var vgBlendMode = compositeOperation2vg[newGlobalCompositeOperation];
   if (vgBlendMode) {
     globalCompositeOperation = newGlobalCompositeOperation;
     blendMode = vgBlendMode;
     vg.setI(vg.VGParamType.VG_BLEND_MODE, vgBlendMode);
   } // TODO else ? (@see spec)
   var saveBlendMode = vg.getI(vg.VGParamType.VG_BLEND_MODE);
 }
コード例 #2
0
  function dropShadow(paintFn) {
    var success;

    var saveBlendMode = vg.getI(vg.VGParamType.VG_BLEND_MODE);

    vg.getMatrix(shadowTransform);

    success = vg.egl.makeCurrent(shadowSurface, shadowContext);

    vg.loadMatrix(shadowTransform);

    vg.clear(0, 0, width, height);

    vg.translate(shadowOffsetX, shadowOffsetY);
    paintFn();
    vg.translate(-shadowOffsetX, -shadowOffsetY);

    vg.setI(vg.VGParamType.VG_BLEND_MODE, vg.VGBlendMode.VG_BLEND_SRC_IN);
    vg.setParameterI(shadowPaint, vg.VGPaintParamType.VG_PAINT_TYPE,
                                  vg.VGPaintType.VG_PAINT_TYPE_COLOR);
    vg.setParameterFV(shadowPaint, vg.VGPaintParamType.VG_PAINT_COLOR,
                                   shadowColor);
    vg.setPaint(shadowPaint, vg.VGPaintMode.VG_FILL_PATH);

    vg.getMatrix(shadowTransform);
    vg.loadIdentity();


    var vgPath = vg.createPath(vg.VG_PATH_FORMAT_STANDARD,
                               vg.VGPathDatatype.VG_PATH_DATATYPE_F,
                               1.0 /* scale */ , 0.0 /* bias */,
                               5 /* segCapacityHint */,
                               5 /* coordCapacityHint */,
                               vg.VGPathCapabilities.VG_PATH_CAPABILITY_APPEND_TO);

    vg.vgu.rect(vgPath, 0, 0, width, height);
    vg.drawPath(vgPath, vg.VGPaintMode.VG_FILL_PATH);
    vg.destroyPath(vgPath);

    vg.loadMatrix(shadowTransform);

    vg.setI(vg.VGParamType.VG_BLEND_MODE, vg.VGBlendMode.VG_BLEND_SRC_OVER);

    if (shadowBlur !== 0) {
      var sigma = shadowBlur / 2;
      vg.gaussianBlur(shadowDstImage, shadowSrcImage,
                      sigma, sigma,
                      vg.VGTilingMode.VG_TILE_PAD);
    }

    success = vg.egl.makeCurrent(vg.screen.surface, vg.screen.context);

    vg.setI(vg.VGParamType.VG_BLEND_MODE, vg.VGBlendMode.VG_BLEND_SRC_OVER);

    vg.getMatrix(shadowTransform);
    vg.loadIdentity();
    vg.drawImage(shadowBlur !== 0 ? shadowDstImage : shadowSrcImage);
    vg.loadMatrix(shadowTransform);

    vg.setI(vg.VGParamType.VG_BLEND_MODE, saveBlendMode);
  }