⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gfx.cc

📁 swf文件查看工具,能够看flash文件的格式
💻 CC
📖 第 1 页 / 共 5 页
字号:
  }  // get stream dict  dict = str->streamGetDict();  // check form type  dict->lookup("FormType", &obj1);  if (!(obj1.isNull() || (obj1.isInt() && obj1.getInt() == 1))) {    error(getPos(), "Unknown form type");  }  obj1.free();  // get bounding box  dict->lookup("BBox", &obj1);  if (!obj1.isArray()) {    obj1.free();    error(getPos(), "Bad form bounding box");    return;  }  for (i = 0; i < 4; ++i) {    obj1.arrayGet(i, &obj2);    bbox[i] = obj2.getNum();    obj2.free();  }  obj1.free();  // get matrix  dict->lookup("Matrix", &obj1);  if (obj1.isArray()) {    for (i = 0; i < 6; ++i) {      obj1.arrayGet(i, &obj2);      m[i] = obj2.getNum();      obj2.free();    }  } else {    m[0] = 1; m[1] = 0;    m[2] = 0; m[3] = 1;    m[4] = 0; m[5] = 0;  }  obj1.free();  // get resources  dict->lookup("Resources", &obj1);  resDict = obj1.isDict() ? obj1.getDict() : (Dict *)NULL;  // draw it  ++formDepth;  doForm1(str, resDict, m, bbox, gTrue, gTrue,	  blendingColorSpace, isolated, knockout,	  alpha, transferFunc, backdropColor);  --formDepth;  if (blendingColorSpace) {    delete blendingColorSpace;  }  obj1.free();}void Gfx::opSetRenderingIntent(Object args[], int numArgs) {}//------------------------------------------------------------------------// color operators//------------------------------------------------------------------------void Gfx::opSetFillGray(Object args[], int numArgs) {  GfxColor color;  state->setFillPattern(NULL);  state->setFillColorSpace(new GfxDeviceGrayColorSpace());  out->updateFillColorSpace(state);  color.c[0] = dblToCol(args[0].getNum());  state->setFillColor(&color);  out->updateFillColor(state);}void Gfx::opSetStrokeGray(Object args[], int numArgs) {  GfxColor color;  state->setStrokePattern(NULL);  state->setStrokeColorSpace(new GfxDeviceGrayColorSpace());  out->updateStrokeColorSpace(state);  color.c[0] = dblToCol(args[0].getNum());  state->setStrokeColor(&color);  out->updateStrokeColor(state);}void Gfx::opSetFillCMYKColor(Object args[], int numArgs) {  GfxColor color;  int i;  state->setFillPattern(NULL);  state->setFillColorSpace(new GfxDeviceCMYKColorSpace());  out->updateFillColorSpace(state);  for (i = 0; i < 4; ++i) {    color.c[i] = dblToCol(args[i].getNum());  }  state->setFillColor(&color);  out->updateFillColor(state);}void Gfx::opSetStrokeCMYKColor(Object args[], int numArgs) {  GfxColor color;  int i;  state->setStrokePattern(NULL);  state->setStrokeColorSpace(new GfxDeviceCMYKColorSpace());  out->updateStrokeColorSpace(state);  for (i = 0; i < 4; ++i) {    color.c[i] = dblToCol(args[i].getNum());  }  state->setStrokeColor(&color);  out->updateStrokeColor(state);}void Gfx::opSetFillRGBColor(Object args[], int numArgs) {  GfxColor color;  int i;  state->setFillPattern(NULL);  state->setFillColorSpace(new GfxDeviceRGBColorSpace());  out->updateFillColorSpace(state);  for (i = 0; i < 3; ++i) {    color.c[i] = dblToCol(args[i].getNum());  }  state->setFillColor(&color);  out->updateFillColor(state);}void Gfx::opSetStrokeRGBColor(Object args[], int numArgs) {  GfxColor color;  int i;  state->setStrokePattern(NULL);  state->setStrokeColorSpace(new GfxDeviceRGBColorSpace());  out->updateStrokeColorSpace(state);  for (i = 0; i < 3; ++i) {    color.c[i] = dblToCol(args[i].getNum());  }  state->setStrokeColor(&color);  out->updateStrokeColor(state);}void Gfx::opSetFillColorSpace(Object args[], int numArgs) {  Object obj;  GfxColorSpace *colorSpace;  GfxColor color;  state->setFillPattern(NULL);  res->lookupColorSpace(args[0].getName(), &obj);  if (obj.isNull()) {    colorSpace = GfxColorSpace::parse(&args[0]);  } else {    colorSpace = GfxColorSpace::parse(&obj);  }  obj.free();  if (colorSpace) {    state->setFillColorSpace(colorSpace);    out->updateFillColorSpace(state);    colorSpace->getDefaultColor(&color);    state->setFillColor(&color);    out->updateFillColor(state);  } else {    error(getPos(), "Bad color space (fill)");  }}void Gfx::opSetStrokeColorSpace(Object args[], int numArgs) {  Object obj;  GfxColorSpace *colorSpace;  GfxColor color;  state->setStrokePattern(NULL);  res->lookupColorSpace(args[0].getName(), &obj);  if (obj.isNull()) {    colorSpace = GfxColorSpace::parse(&args[0]);  } else {    colorSpace = GfxColorSpace::parse(&obj);  }  obj.free();  if (colorSpace) {    state->setStrokeColorSpace(colorSpace);    out->updateStrokeColorSpace(state);    colorSpace->getDefaultColor(&color);    state->setStrokeColor(&color);    out->updateStrokeColor(state);  } else {    error(getPos(), "Bad color space (stroke)");  }}void Gfx::opSetFillColor(Object args[], int numArgs) {  GfxColor color;  int i;  if (numArgs != state->getFillColorSpace()->getNComps()) {    error(getPos(), "Incorrect number of arguments in 'sc' command");    return;  }  state->setFillPattern(NULL);  for (i = 0; i < numArgs; ++i) {    color.c[i] = dblToCol(args[i].getNum());  }  state->setFillColor(&color);  out->updateFillColor(state);}void Gfx::opSetStrokeColor(Object args[], int numArgs) {  GfxColor color;  int i;  if (numArgs != state->getStrokeColorSpace()->getNComps()) {    error(getPos(), "Incorrect number of arguments in 'SC' command");    return;  }  state->setStrokePattern(NULL);  for (i = 0; i < numArgs; ++i) {    color.c[i] = dblToCol(args[i].getNum());  }  state->setStrokeColor(&color);  out->updateStrokeColor(state);}void Gfx::opSetFillColorN(Object args[], int numArgs) {  GfxColor color;  GfxPattern *pattern;  int i;  if (state->getFillColorSpace()->getMode() == csPattern) {    if (numArgs > 1) {      if (!((GfxPatternColorSpace *)state->getFillColorSpace())->getUnder() ||	  numArgs - 1 != ((GfxPatternColorSpace *)state->getFillColorSpace())	                     ->getUnder()->getNComps()) {	error(getPos(), "Incorrect number of arguments in 'scn' command");	return;      }      for (i = 0; i < numArgs - 1 && i < gfxColorMaxComps; ++i) {	if (args[i].isNum()) {	  color.c[i] = dblToCol(args[i].getNum());	}      }      state->setFillColor(&color);      out->updateFillColor(state);    }    if (args[numArgs-1].isName() &&	(pattern = res->lookupPattern(args[numArgs-1].getName()))) {      state->setFillPattern(pattern);    }  } else {    if (numArgs != state->getFillColorSpace()->getNComps()) {      error(getPos(), "Incorrect number of arguments in 'scn' command");      return;    }    state->setFillPattern(NULL);    for (i = 0; i < numArgs && i < gfxColorMaxComps; ++i) {      if (args[i].isNum()) {	color.c[i] = dblToCol(args[i].getNum());      }    }    state->setFillColor(&color);    out->updateFillColor(state);  }}void Gfx::opSetStrokeColorN(Object args[], int numArgs) {  GfxColor color;  GfxPattern *pattern;  int i;  if (state->getStrokeColorSpace()->getMode() == csPattern) {    if (numArgs > 1) {      if (!((GfxPatternColorSpace *)state->getStrokeColorSpace())	       ->getUnder() ||	  numArgs - 1 != ((GfxPatternColorSpace *)state->getStrokeColorSpace())	                     ->getUnder()->getNComps()) {	error(getPos(), "Incorrect number of arguments in 'SCN' command");	return;      }      for (i = 0; i < numArgs - 1 && i < gfxColorMaxComps; ++i) {	if (args[i].isNum()) {	  color.c[i] = dblToCol(args[i].getNum());	}      }      state->setStrokeColor(&color);      out->updateStrokeColor(state);    }    if (args[numArgs-1].isName() &&	(pattern = res->lookupPattern(args[numArgs-1].getName()))) {      state->setStrokePattern(pattern);    }  } else {    if (numArgs != state->getStrokeColorSpace()->getNComps()) {      error(getPos(), "Incorrect number of arguments in 'SCN' command");      return;    }    state->setStrokePattern(NULL);    for (i = 0; i < numArgs && i < gfxColorMaxComps; ++i) {      if (args[i].isNum()) {	color.c[i] = dblToCol(args[i].getNum());      }    }    state->setStrokeColor(&color);    out->updateStrokeColor(state);  }}//------------------------------------------------------------------------// path segment operators//------------------------------------------------------------------------void Gfx::opMoveTo(Object args[], int numArgs) {  state->moveTo(args[0].getNum(), args[1].getNum());}void Gfx::opLineTo(Object args[], int numArgs) {  if (!state->isCurPt()) {    error(getPos(), "No current point in lineto");    return;  }  state->lineTo(args[0].getNum(), args[1].getNum());}void Gfx::opCurveTo(Object args[], int numArgs) {  double x1, y1, x2, y2, x3, y3;  if (!state->isCurPt()) {    error(getPos(), "No current point in curveto");    return;  }  x1 = args[0].getNum();  y1 = args[1].getNum();  x2 = args[2].getNum();  y2 = args[3].getNum();  x3 = args[4].getNum();  y3 = args[5].getNum();  state->curveTo(x1, y1, x2, y2, x3, y3);}void Gfx::opCurveTo1(Object args[], int numArgs) {  double x1, y1, x2, y2, x3, y3;  if (!state->isCurPt()) {    error(getPos(), "No current point in curveto1");    return;  }  x1 = state->getCurX();  y1 = state->getCurY();  x2 = args[0].getNum();  y2 = args[1].getNum();  x3 = args[2].getNum();  y3 = args[3].getNum();  state->curveTo(x1, y1, x2, y2, x3, y3);}void Gfx::opCurveTo2(Object args[], int numArgs) {  double x1, y1, x2, y2, x3, y3;  if (!state->isCurPt()) {    error(getPos(), "No current point in curveto2");    return;  }  x1 = args[0].getNum();  y1 = args[1].getNum();  x2 = args[2].getNum();  y2 = args[3].getNum();  x3 = x2;  y3 = y2;  state->curveTo(x1, y1, x2, y2, x3, y3);}void Gfx::opRectangle(Object args[], int numArgs) {  double x, y, w, h;  x = args[0].getNum();  y = args[1].getNum();  w = args[2].getNum();  h = args[3].getNum();  state->moveTo(x, y);  state->lineTo(x + w, y);  state->lineTo(x + w, y + h);  state->lineTo(x, y + h);  state->closePath();}void Gfx::opClosePath(Object args[], int numArgs) {  if (!state->isCurPt()) {    error(getPos(), "No current point in closepath");    return;  }  state->closePath();}//------------------------------------------------------------------------// path painting operators//------------------------------------------------------------------------void Gfx::opEndPath(Object args[], int numArgs) {  doEndPath();}void Gfx::opStroke(Object args[], int numArgs) {  if (!state->isCurPt()) {    //error(getPos(), "No path in stroke");    return;  }  if (state->isPath()) {    if (state->getStrokeColorSpace()->getMode() == csPattern) {      doPatternStroke();    } else {      out->stroke(state);    }  }  doEndPath();}void Gfx::opCloseStroke(Object args[], int numArgs) {  if (!state->isCurPt()) {    //error(getPos(), "No path in closepath/stroke");    return;  }  if (state->isPath()) {    state->closePath();    if (state->getStrokeColorSpace()->getMode() == csPattern) {      doPatternStroke();    } else {      out->stroke(state);    }  }  doEndPath();}void Gfx::opFill(Object args[], int numArgs) {  if (!state->isCurPt()) {    //error(getPos(), "No path in fill");    return;  }  if (state->isPath()) {    if (state->getFillColorSpace()->getMode() == csPattern) {      doPatternFill(gFalse);    } else {      out->fill(state);    }  }  doEndPath();}void Gfx::opEOFill(Object args[], int numArgs) {  if (!state->isCurPt()) {    //error(getPos(), "No path in eofill");    return;  }  if (state->isPath()) {    if (state->getFillColorSpace()->getMode() == csPattern) {      doPatternFill(gTrue);    } else {      out->eoFill(state);    }  }  doEndPath();}void Gfx::opFillStroke(Object args[], int numArgs) {  if (!state->isCurPt()) {    //error(getPos(), "No path in fill/stroke");    return;  }  if (state->isPath()) {    if (state->getFillColorSpace()->getMode() == csPattern) {      doPatternFill(gFalse);    } else {      out->fill(state);    }    if (state->getStrokeColorSpace()->getMode() == csPattern) {      doPatternStroke();    } else {      out->stroke(state);    }  }  doEndPath();}void Gfx::opCloseFillStroke(Object args[], int numArgs) {  if (!state->isCurPt()) {    //error(getPos(), "No path in closepath/fill/stroke");    return;  }  if (state->isPath()) {    state->closePath();    if (state->getFillColorSpace()->getMode() == csPattern) {      doPatternFill(gFalse);    } else {      out->fill(state);    }    if (state->getStrokeColorSpace()->getMode() == csPattern) {      doPatternStroke();    } else {      out->stroke(state);    }  }  doEndPath();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -