diff options
Diffstat (limited to 'graphics/pgf/contrib/tikzfill/tikzlibraryfill.image.code.tex')
-rw-r--r-- | graphics/pgf/contrib/tikzfill/tikzlibraryfill.image.code.tex | 400 |
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}},% + } + |