summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/tikzfill/tikzlibraryfill.image.code.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/tikzfill/tikzlibraryfill.image.code.tex')
-rw-r--r--graphics/pgf/contrib/tikzfill/tikzlibraryfill.image.code.tex400
1 files changed, 400 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/tikzfill/tikzlibraryfill.image.code.tex b/graphics/pgf/contrib/tikzfill/tikzlibraryfill.image.code.tex
new file mode 100644
index 0000000000..ed20d0e780
--- /dev/null
+++ b/graphics/pgf/contrib/tikzfill/tikzlibraryfill.image.code.tex
@@ -0,0 +1,400 @@
+%% The LaTeX package tikzfill - version 1.0.0 (2022/07/20)
+%% tikzlibraryfill.image.code.tex: filling with images
+%%
+%% -------------------------------------------------------------------------------------------
+%% Copyright (c) 2022-2022 by Prof. Dr. Dr. Thomas F. Sturm <thomas dot sturm at unibw dot de>
+%% -------------------------------------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This work consists of all files listed in README.md
+%%
+\ProvidesFile{tikzlibraryfill.image.code.tex}[2022/07/20 v1.0.0 Image filling library]
+
+\ExplSyntaxOn
+
+\box_new:N \l__tikzfill_img_box
+
+\tl_new:N \l__tikzfill_img_xa_tl
+\tl_new:N \l__tikzfill_img_xb_tl
+\tl_new:N \l__tikzfill_img_ya_tl
+\tl_new:N \l__tikzfill_img_yb_tl
+\tl_new:N \l__tikzfill_img_xc_tl
+\tl_new:N \l__tikzfill_img_yc_tl
+\tl_new:N \l__tikzfill_img_width_tl
+\tl_new:N \l__tikzfill_img_height_tl
+
+\tl_new:N \l__tikzfill_img_opacity_tl
+\tl_new:N \l__tikzfill_img_scale_tl
+\tl_new:N \l__tikzfill_img_graphics_options_tl
+
+\fp_new:N \l__tikzfill_img_scale_x_fp
+\fp_new:N \l__tikzfill_img_scale_y_fp
+
+
+\cs_new_nopar:Npn \__tikzfill_img_process_ppbb:
+ {
+ \pgf@process{\pgfpointanchor{path~picture~bounding~box}{south~west}}
+ \tl_set:Nx \l__tikzfill_img_xa_tl { \dim_eval:n { \pgf@x } }
+ \tl_set:Nx \l__tikzfill_img_ya_tl { \dim_eval:n { \pgf@y } }
+ \pgf@process{\pgfpointanchor{path~picture~bounding~box}{north~east}}
+ \tl_set:Nx \l__tikzfill_img_xb_tl { \dim_eval:n { \pgf@x } }
+ \tl_set:Nx \l__tikzfill_img_yb_tl { \dim_eval:n { \pgf@y } }
+ \tl_set:Nx \l__tikzfill_img_width_tl { \dim_eval:n { \pgf@x - \l__tikzfill_img_xa_tl } }
+ \tl_set:Nx \l__tikzfill_img_height_tl { \dim_eval:n { \pgf@y - \l__tikzfill_img_ya_tl } }
+ \pgfsetfillopacity{\l__tikzfill_img_opacity_tl}
+ \pgfsetstrokeopacity{\l__tikzfill_img_opacity_tl}
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_path_picture:n #1
+ {
+ \pgfkeysalso
+ {
+ path~picture =
+ {
+ \__tikzfill_img_process_ppbb:
+ #1
+ }
+ }
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_draw_textbox:n #1
+ {
+ \pgftext
+ [
+ x = \dim_eval:n { \l__tikzfill_img_xa_tl + \l__tikzfill_img_width_tl/2 },
+ y = \dim_eval:n { \l__tikzfill_img_ya_tl + \l__tikzfill_img_height_tl/2 }
+ ]{ #1 }
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_include_graphics:n #1
+ {
+ \tl_set_eq:NN \l_tmpa_tl \l__tikzfill_img_graphics_options_tl
+ \tl_if_empty:NTF \l_tmpa_tl
+ {
+ \tl_set:Nn \l_tmpa_tl { \includegraphics }
+ }
+ {
+ \tl_put_left:Nn \l_tmpa_tl { \includegraphics[ }
+ \tl_put_right:Nn \l_tmpa_tl { ] }
+ }
+ \l_tmpa_tl { #1 }
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_set_box_to_image:n #1
+ {
+ \hbox_set:Nn \l__tikzfill_img_box
+ {
+ \pgfinterruptpicture
+ \group_begin:
+ \__tikzfill_img_include_graphics:n { #1 }
+ \group_end:
+ \endpgfinterruptpicture
+ }
+ }
+
+
+
+\cs_new_nopar:Npn \__tikzfill_img_set_box_to_picture:n #1
+ {
+ \hbox_set:Nn \l__tikzfill_img_box
+ {
+ \pgfinterruptpicture
+ \group_begin:
+ \pgfsetbaseline{0pt}
+ \tikzpicture#1\endtikzpicture
+ \group_end:
+ \endpgfinterruptpicture
+ }
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_draw_box:
+ {
+ \__tikzfill_img_draw_textbox:n
+ {
+ \box_use_drop:N \l__tikzfill_img_box
+ }
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_stretch_draw_box:
+ {
+ \box_resize_to_wd_and_ht_plus_dp:Nnn \l__tikzfill_img_box
+ { \fp_to_dim:n { \l__tikzfill_img_scale_tl*\l__tikzfill_img_width_tl }}
+ { \fp_to_dim:n { \l__tikzfill_img_scale_tl*\l__tikzfill_img_height_tl }}
+ \__tikzfill_img_draw_box:
+ }
+
+
+\cs_new_nopar:Npn \xxxx__tikzfill_img_compute_scales:
+ {
+ \fp_set:Nn \l_tmpa_fl { \box_wd:N \l__tikzfill_img_box }
+ \fp_compare:nNnTF \l_tmpa_fl < {1pt}
+ {
+ \fp_set_eq:NN \l__tikzfill_img_scale_x_fp \c_one_fp
+ }
+ {
+ \fp_set:Nn \l__tikzfill_img_scale_x_fp
+ {
+ \l__tikzfill_img_scale_tl*\l__tikzfill_img_width_tl / \l_tmpa_fl
+ }
+ }
+ \fp_set:Nn \l_tmpb_fl { \box_ht:N \l__tikzfill_img_box + \box_dp:N \l__tikzfill_img_box }
+ \fp_compare:nNnTF \l_tmpb_fl < {1pt}
+ {
+ \fp_set_eq:NN \l__tikzfill_img_scale_y_fp \c_one_fp
+ }
+ {
+ \fp_set:Nn \l__tikzfill_img_scale_y_fp
+ {
+ \l__tikzfill_img_scale_tl*\l__tikzfill_img_height_tl / \l_tmpb_fl
+ }
+ }
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_compute_scales:
+ {
+ \dim_set:Nn \l_tmpa_dim { \box_wd:N \l__tikzfill_img_box }
+ \dim_compare:nNnTF \l_tmpa_dim < {1pt}
+ {
+ \fp_set_eq:NN \l__tikzfill_img_scale_x_fp \c_one_fp
+ }
+ {
+ \fp_set:Nn \l__tikzfill_img_scale_x_fp
+ {
+ \l__tikzfill_img_scale_tl * \l__tikzfill_img_width_tl / \l_tmpa_dim
+ }
+ }
+ \dim_set:Nn \l_tmpb_dim { \box_ht:N \l__tikzfill_img_box + \box_dp:N \l__tikzfill_img_box }
+ \dim_compare:nNnTF \l_tmpb_dim < {1pt}
+ {
+ \fp_set_eq:NN \l__tikzfill_img_scale_y_fp \c_one_fp
+ }
+ {
+ \fp_set:Nn \l__tikzfill_img_scale_y_fp
+ {
+ \l__tikzfill_img_scale_tl * \l__tikzfill_img_height_tl / \l_tmpb_dim
+ }
+ }
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_scale_draw_box:
+ {
+ \box_scale:Nnn \l__tikzfill_img_box
+ { \fp_to_dim:N \l__tikzfill_img_scale_x_fp }
+ { \fp_to_dim:N \l__tikzfill_img_scale_y_fp }
+ \__tikzfill_img_draw_box:
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_overzoom_draw_box:
+ {
+ \__tikzfill_img_compute_scales:
+ \fp_compare:nNnTF \l__tikzfill_img_scale_x_fp > \l__tikzfill_img_scale_y_fp
+ { \fp_set_eq:NN \l__tikzfill_img_scale_y_fp \l__tikzfill_img_scale_x_fp }
+ { \fp_set_eq:NN \l__tikzfill_img_scale_x_fp \l__tikzfill_img_scale_y_fp }
+ \__tikzfill_img_scale_draw_box:
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_zoom_draw_box:
+ {
+ \__tikzfill_img_compute_scales:
+ \fp_compare:nNnTF \l__tikzfill_img_scale_x_fp > \l__tikzfill_img_scale_y_fp
+ { \fp_set_eq:NN \l__tikzfill_img_scale_x_fp \l__tikzfill_img_scale_y_fp }
+ { \fp_set_eq:NN \l__tikzfill_img_scale_y_fp \l__tikzfill_img_scale_x_fp }
+ \__tikzfill_img_scale_draw_box:
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_shrink_draw_box:
+ {
+ \__tikzfill_img_compute_scales:
+ \fp_compare:nNnTF \l__tikzfill_img_scale_x_fp > \l__tikzfill_img_scale_y_fp
+ { \fp_set_eq:NN \l__tikzfill_img_scale_x_fp \l__tikzfill_img_scale_y_fp }
+ { \fp_set_eq:NN \l__tikzfill_img_scale_y_fp \l__tikzfill_img_scale_x_fp }
+ \fp_compare:nNnT \l__tikzfill_img_scale_x_fp > 1
+ {
+ \fp_set_eq:NN \l__tikzfill_img_scale_x_fp \c_one_fp
+ \fp_set_eq:NN \l__tikzfill_img_scale_y_fp \c_one_fp
+ }
+ \__tikzfill_img_scale_draw_box:
+ }
+
+
+\cs_new_nopar:Npn \__tikzfill_img_tile_draw_box:
+ {
+ \dim_set:Nn \l_tmpa_dim { \box_wd:N \l__tikzfill_img_box }
+ \dim_set:Nn \l_tmpb_dim { \box_ht:N \l__tikzfill_img_box + \box_dp:N \l__tikzfill_img_box }
+ \dim_set:Nn \l_tmpb_dim { -\l_tmpb_dim }
+
+ \dim_step_variable:nnnNn
+ { \l__tikzfill_img_xa_tl }
+ { \l_tmpa_dim }
+ { \l__tikzfill_img_xb_tl }
+ \l__tikzfill_img_xc_tl
+ {
+ \dim_step_variable:nnnNn
+ { \l__tikzfill_img_yb_tl }
+ { \l_tmpb_dim }
+ { \l__tikzfill_img_ya_tl }
+ \l__tikzfill_img_yc_tl
+ {
+ \pgftext
+ [
+ x = \l__tikzfill_img_xc_tl,
+ y = \l__tikzfill_img_yc_tl,
+ left,
+ top
+ ]
+ { \box_use:N\l__tikzfill_img_box }
+ }
+ }
+ }
+
+
+\tikzset
+ {
+ fill~image~opacity/.store~in=\l__tikzfill_img_opacity_tl,
+ fill~image~opacity=1,
+ fill~image~scale/.store~in=\l__tikzfill_img_scale_tl,
+ fill~image~scale=1,
+ fill~image~options/.store~in=\l__tikzfill_img_graphics_options_tl,
+ fill~image~options=,
+ fill~plain~image/.code=
+ {
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_draw_textbox:n
+ {
+ \__tikzfill_img_include_graphics:n { #1 }
+ }
+ }
+ },
+ fill~plain~picture/.code=
+ {
+ \__tikzfill_img_set_box_to_picture:n { #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_draw_box:
+ }
+ },
+ fill~stretch~image/.code=
+ {
+ \__tikzfill_img_set_box_to_image:n { #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_stretch_draw_box:
+ }
+ },
+ fill~stretch~picture/.code=
+ {
+ \__tikzfill_img_set_box_to_picture:n { #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_stretch_draw_box:
+ }
+ },
+ fill~overzoom~image/.code=
+ {
+ \__tikzfill_img_set_box_to_image:n { #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_overzoom_draw_box:
+ }
+ },
+ fill~overzoom~picture/.code=
+ {
+ \__tikzfill_img_set_box_to_picture:n { #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_overzoom_draw_box:
+ }
+ },
+ fill~zoom~image/.code=
+ {
+ \__tikzfill_img_set_box_to_image:n { #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_zoom_draw_box:
+ }
+ },
+ fill~zoom~picture/.code=
+ {
+ \__tikzfill_img_set_box_to_picture:n { #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_zoom_draw_box:
+ }
+ },
+ fill~shrink~image/.code=
+ {
+ \__tikzfill_img_set_box_to_image:n { #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_shrink_draw_box:
+ }
+ },
+ fill~shrink~picture/.code=
+ {
+ \__tikzfill_img_set_box_to_picture:n { #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_shrink_draw_box:
+ }
+ },
+ fill~tile~image/.code=
+ {
+ \__tikzfill_img_set_box_to_image:n { #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_tile_draw_box:
+ }
+ },
+ fill~tile~picture/.code=
+ {
+ \__tikzfill_img_set_box_to_picture:n { #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_tile_draw_box:
+ }
+ },
+ fill~tile~picture*/.code~n~args={2}
+ {
+ \__tikzfill_img_set_box_to_picture:n { #2 }
+ \box_scale:Nnn \l__tikzfill_img_box { #1 }{ #1 }
+ \__tikzfill_img_path_picture:n
+ {
+ \__tikzfill_img_tile_draw_box:
+ }
+ },
+ }
+
+
+\ExplSyntaxOff
+
+\tikzset
+ {
+ fill plain image*/.style n args={2}{fill image options={#1},fill plain image={#2}},%
+ fill stretch image*/.style n args={2}{fill image options={#1},fill stretch image={#2}},%
+ fill overzoom image*/.style n args={2}{fill image options={#1},fill overzoom image={#2}},%
+ fill zoom image*/.style n args={2}{fill image options={#1},fill zoom image={#2}},%
+ fill shrink image*/.style n args={2}{fill image options={#1},fill shrink image={#2}},%
+ fill tile image*/.style n args={2}{fill image options={#1},fill tile image={#2}},%
+ }
+