ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/perl/background
(Generate patch)

Comparing rxvt-unicode/src/perl/background (file contents):
Revision 1.96 by root, Tue Sep 17 17:57:49 2019 UTC vs.
Revision 1.97 by root, Tue Sep 17 18:17:14 2019 UTC

1358 return unless $str[0] or $self->{bg_opts}->{path}; 1358 return unless $str[0] or $self->{bg_opts}->{path};
1359 1359
1360 my $bg_opts = $self->{bg_opts}; 1360 my $bg_opts = $self->{bg_opts};
1361 1361
1362 if ($str[0]) { 1362 if ($str[0]) {
1363 $bg_opts->{tile} = 0; 1363 $bg_opts->{tile} = 0;
1364 $bg_opts->{keep_aspect} = 0; 1364 $bg_opts->{keep_aspect} = 0;
1365 $bg_opts->{root_align} = 0; 1365 $bg_opts->{root_align} = 0;
1366 $bg_opts->{h_scale} = $bg_opts->{v_scale} = 100; 1366 $bg_opts->{h_scale} = $bg_opts->{v_scale} = 100;
1367 $bg_opts->{h_align} = $bg_opts->{v_align} = 50; 1367 $bg_opts->{h_align} = $bg_opts->{v_align} = 50;
1368 $bg_opts->{path} = unpack "H*", $str[0]; 1368 $bg_opts->{path} = $str[0];
1369 } 1369 }
1370 1370
1371 my @oplist = split /:/, $str[1]; 1371 my @oplist = split /:/, $str[1];
1372 1372
1373 for (@oplist) { 1373 for (@oplist) {
1422 $bg_opts->{v_align} = $y if defined $y; 1422 $bg_opts->{v_align} = $y if defined $y;
1423 } 1423 }
1424 } 1424 }
1425} 1425}
1426 1426
1427# helper function, quote string as perl without allowing
1428# any code execution or other shenanigans. does not
1429# support binary NULs in string.
1430sub q0 {
1431 (my $str = shift) =~ s/\x00//g; # make sure there really aren't any embedded NULs
1432 "q\x00$str\x00"
1433}
1434
1427sub old_bg_expr { 1435sub old_bg_expr {
1428 my ($self) = @_; 1436 my ($self) = @_;
1429 1437
1430 my $expr; 1438 my $expr;
1431 1439
1446 } 1454 }
1447 1455
1448 my $tint = $bg_opts->{tint}; 1456 my $tint = $bg_opts->{tint};
1449 1457
1450 if ($tint) { 1458 if ($tint) {
1459 $tint = q0 $tint;
1451 $expr .= "tint $tint, "; 1460 $expr .= "tint $tint,";
1452 } 1461 }
1453 1462
1454 my $blur = $bg_opts->{blur}; 1463 my $blur = $bg_opts->{blur};
1455 1464
1456 if ($blur and $blur =~ /^ =? ([0-9]+)? (?:[xX] ([0-9]+))? $/x) { 1465 if ($blur and $blur =~ /^ =? ([0-9]+)? (?:[xX] ([0-9]+))? $/x) {
1487 if ($h_scale != 0 and $v_scale != 0) { 1496 if ($h_scale != 0 and $v_scale != 0) {
1488 my $op = $bg_opts->{keep_aspect} ? "fit" : "resize"; 1497 my $op = $bg_opts->{keep_aspect} ? "fit" : "resize";
1489 $file_expr .= "$op TW * $h_scale, TH * $v_scale, "; 1498 $file_expr .= "$op TW * $h_scale, TH * $v_scale, ";
1490 } 1499 }
1491 1500
1501 my $path = q0 $bg_opts->{path};
1502
1492 $file_expr .= "keep { load pack \"H*\", \"$bg_opts->{path}\" })"; 1503 $file_expr .= "keep { load $path })";
1493 1504
1494 if ($expr) { 1505 if ($expr) {
1495 $expr .= ", tint (\"[50]white\", $file_expr)"; 1506 $expr .= ", tint (\"[50]white\", $file_expr)";
1496 } else { 1507 } else {
1497 $expr = $file_expr; 1508 $expr = $file_expr;
1545 1556
1546 if (!$expr) { 1557 if (!$expr) {
1547 $self->{bg_opts} = { h_scale => 100, v_scale => 100, 1558 $self->{bg_opts} = { h_scale => 100, v_scale => 100,
1548 h_align => 50, v_align => 50 }; 1559 h_align => 50, v_align => 50 };
1549 1560
1550 $self->{bg_opts}->{shade} = $self->find_resource ("shading", "sh"); 1561 $self->{bg_opts}{shade} = $self->find_resource ("shading", "sh");
1551 $self->{bg_opts}->{tint} = $self->find_resource ("tintColor", "tint"); 1562 $self->{bg_opts}{tint} = $self->find_resource ("tintColor", "tint");
1552 $self->{bg_opts}->{blur} = $self->find_resource ("blurRadius", "blr"); 1563 $self->{bg_opts}{blur} = $self->find_resource ("blurRadius", "blr");
1553 $self->{bg_opts}->{root} = $self->find_resource ("transparent", "tr"); 1564 $self->{bg_opts}{root} = $self->find_resource ("transparent", "tr");
1554 1565
1555 $self->old_bg_opts ($self->find_resource ("backgroundPixmap", "pixmap")); 1566 $self->old_bg_opts ($self->find_resource ("backgroundPixmap", "pixmap"));
1556 $expr = $self->old_bg_expr; 1567 $expr = $self->old_bg_expr;
1557 } 1568 }
1558 1569

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines