already_AddRefed<nsIDOMSVGRect>
SVGTextContentElement::GetExtentOfChar(uint32_t charnum, ErrorResult& rv)
{
  nsCOMPtr<nsIDOMSVGRect> rect;
  if (FrameIsSVGText()) {
    nsSVGTextFrame2* textFrame = GetSVGTextFrame();

    if (!textFrame) {
      rv.Throw(NS_ERROR_FAILURE);
      return nullptr;
    }

    rv = textFrame->GetExtentOfChar(this, charnum, getter_AddRefs(rect));
  } else {
    nsSVGTextContainerFrame* metrics = GetTextContainerFrame();

    if (!metrics) {
      rv.Throw(NS_ERROR_FAILURE);
      return nullptr;
    }

    rv = metrics->GetExtentOfChar(charnum, getter_AddRefs(rect));
  }
  return rect.forget();
}
float
SVGTextContentElement::GetRotationOfChar(uint32_t charnum, ErrorResult& rv)
{
  float rotation;
  if (FrameIsSVGText()) {
    nsSVGTextFrame2* textFrame = GetSVGTextFrame();

    if (!textFrame) {
      rv.Throw(NS_ERROR_FAILURE);
      return 0.0f;
    }

    rv = textFrame->GetRotationOfChar(this, charnum, &rotation);
  } else {
    nsSVGTextContainerFrame* metrics = GetTextContainerFrame();

    if (!metrics) {
      rv.Throw(NS_ERROR_FAILURE);
      return 0.0f;
    }

    rv = metrics->GetRotationOfChar(charnum, &rotation);
  }
  return rotation;
}
float
SVGTextContentElement::GetSubStringLength(uint32_t charnum, uint32_t nchars, ErrorResult& rv)
{
  if (FrameIsSVGText()) {
    nsSVGTextFrame2* textFrame = GetSVGTextFrame();
    if (!textFrame)
      return 0.0f;

    uint32_t charcount = textFrame->GetNumberOfChars(this);
    if (charcount <= charnum || nchars > charcount - charnum) {
      rv.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR);
      return 0.0f;
    }

    if (nchars == 0)
      return 0.0f;

    return textFrame->GetSubStringLength(this, charnum, nchars);
  } else {
    nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
    if (!metrics)
      return 0.0f;

    uint32_t charcount = metrics->GetNumberOfChars();
    if (charcount <= charnum || nchars > charcount - charnum) {
      rv.Throw(NS_ERROR_DOM_INDEX_SIZE_ERR);
      return 0.0f;
    }

    if (nchars == 0)
      return 0.0f;

    return metrics->GetSubStringLength(charnum, nchars);
  }
}
/* nsIDOMSVGPoint getStartPositionOfChar (in unsigned long charnum); */
NS_IMETHODIMP nsSVGTextContentElement::GetStartPositionOfChar(PRUint32 charnum, nsIDOMSVGPoint **_retval)
{
  *_retval = nsnull;
  nsSVGTextContainerFrame* metrics = GetTextContainerFrame();

  if (!metrics) return NS_ERROR_FAILURE;

  return metrics->GetStartPositionOfChar(charnum, _retval);
}
/* float getRotationOfChar (in unsigned long charnum); */
NS_IMETHODIMP nsSVGTextContentElement::GetRotationOfChar(PRUint32 charnum, float *_retval)
{
  *_retval = 0.0;

  nsSVGTextContainerFrame* metrics = GetTextContainerFrame();

  if (!metrics) return NS_ERROR_FAILURE;

  return metrics->GetRotationOfChar(charnum, _retval);
}
/* float getComputedTextLength (); */
NS_IMETHODIMP nsSVGTextContentElement::GetComputedTextLength(float *_retval)
{
  *_retval = 0.0;

  nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
  if (metrics)
    *_retval = metrics->GetComputedTextLength();

  return NS_OK;
}
/* long getNumberOfChars (); */
NS_IMETHODIMP nsSVGTextContentElement::GetNumberOfChars(PRInt32 *_retval)
{
  *_retval = 0;

  nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
  if (metrics)
    *_retval = metrics->GetNumberOfChars();

  return NS_OK;
}
float
SVGTextContentElement::GetComputedTextLength()
{
  if (FrameIsSVGText()) {
    nsSVGTextFrame2* textFrame = GetSVGTextFrame();
    return textFrame ? textFrame->GetComputedTextLength(this) : 0.0f;
  } else {
    nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
    return metrics ? metrics->GetComputedTextLength() : 0.0f;
  }
}
int32_t
SVGTextContentElement::GetNumberOfChars()
{
  if (FrameIsSVGText()) {
    nsSVGTextFrame2* textFrame = GetSVGTextFrame();
    return textFrame ? textFrame->GetNumberOfChars(this) : 0;
  } else {
    nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
    return metrics ? metrics->GetNumberOfChars() : 0;
  }
}
int32_t
SVGTextContentElement::GetCharNumAtPosition(nsISVGPoint& aPoint)
{
  if (FrameIsSVGText()) {
    nsSVGTextFrame2* textFrame = GetSVGTextFrame();
    return textFrame ? textFrame->GetCharNumAtPosition(this, &aPoint) : -1;
  } else {
    nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
    return metrics ? metrics->GetCharNumAtPosition(&aPoint) : -1;
  }
}
Example #11
0
already_AddRefed<nsISVGPoint>
SVGTextContentElement::GetEndPositionOfChar(uint32_t charnum, ErrorResult& rv)
{
  nsSVGTextContainerFrame* metrics = GetTextContainerFrame();

  if (!metrics) {
    rv.Throw(NS_ERROR_FAILURE);
    return nullptr;
  }

  nsCOMPtr<nsISVGPoint> point;
  rv = metrics->GetEndPositionOfChar(charnum, getter_AddRefs(point));
  return point.forget();
}
Example #12
0
float
SVGTextContentElement::GetRotationOfChar(uint32_t charnum, ErrorResult& rv)
{
  nsSVGTextContainerFrame* metrics = GetTextContainerFrame();

  if (!metrics) {
    rv.Throw(NS_ERROR_FAILURE);
    return 0.0f;
  }

  float _retval;
  rv = metrics->GetRotationOfChar(charnum, &_retval);
  return _retval;
}
/* long getCharNumAtPosition (in nsIDOMSVGPoint point); */
NS_IMETHODIMP nsSVGTextContentElement::GetCharNumAtPosition(nsIDOMSVGPoint *point, PRInt32 *_retval)
{
  // null check when implementing - this method can be used by scripts!
  if (!point)
    return NS_ERROR_DOM_SVG_WRONG_TYPE_ERR;

  *_retval = -1;

  nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
  if (metrics)
    *_retval = metrics->GetCharNumAtPosition(point);

  return NS_OK;
}
/* float getSubStringLength (in unsigned long charnum, in unsigned long nchars); */
NS_IMETHODIMP nsSVGTextContentElement::GetSubStringLength(PRUint32 charnum, PRUint32 nchars, float *_retval)
{
  *_retval = 0.0f;
  nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
  if (!metrics)
    return NS_OK;

  PRUint32 charcount = metrics->GetNumberOfChars();
  if (charcount <= charnum || nchars > charcount - charnum)
    return NS_ERROR_DOM_INDEX_SIZE_ERR;

  if (nchars == 0)
    return NS_OK;

  *_retval = metrics->GetSubStringLength(charnum, nchars);
  return NS_OK;
}
Example #15
0
int32_t
SVGTextContentElement::GetCharNumAtPosition(nsISVGPoint& aPoint)
{
  nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
  return metrics ? metrics->GetCharNumAtPosition(&aPoint) : -1;
}
Example #16
0
int32_t
SVGTextContentElement::GetNumberOfChars()
{
  nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
  return metrics ? metrics->GetNumberOfChars() : 0;
}
Example #17
0
float
SVGTextContentElement::GetComputedTextLength()
{
  nsSVGTextContainerFrame* metrics = GetTextContainerFrame();
  return metrics ? metrics->GetComputedTextLength() : 0.0f;
}