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

Is there a way to fill a linear gradient along a diagonal?

我正在尝试编写代码,用沿该区域的对角线变化的渐变填充矩形区域。我以为我可以按如下方式使用方向参数:

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

当我这样做时,编译器将方向子表达式转换为 int 并且由于类型不匹配而无法编译。我怀疑渐变只能水平或垂直填充,这就是为什么编写参数时需要一个枚举值。谁能证实这个怀疑?

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

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

因此,您的怀疑似乎是正确的,即使您在 GradientFillLinear 的论点中确实设法以某种方式将方向强制为 wxNORTH | wxEAST,实施也不会支持它。

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