% unipersian-beamer-luatex.def
%
% This file contains code copied from the beamer-rl class
% by Salim Bou.
%
% Copyright (c) 2019--2025 Salim Bou.
%
% The original work is distributed under the
% LaTeX Project Public License, version 1.3c or later.
%
% The original work is author-maintained.
%
% Original source:
%   https://ctan.org/pkg/beamer-rl
%
% Repository:
%   https://github.com/seloumi/beamer-rl

\ProvidesFile{unipersian-beamer-luatex.def}
[2026/09/08 v0.1.0 LuaTeX beamer support for unipersian]


\makeatletter

\newdimen\bmb@dimc

\renewcommand\beamerboxesrounded[2][]{%
    \global\let\beamer@firstlineitemizeunskip=\relax%
    \vbox\bgroup%
    \setkeys{beamerboxes}{upper=block title,lower=block body,width=\textwidth,shadow=false}%
    \setkeys{beamerboxes}{#1}%
    {%
        \usebeamercolor{\bmb@lower}%
        \globalcolorstrue%
        \colorlet{lower.bg}{bg}%
    }%
    {%
        \usebeamercolor{\bmb@upper}%
        \globalcolorstrue%
        \colorlet{upper.bg}{bg}%
    }%
    %
    % Typeset head
    %
    \vskip4bp
    \setbox\bmb@box=\hbox{%
        \begin{minipage}[b]{\bmb@width}%
            \usebeamercolor[fg]{\bmb@upper}%
            #2%
        \end{minipage}}%
    \ifdim\wd\bmb@box=0pt%
        \ifnum\textdirection=\z@
        \else%
            \bmb@dimc=\bmb@width%
        \fi% <--
        \setbox\bmb@box=\hbox{}%
        \ht\bmb@box=1.5pt%
        \bmb@prevheight=-4.5pt%
    \else%
        \wd\bmb@box=\bmb@width%
        \bmb@temp=\dp\bmb@box%
        \ifdim\bmb@temp<1.5pt%
            \bmb@temp=1.5pt%
        \fi%
        \setbox\bmb@box=\hbox{\raise\bmb@temp\hbox{\box\bmb@box}}%
        \dp\bmb@box=0pt%
        \bmb@prevheight=\ht\bmb@box%
    \fi%
    \bmb@temp=\bmb@width%
    \bmb@dima=\bmb@temp\advance\bmb@dima by2.2bp%
    \bmb@dimb=\bmb@temp\advance\bmb@dimb by4bp%
    \hbox dir TLT {%
            \begin{pgfpicture}{0bp}{+-\ht\bmb@box}{\bmb@dimc}{+-\ht\bmb@box}
                \ifdim\wd\bmb@box=0pt%
                    \color{lower.bg}%
                \else%
                    \color{upper.bg}%
                \fi%
                \pgfpathqmoveto{-4bp}{-1bp}
                \pgfpathqcurveto{-4bp}{1.2bp}{-2.2bp}{3bp}{0bp}{3bp}
                \pgfpathlineto{\pgfpoint{\bmb@temp}{3bp}}
                \pgfpathcurveto%
                {\pgfpoint{\bmb@dima}{3bp}}%
                {\pgfpoint{\bmb@dimb}{1.2bp}}%
                {\pgfpoint{\bmb@dimb}{-1bp}}%
                \bmb@dima=-\ht\bmb@box%
                \advance\bmb@dima by-2pt%
                \pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
                \pgfpathlineto{\pgfpoint{-4bp}{\bmb@dima}}
                \pgfusepath{fill}
            \end{pgfpicture}%
            \copy\bmb@box%
        }%
    \nointerlineskip%
    \vskip-1pt%
    \ifdim\wd\bmb@box=0pt%
    \else%
        \hbox{%
            \begin{pgfpicture}{0pt}{0pt}{\bmb@width}{6pt}
                \bmb@dima=\bmb@width%
                \advance\bmb@dima by8bp%
                \pgfpathrectangle{\pgfpoint{-4bp}{-1bp}}{\pgfpoint{\bmb@dima}{8bp}}
                \pgfusepath{clip}
                {\pgftransformshift{\pgfpoint{-4bp}{0bp}}\pgftext[left,base]{\pgfuseshading{bmb@transition}}}%
            \end{pgfpicture}%
        }%
        \nointerlineskip%
        \vskip-0.5pt%
    \fi%
    \setbox\bmb@colorbox=\hbox{{\pgfpicturetrue\pgfsetcolor{lower.bg}}}%
    \setbox\bmb@box=\hbox\bgroup\begin{minipage}[b]{\bmb@width}%
    \vskip2pt%
    \usebeamercolor[fg]{\bmb@lower}%
    \colorlet{beamerstructure}{upper.bg}%
    \colorlet{structure}{upper.bg}%
    %\color{.}%
}

\newdimen\bmb@dimd

\def\endbeamerboxesrounded{%
    \end{minipage}\egroup%
    \bmb@temp=\dp\bmb@box%
    \advance\bmb@temp by.5pt%
    \setbox\bmb@box=\hbox{\raise\bmb@temp\hbox{\box\bmb@box}}%
    \dp\bmb@box=0pt%
    \bmb@boxwidth=\bmb@width%
    \bmb@boxheight=\ht\bmb@box%
    \advance\bmb@boxheight by4bp%
    \advance\bmb@boxheight by\bmb@prevheight%
    \ifbmb@shadow%
        \xdef\beamer@storecolorhook{\beamer@colorhook}
        \xdef\beamer@colorhook{}
        \pgfdeclareradialshading{bmb@shadowball}{\pgfpointorigin}
        {%
            color(0bp)=(pgftransparent!50);
            color(4bp)=(pgftransparent!100)
        }%
        \pgfdeclareradialshading{bmb@shadowballlarge}{\pgfpointorigin}
        {%
            color(0bp)=(pgftransparent!0);
            color(8bp)=(pgftransparent!100)
        }%
        \pgfdeclarehorizontalshading{bmb@shadowhorz\the\bmb@boxheight}{\bmb@boxheight-5.5bp}
        {%
            color(0bp)=(pgftransparent!0);
            color(8bp)=(pgftransparent!100)
        }%
        \pgfdeclareverticalshading{bmb@shadowvert\the\bmb@boxwidth}{\bmb@boxwidth-4bp}
        {%
            color(0bp)=(pgftransparent!100);
            color(8bp)=(pgftransparent!0)
        }%
        \begingroup%
        \selectcolormodel{gray}
        \pgfdeclarefading{bmb@shadowmask\the\bmb@boxwidth\the\bmb@boxheight}
        {%
            \textdir TLT
            \begin{pgfpicture}
                \pgftext[at=\pgfpoint{4bp}{4bp}]{\pgfuseshading{bmb@shadowball}}% bottom left shadow
                \ifdim\bmb@boxheight>9.5bp%
                    \pgftext[at=\pgfpoint{\bmb@boxwidth}{8bp}]{\pgfuseshading{bmb@shadowballlarge}}% bottom right shadow
                    \pgftext[at=\pgfpoint{\bmb@boxwidth+4bp}{\bmb@boxheight+2bp}]{\pgfuseshading{bmb@shadowball}}% top right shadow
                    \pgftext[base, at=\pgfpoint{\bmb@boxwidth+4bp}{7.5bp}]{\pgfuseshading{bmb@shadowhorz\the\bmb@boxheight}}% right edge shadow
                \else%
                    \pgftext[at=\pgfpoint{\bmb@boxwidth}{4bp}]{\pgfuseshading{bmb@shadowball}}% right shadow
                \fi%
                \pgftext[left, at=\pgfpoint{4bp}{4bp}]{\pgfuseshading{bmb@shadowvert\the\bmb@boxwidth}}% bottom edge
                %
                % clipping is needed because shadow is typeset on top of box
                \begin{pgfscope}
                    \pgfsetcolor{beamer@safeblack}
                    \pgfpathrectangle{\pgfpoint{4bp}{8.1bp}}{\pgfpoint{\bmb@boxwidth}{\bmb@boxheight-2bp}}
                    \pgfusepath{fill}
                \end{pgfscope}
            \end{pgfpicture}%
            \hskip4bp%      
        }%
        \endgroup%
    \fi%
    \bmb@temp=\bmb@width%
    \bmb@dima=\bmb@temp\advance\bmb@dima by2.2bp%
    \bmb@dimb=\bmb@temp\advance\bmb@dimb by4bp%
    \ifdim\wd\bmb@box=0pt%
        \ifnum\textdirection=\z@
        \else
            \bmb@dimd=\bmb@width%
        \fi%
    \fi%  
    \hbox{\textdir TLT%
        \begin{pgfpicture}{0bp}{0bp}{\bmb@dimd}{0bp}
            \ifbmb@shadow%
                \begin{pgfscope}
                    \pgfpathrectangle{\pgfpoint{0bp}{-7bp}}
                    {\pgfpoint{\bmb@boxwidth+8bp}{\bmb@boxheight+6bp}}
                    \pgfsetfading{bmb@shadowmask\the\bmb@boxwidth\the\bmb@boxheight}{%
                        \pgftransformshift{\pgfpoint{0.5\bmb@boxwidth+6bp}{0.5\bmb@boxheight-4bp}}}
                    \pgfusepath{fill}
                \end{pgfscope}
            \fi%
            \unhbox\bmb@colorbox%
            \pgfpathqmoveto{-4bp}{1bp}
            \pgfpathqcurveto{-4bp}{-1.2bp}{-2.2bp}{-3bp}{0bp}{-3bp}
            \pgfpathlineto{\pgfpoint{\the\bmb@temp}{-3bp}}
            \pgfpathcurveto%
            {\pgfpoint{\the\bmb@dima}{-3bp}}%
            {\pgfpoint{\the\bmb@dimb}{-1.2bp}}%
            {\pgfpoint{\the\bmb@dimb}{1bp}}%
            {
                \bmb@dima=\ht\bmb@box%
                \pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
                \pgfpathlineto{\pgfpoint{-4bp}{\bmb@dima}}
                \pgfusepath{fill}
            }
        \end{pgfpicture}%
        \box\bmb@box%
    }%
    \ifbmb@shadow%
        \vskip4bp minus 2bp%
    \else%
        \vskip2bp%
    \fi%
    \egroup% of \vbox\bgroup
    \ifbmb@shadow%
        \xdef\beamer@colorhook{\beamer@storecolorhook}
    \fi
}


\makeatother
\endinput
