X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FLaTeX%2FTikZ%2FSet.pm;h=78b53ce2ee853c9ac17f738b939a29596d49e2d3;hb=038a21c751dcd34f83857e095d935bfa07b6b679;hp=e719643a3a7fea5d64c81efd4cd873da5ee2fd4e;hpb=cb3b916e0590c6a0b70b60f30304921385462faa;p=perl%2Fmodules%2FLaTeX-TikZ.git diff --git a/lib/LaTeX/TikZ/Set.pm b/lib/LaTeX/TikZ/Set.pm index e719643..78b53ce 100644 --- a/lib/LaTeX/TikZ/Set.pm +++ b/lib/LaTeX/TikZ/Set.pm @@ -44,9 +44,9 @@ my $ltmc_tc = LaTeX::TikZ::Tools::type_constraint('LaTeX::TikZ::Mod::Clip'); sub mod { my $set = shift; - push @{$set->_mods}, - map { $ltm_tc->check($_) ? $_ : $ltm_tc->coerce($_) } - @_; + $ltm_tc->assert_valid($_) for @_; + + push @{$set->_mods}, @_; $set; } @@ -58,23 +58,29 @@ sub mod { sub mods_unique { my ($set) = @_; - my (@mods, $has_layer); + my (@mods, $last_layer); MOD: for my $mod ($set->mods) { - $has_layer = 1 if $ltml_tc->check($mod); + my $is_layer = $ltml_tc->check($mod); + $last_layer = $mod if $is_layer; my $tag = $mod->tag; my $old = $mods{$tag} || []; for (@$old) { next MOD if $_->[0]->cover($mod); } - push @{$mods{$tag}}, [ $mod, $last_mod++ ]; + push @{$mods{$tag}}, [ $mod, $last_mod++, $is_layer ]; push @mods, $mod; } - if ($has_layer) { + if ($last_layer) { # Clips and mods don't propagate through layers. Hence if a layer is set, # force their reuse. - @mods = map $_->[0], sort { $a->[1] <=> $b->[1] } map @$_, values %mods; + @mods = $last_layer; + push @mods, map $_->[0], + sort { $a->[1] <=> $b->[1] } + grep !$_->[2], + map @$_, + values %mods; } return @mods; @@ -127,7 +133,7 @@ sub clip { $_[0]->mod( map { - $ltmc_tc->check($_) ? $_ : LaTeX::TikZ::Mod::Clip->new($_) + $ltmc_tc->check($_) ? $_ : LaTeX::TikZ::Mod::Clip->new(clip => $_) } @_[1 .. $#_] ) }