/** @brief polaroid color setting function */
  public void setElementPolaroidFrameColor(PDEColor color) {
    float red, green, blue, alpha, red2, green2, blue2, alpha2;

    // validation
    if (color == null) return;

    red = color.getRed();
    green = color.getGreen();
    blue = color.getBlue();
    alpha = color.getAlpha();
    red2 = mElementPolaroidFrameColor.getRed();
    green2 = mElementPolaroidFrameColor.getGreen();
    blue2 = mElementPolaroidFrameColor.getBlue();
    alpha2 = mElementPolaroidFrameColor.getAlpha();

    // changed?
    if (red == red2 && green == green2 && blue == blue2 && alpha == alpha2) return;

    // remember new value
    mElementPolaroidFrameColor = color;
    // mElementPolaroidDrawable.setElementBackgroundColor(mElementPolaroidFrameColor);

    // update
    invalidateSelf();
  }
  /** @brief update helper function for the polaroid bg layer */
  private void updatePolaroidDrawable(Rect bounds) {
    PDEColor highColor;
    PDEColor lowColor;
    float red, green, blue;
    Rect frameRect = new Rect(0, 0, bounds.width(), bounds.height());

    mElementCornerRadius = bounds.width() * 0.07f;
    // update Frame
    mElementPolaroidDrawable.setBounds(frameRect);
    mElementPolaroidDrawable.setElementCornerRadius(mElementCornerRadius);
    mElementPolaroidDrawable.setElementBorderColor(mElementPolaroidFrameColor);
    // todo: this border stuff does not work properly!!! So we take a workaround.
    // mElementPolaroidDrawable.setElementBorderWidth(polaroidRelativeValue(2.5f));
    int border = Math.round(polaroidRelativeValue(2.5f));
    mElementGradientDrawable.setBounds(
        frameRect.left + border,
        frameRect.top + border,
        frameRect.right - border,
        frameRect.bottom - border);

    red = mElementPolaroidFrameColor.getRed();
    blue = mElementPolaroidFrameColor.getBlue();
    green = mElementPolaroidFrameColor.getGreen();

    highColor = new PDEColor(red, green, blue, 0.0f);
    lowColor = new PDEColor(red - 0.33f, green - 0.33f, blue - 0.33f, 0.75f);
    mElementGradientDrawable.setElementBackgroundGradientColors(highColor, highColor, lowColor);
    mElementGradientDrawable.setElementGradientDistributionPositions(0.0f, 0.85f, 1.0f);

    // set other layer data
    mElementPolaroidDrawable.setElementBackgroundColor(mElementPolaroidFrameColor);
    mElementGradientDrawable.setElementCornerRadius(mElementCornerRadius);
    mElementGradientDrawable.setElementBorderColor(PDEColor.valueOf("DTTransparentBlack"));
  }