有没有办法沿对角线填充线性渐变?

时间:2015-02-12 00:29:29

标签: c++ wxwidgets

我正在尝试编写一个代码,该代码将填充一个矩形区域,其渐变沿该区域的对角线变化。我以为我可以使用direction参数,如下所示:

context->GradientFillLinear(
   wxrect, 
   get_wx_colour(gradient.front()), 
   get_wx_colour(gradient.back()), 
   wxNORTH | wxEAST);

当我这样做时,编译器将direction子表达式转换为int,并且由于类型不匹配而无法编译。我怀疑渐变只能水平或垂直填充,这就是为什么写入参数期望枚举值。任何人都可以证实这种怀疑吗?

2 个答案:

答案 0 :(得分:1)

从wxWidget-3.0.2开始,GradientFillLinear的实现最终调用了一个特定的实现,看起来有点像:

wxDCImpl::DoGradientFillLinear()
{
  ...
  if ( nDirection == wxEAST || nDirection == wxWEST )
  {
    ...
  }
  else // nDirection == wxNORTH || nDirection == wxSOUTH
  {
    ...
  }

所以,你的怀疑似乎是正确的,即使你确实设法在wxNORTH | wxEAST的论证中以某种方式强迫GradientFillLinear的方向,实施也不会支持它。

答案 1 :(得分:1)

正如SleuthEye的回答所说,这不能直接完成,但您可以随时应用转换将水平或垂直渐变旋转45度。