152 lines
7.8 KiB
PostScript
152 lines
7.8 KiB
PostScript
|
|
/background-image-create { % => Data-or-/null
|
||
|
|
dup /null eq { % => /null
|
||
|
|
} { % => Mask Image Init SY SX
|
||
|
|
image-create
|
||
|
|
} ifelse
|
||
|
|
} def
|
||
|
|
|
||
|
|
/background-image-show { % => Position Repeat Box Viewport Image
|
||
|
|
dup /null ne {
|
||
|
|
% Setup clipping region for padding area
|
||
|
|
gsave
|
||
|
|
|
||
|
|
2 index get-left-padding
|
||
|
|
3 index get-bottom-padding
|
||
|
|
4 index get-right-padding
|
||
|
|
5 index get-left-padding sub
|
||
|
|
5 index get-top-padding
|
||
|
|
6 index get-bottom-padding sub
|
||
|
|
rectclip
|
||
|
|
|
||
|
|
% Determine the vertical an horizontal offset for the image
|
||
|
|
2 index /get-width call-method
|
||
|
|
3 index get-padding-left add
|
||
|
|
3 index get-padding-right add % => Position Repeat box viewport Image PaddingWidth
|
||
|
|
|
||
|
|
3 index get-height
|
||
|
|
4 index get-padding-top add
|
||
|
|
4 index get-padding-bottom add % => Position Repeat box viewport Image PaddingWidth PadingHeight
|
||
|
|
|
||
|
|
6 index /x get /percentage get {
|
||
|
|
1 index % => Position Repeat box viewport Image PaddingWidth PadingHeight PaddingWidth
|
||
|
|
3 index /SX get px sub % => Position Repeat box viewport Image PaddingWidth PadingHeight (PaddingWidth-ImageWidth*px)
|
||
|
|
7 index /x get /value get mul 100 div
|
||
|
|
} {
|
||
|
|
6 index /x get /value get
|
||
|
|
} ifelse % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset
|
||
|
|
|
||
|
|
7 index /y get /percentage get {
|
||
|
|
1 index % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset PaddingHeight
|
||
|
|
4 index /SY get px sub
|
||
|
|
8 index /y get /value get mul 100 div
|
||
|
|
} {
|
||
|
|
7 index /y get /value get
|
||
|
|
} ifelse % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
|
||
|
|
% NOTE: px2pt(1) make a scaing factor for PDF output
|
||
|
|
% NOTE: background-image is positioned relative to PADDING corner and drawn in the PADDING area!
|
||
|
|
{ % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
7 index % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset Repeat
|
||
|
|
|
||
|
|
dup /no-repeat eq {
|
||
|
|
pop
|
||
|
|
|
||
|
|
1 px % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset Scale
|
||
|
|
7 index get-top-padding
|
||
|
|
6 index /SY get px sub
|
||
|
|
1 index sub % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset Scale Y
|
||
|
|
8 index get-left-padding
|
||
|
|
4 index add % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset Scale Y X
|
||
|
|
7 index
|
||
|
|
image-show-simple
|
||
|
|
|
||
|
|
exit
|
||
|
|
} if
|
||
|
|
|
||
|
|
dup /repeat-x eq {
|
||
|
|
pop
|
||
|
|
|
||
|
|
1 px % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset Scale
|
||
|
|
1 index
|
||
|
|
3 index % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset
|
||
|
|
9 index get-right-padding % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TX
|
||
|
|
8 index /SX get px % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TX SX
|
||
|
|
11 index get-top-padding
|
||
|
|
10 index /SY get px sub
|
||
|
|
4 index sub % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TX SX Y
|
||
|
|
12 index get-left-padding
|
||
|
|
4 index add % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TX SX Y X
|
||
|
|
11 index % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TX SX Y X Image
|
||
|
|
image-show-repeat-x
|
||
|
|
|
||
|
|
exit
|
||
|
|
} if
|
||
|
|
|
||
|
|
dup /repeat-y eq {
|
||
|
|
pop
|
||
|
|
|
||
|
|
1 px % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset Scale
|
||
|
|
1 index
|
||
|
|
3 index % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset
|
||
|
|
9 index get-bottom-padding % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TX
|
||
|
|
8 index /SY get px % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TX SX
|
||
|
|
11 index get-top-padding
|
||
|
|
10 index /SY get px sub
|
||
|
|
4 index sub % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TX SX Y
|
||
|
|
12 index get-left-padding
|
||
|
|
4 index add % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TX SX Y X
|
||
|
|
11 index % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TX SX Y X Image
|
||
|
|
image-show-repeat-y
|
||
|
|
|
||
|
|
exit
|
||
|
|
} if
|
||
|
|
|
||
|
|
% /repeat (default)
|
||
|
|
pop
|
||
|
|
|
||
|
|
1 px % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale
|
||
|
|
1 index 3 index % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset
|
||
|
|
9 index get-bottom-padding % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TY
|
||
|
|
10 index get-right-padding % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TY TX
|
||
|
|
9 index /SY get px % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TY TX SY
|
||
|
|
10 index /SX get px % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TY TX SY SX
|
||
|
|
13 index get-top-padding
|
||
|
|
12 index /SY get px sub
|
||
|
|
6 index add % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TY TX SY SX Y
|
||
|
|
14 index get-left-padding
|
||
|
|
6 index add % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TY TX SY SX Y X
|
||
|
|
13 index % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
% Scale YOffset XOffset TY TX SY SX Y X
|
||
|
|
image-show-repeat-xy % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
|
||
|
|
exit
|
||
|
|
} loop % => Position Repeat box viewport Image PaddingWidth PadingHeight XOffset YOffset
|
||
|
|
pop pop pop pop
|
||
|
|
|
||
|
|
% return to the previous clipping area
|
||
|
|
grestore
|
||
|
|
|
||
|
|
} if % => Position Repeat Box Viewport Image
|
||
|
|
|
||
|
|
pop pop pop pop pop
|
||
|
|
} def
|