docs: protected void calculateBounds(float _Width, float _Margin) {
  
          int last = 0;
  
          for (StackedBarModel model : mData) {
              float lastY = 0;
              float cumulatedValues = 0;
              // used if seperators are enabled, to prevent information loss
              int usableGraphHeight = mGraphHeight - (int) (mSeparatorWidth * (model.getBars().size() - 1));
  
              for (BarModel barModel : model.getBars()) {
                  cumulatedValues += barModel.getValue();
              }
  
              last += _Margin / 2;
  
              for (BarModel barModel : model.getBars()) {
                  // calculate topX for the StackedBarModel part
                  float newY = ((barModel.getValue() * usableGraphHeight) / cumulatedValues) + lastY;
                  float height = newY - lastY;
                  Rect textBounds = new Rect();
                  String value = String.valueOf(barModel.getValue());
  
                  mTextPaint.getTextBounds(value, 0, value.length(), textBounds);
  
                  if (textBounds.height() * 1.5f < height && textBounds.width() * 1.1f < _Width) {
                      barModel.setShowValue(true);
                      barModel.setValueBounds(textBounds);
                  }
  
                  barModel.setBarBounds(new RectF(last, lastY, last + _Width, newY));
                  lastY = newY;
              }
              model.setLegendBounds(new RectF(last, 0, last + _Width, mLegendHeight));
  
              last += _Width + (_Margin / 2);
          }
  
          Utils.calculateLegendInformation(mData, 0, mContentRect.width(), mLegendPaint);
      }