在C ++ XPCOM代码中绘制画布

时间:2013-08-19 21:31:42

标签: c++ video firefox-addon mozilla xpcom

是否可以从C ++ XPCOM插件中绘制元素? 以前(很久以前)可能会得到一个nsIDOMCanvasRenderingContext2D接口的对象,并使用ti的方法PutImageData_explicit来在画布上绘制图像。如今,nsIDOMCanvasRenderingContext2D隐藏了一切,我不知道如何实现这一目标。

一般情况下 - 是否有办法在网页上通过插件呈现视频(假设从远程主机获取)?

任何建议将不胜感激。 谢谢

1 个答案:

答案 0 :(得分:0)

现在有PutImageData_explicit。但那是受保护的成员。

  • 您可能会欺骗系统并为您的目的打破封装,例如:通过推导和向下推广(现在受保护的成员都是你的)。
  • 或者这么做,并且在使用PutImageDataImageData时要使用ErrorResult

向下转发以获得受保护的成员:

#include <string>
#include <iostream>

class Base {
  protected:
    std::string myName() {
      return "Base";
    }
};
class Derived : public Base {
  public:
    std::string myName() {
      return Base::myName();
    }
};

int main() {
  Base *base = new Base();
  Derived* derived = static_cast<Derived*>(base);
  std::cout << derived->myName() << std::endl;
  delete base;
  return 0;
}

PS:这是有效的,因为这仍然适用sizeof(Base) == sizeof(Derived)。你真的不想修改大小,例如通过添加数据成员等,除非您是段错误和堆损坏的粉丝;)