Jon Trauntvein
Jon Trauntvein

Reputation: 4554

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

I am trying to write code that will fill a rectangular region with a gradient that varies along a diagonal of that region. I had thought that I could play with the direction parameter as follows:

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

When I do this, the compiler converts the direction subexpression to an int and fails to compile because of a type mismatch. I suspect that gradients can only be filled horizontally or vertically and this is why the parameter is written expecting an enum value. Can anyone confirm this suspicion?

Upvotes: 0

Views: 230

Answers (2)

VZ.
VZ.

Reputation: 22688

As SleuthEye's answer correctly says, this can't be done directly, but you can always apply a transformation to rotate the horizontal or vertical gradient by 45 degrees.

Upvotes: 1

SleuthEye
SleuthEye

Reputation: 14577

As of wxWidget-3.0.2, the implementation of GradientFillLinear eventually calls a specific implementation which looks somewhat like:

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

So, your suspicion appears to be correct and even if you did manage to somehow coerce the direction as wxNORTH | wxEAST in the argument of GradientFillLinear, the implementation would not have supported it.

Upvotes: 1

Related Questions