Skip to content
This repository has been archived by the owner on Jan 7, 2023. It is now read-only.

Commit

Permalink
demos/painter_path_test: add sweep-gradient
Browse files Browse the repository at this point in the history
  • Loading branch information
krogueintel committed Dec 19, 2018
1 parent caefc90 commit eae4b75
Showing 1 changed file with 59 additions and 12 deletions.
71 changes: 59 additions & 12 deletions demos/painter_path_test/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ class PerPath

vec2 m_gradient_p0, m_gradient_p1;
float m_gradient_r0, m_gradient_r1;
float m_sweep_repeat_factor;
bool m_repeat_gradient;

bool m_repeat_window;
Expand Down Expand Up @@ -237,6 +238,7 @@ class painter_stroke_test:public sdl_painter_demo
draw_no_gradient,
draw_linear_gradient,
draw_radial_gradient,
draw_sweep_gradient,

number_gradient_draw_modes
};
Expand Down Expand Up @@ -370,6 +372,12 @@ class painter_stroke_test:public sdl_painter_demo
return m_paths[m_selected_path].m_gradient_r1;
}

float&
sweep_repeat_factor(void)
{
return m_paths[m_selected_path].m_sweep_repeat_factor;
}

bool&
repeat_gradient(void)
{
Expand Down Expand Up @@ -434,6 +442,7 @@ class painter_stroke_test:public sdl_painter_demo
command_line_argument_value<float> m_change_stroke_width_rate;
command_line_argument_value<float> m_window_change_rate;
command_line_argument_value<float> m_radial_gradient_change_rate;
command_line_argument_value<float> m_sweep_factor_gradient_change_rate;
command_line_list<std::string> m_path_file_list;
DashPatternList m_dash_pattern_files;
command_line_argument_value<bool> m_print_path;
Expand Down Expand Up @@ -585,6 +594,8 @@ PerPath(const Path &path, const std::string &label, int w, int h, bool from_gylp
m_gradient_r0 = 0.0f;
m_gradient_r1 = 200.0f / m_path_zoomer.transformation().scale();

m_sweep_repeat_factor = 1.0f;

m_repeat_xy = vec2(0.0f, 0.0f);
m_repeat_wh = m_path.tessellation()->bounding_box_max() - m_path.tessellation()->bounding_box_min();

Expand Down Expand Up @@ -613,6 +624,9 @@ painter_stroke_test(void):
m_radial_gradient_change_rate(0.1f, "change_rate_brush_radial_gradient",
"rate of change in pixels/sec when changing the radial gradient radius",
*this),
m_sweep_factor_gradient_change_rate(0.05f, "change_rate_brush_sweep_factor_gradient",
"rate of change in units/sec when changing the sweep factor",
*this),
m_path_file_list("add_path_file",
"add a path read from file to path list; if path list is empty then "
"a default path will be used to render ",
Expand Down Expand Up @@ -741,6 +755,7 @@ painter_stroke_test(void):
m_gradient_mode_labels[draw_no_gradient] = "draw_no_gradient";
m_gradient_mode_labels[draw_linear_gradient] = "draw_linear_gradient";
m_gradient_mode_labels[draw_radial_gradient] = "draw_radial_gradient";
m_gradient_mode_labels[draw_sweep_gradient] = "draw_sweep_gradient";

m_join_labels[Painter::no_joins] = "no_joins";
m_join_labels[Painter::rounded_joins] = "rounded_joins";
Expand Down Expand Up @@ -932,17 +947,16 @@ update_cts_params(void)
gradient_r0() -= delta;
gradient_r0() = fastuidraw::t_max(0.0f, gradient_r0());
}

if (keyboard_state[SDL_SCANCODE_2])
{
gradient_r0() += delta;
}

if (keyboard_state[SDL_SCANCODE_3])
{
gradient_r1() -= delta;
gradient_r1() = fastuidraw::t_max(0.0f, gradient_r1());
}

if (keyboard_state[SDL_SCANCODE_4])
{
gradient_r1() += delta;
Expand All @@ -956,6 +970,26 @@ update_cts_params(void)
}
}

if (m_gradient_draw_mode == draw_sweep_gradient)
{
float delta;

delta = m_sweep_factor_gradient_change_rate.value();
if (keyboard_state[SDL_SCANCODE_1])
{
sweep_repeat_factor() -= delta;
}
if (keyboard_state[SDL_SCANCODE_2])
{
sweep_repeat_factor() += delta;
}

if (keyboard_state[SDL_SCANCODE_1] || keyboard_state[SDL_SCANCODE_2])
{
std::cout << "Sweep Repeat factor set to: "
<< sweep_repeat_factor() << "\n";
}
}

if (is_miter_join_style(m_join_style) && m_have_miter_limit)
{
Expand Down Expand Up @@ -1574,16 +1608,6 @@ void
painter_stroke_test::
construct_color_stops(void)
{
ColorStopSequence S;
reference_counted_ptr<ColorStopSequenceOnAtlas> h;

S.add(ColorStop(u8vec4(0, 255, 0, 255), 0.0f));
S.add(ColorStop(u8vec4(0, 255, 255, 255), 0.33f));
S.add(ColorStop(u8vec4(255, 255, 0, 255), 0.66f));
S.add(ColorStop(u8vec4(255, 0, 0, 255), 1.0f));
h = FASTUIDRAWnew ColorStopSequenceOnAtlas(S, m_painter->colorstop_atlas(), 8);
m_color_stops.push_back(named_color_stop("Default ColorStop Sequence", h));

for(color_stop_arguments::hoard::const_iterator
iter = m_color_stop_args.values().begin(),
end = m_color_stop_args.values().end();
Expand All @@ -1595,6 +1619,19 @@ construct_color_stops(void)
iter->second->m_discretization);
m_color_stops.push_back(named_color_stop(iter->first, h));
}

if (m_color_stops.empty())
{
ColorStopSequence S;
reference_counted_ptr<ColorStopSequenceOnAtlas> h;

S.add(ColorStop(u8vec4(0, 255, 0, 255), 0.0f));
S.add(ColorStop(u8vec4(0, 255, 255, 255), 0.33f));
S.add(ColorStop(u8vec4(255, 255, 0, 255), 0.66f));
S.add(ColorStop(u8vec4(255, 0, 0, 255), 1.0f));
h = FASTUIDRAWnew ColorStopSequenceOnAtlas(S, m_painter->colorstop_atlas(), 8);
m_color_stops.push_back(named_color_stop("Default ColorStop Sequence", h));
}
}

void
Expand Down Expand Up @@ -1731,6 +1768,16 @@ draw_scene(bool drawing_wire_frame)
gradient_p1(), gradient_r1(),
repeat_gradient());
}
else if (m_gradient_draw_mode == draw_sweep_gradient)
{
vec2 d;
d = gradient_p1() - gradient_p0();
fill_brush.sweep_gradient(m_color_stops[m_active_color_stop].second,
gradient_p0(), t_atan2(d.y(), d.x()),
Painter::y_increases_downwards,
Painter::clockwise, sweep_repeat_factor(),
repeat_gradient());
}
else
{
fill_brush.no_gradient();
Expand Down

0 comments on commit eae4b75

Please sign in to comment.