public final function reduceToMaxSize( Size $maxSize ) : bool
   {

      $this->triggerFixedErrorByNeed( 'reduceToMaxSize' );

      if ( ( $this->_width  < $maxSize->_width )
        && ( $this->_height < $maxSize->_height ) )
      {
         return false;
      }

      if ( ( $this->_width  === $maxSize->_width )
        && ( $this->_height === $maxSize->_height ) )
      {
         return true;
      }

      $dw = $this->_width / $maxSize->_width;
      $dh = $this->_height / $maxSize->_height;

      if ( $dw < $dh )
      {
         $this->_width = \intval(
            \floor(
               ( $this->_width * $maxSize->_height ) / $this->_height
            )
         );
         $this->_height = $maxSize->_height;
      }
      else if ( $dw > $dh )
      {
         $this->_height = \intval(
            \floor(
               ( $maxSize->_width * $this->_height ) / $this->_width
            )
         );
         $this->_width = $maxSize->_width;
      }
      else # ($dw == $dh)
      {
         $this->_width  = $maxSize->_width;
         $this->_height = $maxSize->_height;
      }

      return true;

   }