function pDraw::drawRoundedFilledRectangle

5.x pDraw.class.php pDraw::drawRoundedFilledRectangle($X1, $Y1, $X2, $Y2, $Radius, $Format = "")
5 calls to pDraw::drawRoundedFilledRectangle()
pDraw::drawBarChart in inc/pchart/pchart/class/pDraw.class.php
pDraw::drawLegend in inc/pchart/pchart/class/pDraw.class.php
pDraw::drawRoundedFilledRectangle_deprecated in inc/pchart/pchart/class/pDraw.class.php
pDraw::drawStackedBarChart in inc/pchart/pchart/class/pDraw.class.php
pDraw::drawText in inc/pchart/pchart/class/pDraw.class.php

File

inc/pchart/pchart/class/pDraw.class.php, line 271

Class

pDraw

Code

function drawRoundedFilledRectangle($X1, $Y1, $X2, $Y2, $Radius, $Format = "") 
 {
  $R = isset($Format ["R"]) ? $Format ["R"] : 0;
  $G = isset($Format ["G"]) ? $Format ["G"] : 0;
  $B = isset($Format ["B"]) ? $Format ["B"] : 0;
  $BorderR = isset($Format ["BorderR"]) ? $Format ["BorderR"] : -1;
  $BorderG = isset($Format ["BorderG"]) ? $Format ["BorderG"] : -1;
  $BorderB = isset($Format ["BorderB"]) ? $Format ["BorderB"] : -1;
  $Alpha = isset($Format ["Alpha"]) ? $Format ["Alpha"] : 100;
  $Surrounding = isset($Format ["Surrounding"]) ? $Format ["Surrounding"] : NULL;

  /* Temporary fix for AA issue */
  $Y1 = floor($Y1);
  $Y2 = floor($Y2);
  $X1 = floor($X1);
  $X2 = floor($X2);

  if ($Surrounding != NULL) {
    $BorderR = $R + $Surrounding;
    $BorderG = $G + $Surrounding;
    $BorderB = $B + $Surrounding;
  }
  if ($BorderR == -1) {
    $BorderR = $R;
    $BorderG = $G;
    $BorderB = $B;
  }

  list($X1, $Y1, $X2, $Y2) = $this->fixBoxCoordinates($X1, $Y1, $X2, $Y2);

  if ($X2 - $X1 < $Radius * 2) {
    $Radius = floor((($X2 -$X1)) / 4);
  }
  if ($Y2 - $Y1 < $Radius * 2) {
    $Radius = floor((($Y2 -$Y1)) / 4);
  }

  $RestoreShadow = $this->Shadow;
  if ($this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0) 
   {
    $this->Shadow = FALSE;
    $this->drawRoundedFilledRectangle($X1 + $this->ShadowX, $Y1 + $this->ShadowY, $X2 + $this->ShadowX, $Y2 + $this->ShadowY, $Radius, array("R" => $this->ShadowR, "G" => $this->ShadowG, "B" => $this->ShadowB, "Alpha" => $this->Shadowa));
  }

  $Color = array("R" => $R, "G" => $G, "B" => $B, "Alpha" => $Alpha, "NoBorder" => TRUE);

  if ($Radius <= 0) {
    $this->drawFilledRectangle($X1, $Y1, $X2, $Y2, $Color);
    return (0);
  }

  $YTop = $Y1 + $Radius;
  $YBottom = $Y2 -$Radius;

  $Step = 360 / (2 * PI * $Radius);
  $Positions = "";
  $Radius--;
  $MinY = "";
  $MaxY = "";
  for ($i = 0; $i <= 90; $i = $i + $Step) 
   {
    $Xp1 = cos(($i + 180) * PI / 180) * $Radius + $X1 + $Radius;
    $Xp2 = cos(((90 -$i) + 270) * PI / 180) * $Radius + $X2 - $Radius;
    $Yp = floor(sin(($i + 180) * PI / 180) * $Radius + $YTop);
    if ($MinY == "" || $Yp > $MinY) {
      $MinY = $Yp;
    }

    if ($Xp1 <= floor($X1)) {
      $Xp1++;
    }
    if ($Xp2 >= floor($X2)) {
      $Xp2--;
    }
    $Xp1++;

    if (!isset($Positions [$Yp])) 
     {
      $Positions [$Yp]["X1"] = $Xp1;
      $Positions [$Yp]["X2"] = $Xp2;
    }
    else 
     {
      $Positions [$Yp]["X1"] = ($Positions [$Yp]["X1"] + $Xp1) / 2;
      $Positions [$Yp]["X2"] = ($Positions [$Yp]["X2"] + $Xp2) / 2;
    }

    $Xp1 = cos(($i + 90) * PI / 180) * $Radius + $X1 + $Radius;
    $Xp2 = cos((90 -$i) * PI / 180) * $Radius + $X2 - $Radius;
    $Yp = floor(sin(($i + 90) * PI / 180) * $Radius + $YBottom);
    if ($MaxY == "" || $Yp < $MaxY) {
      $MaxY = $Yp;
    }

    if ($Xp1 <= floor($X1)) {
      $Xp1++;
    }
    if ($Xp2 >= floor($X2)) {
      $Xp2--;
    }
    $Xp1++;

    if (!isset($Positions [$Yp])) 
     {
      $Positions [$Yp]["X1"] = $Xp1;
      $Positions [$Yp]["X2"] = $Xp2;
    }
    else 
     {
      $Positions [$Yp]["X1"] = ($Positions [$Yp]["X1"] + $Xp1) / 2;
      $Positions [$Yp]["X2"] = ($Positions [$Yp]["X2"] + $Xp2) / 2;
    }
  }

  $ManualColor = $this->allocateColor($this->Picture, $R, $G, $B, $Alpha);
  foreach ($Positions as $Yp => $Bounds) 
   {
    $X1 = $Bounds ["X1"];
    $X1Dec = $this->getFirstDecimal($X1);
    if ($X1Dec != 0) {
      $X1 = floor($X1) + 1;
    }
    $X2 = $Bounds ["X2"];
    $X2Dec = $this->getFirstDecimal($X2);
    if ($X2Dec != 0) {
      $X2 = floor($X2) -1;
    }
    imageline($this->Picture, $X1, $Yp, $X2, $Yp, $ManualColor);
  }
  $this->drawFilledRectangle($X1, $MinY + 1, floor($X2), $MaxY -1, $Color);

  $Radius++;
  $this->drawRoundedRectangle($X1, $Y1, $X2 + 1, $Y2 -1, $Radius, array("R" => $BorderR, "G" => $BorderG, "B" => $BorderB, "Alpha" => $Alpha));

  $this->Shadow = $RestoreShadow;
}