docs: private void initTimeBgRect(float topPaddingSize) {
          float mHourLeft;
          float mMinuteLeft;
          float mSecondLeft;
          boolean isInitHasBackgroundTextBaseY = false;
  
          if (isShowDay) {
              // initialize day background and border rectF
              if (isShowTimeBgBorder) {
                  mDayBgBorderRectF = new RectF(mLeftPaddingSize, topPaddingSize, mLeftPaddingSize + mDayTimeBgWidth + (mTimeBgBorderSize * 2), topPaddingSize + mTimeBgSize + (mTimeBgBorderSize * 2));
                  mDayBgRectF = new RectF(mLeftPaddingSize + mTimeBgBorderSize, topPaddingSize + mTimeBgBorderSize, mLeftPaddingSize + mDayTimeBgWidth + mTimeBgBorderSize, topPaddingSize + mTimeBgSize + mTimeBgBorderSize);
              } else {
                  mDayBgRectF = new RectF(mLeftPaddingSize, topPaddingSize, mLeftPaddingSize + mDayTimeBgWidth, topPaddingSize + mTimeBgSize);
              }
              // hour left point
              mHourLeft = mLeftPaddingSize + mDayTimeBgWidth + mSuffixDayTextWidth + mSuffixDayLeftMargin + mSuffixDayRightMargin + (mTimeBgBorderSize * 2);
  
              if (!isShowHour && !isShowMinute && !isShowSecond) {
                  isInitHasBackgroundTextBaseY = true;
                  initHasBackgroundTextBaseY(mDayBgRectF);
              }
          } else {
              // hour left point
              mHourLeft = mLeftPaddingSize;
          }
  
          if (isShowHour) {
              // initialize hour background border rectF
              if (isShowTimeBgBorder) {
                  mHourBgBorderRectF = new RectF(mHourLeft, topPaddingSize, mHourLeft + mTimeBgSize + (mTimeBgBorderSize * 2), topPaddingSize + mTimeBgSize + (mTimeBgBorderSize * 2));
                  mHourBgRectF = new RectF(mHourLeft + mTimeBgBorderSize, topPaddingSize + mTimeBgBorderSize, mHourLeft + mTimeBgSize + mTimeBgBorderSize, topPaddingSize + mTimeBgSize + mTimeBgBorderSize);
              } else {
                  mHourBgRectF = new RectF(mHourLeft, topPaddingSize, mHourLeft + mTimeBgSize, topPaddingSize + mTimeBgSize);
              }
              // minute left point
              mMinuteLeft = mHourLeft + mTimeBgSize + mSuffixHourTextWidth + mSuffixHourLeftMargin + mSuffixHourRightMargin + (mTimeBgBorderSize * 2);
  
              if (!isInitHasBackgroundTextBaseY) {
                  isInitHasBackgroundTextBaseY = true;
                  initHasBackgroundTextBaseY(mHourBgRectF);
              }
          } else {
              // minute left point
              mMinuteLeft = mHourLeft;
          }
  
          if (isShowMinute) {
              // initialize minute background border rectF
              if (isShowTimeBgBorder) {
                  mMinuteBgBorderRectF = new RectF(mMinuteLeft, topPaddingSize, mMinuteLeft + mTimeBgSize + (mTimeBgBorderSize * 2), topPaddingSize + mTimeBgSize + (mTimeBgBorderSize * 2));
                  mMinuteBgRectF = new RectF(mMinuteLeft + mTimeBgBorderSize, topPaddingSize + mTimeBgBorderSize, mMinuteLeft + mTimeBgSize + mTimeBgBorderSize, topPaddingSize + mTimeBgSize + mTimeBgBorderSize);
              } else {
                  mMinuteBgRectF = new RectF(mMinuteLeft, topPaddingSize, mMinuteLeft + mTimeBgSize, topPaddingSize + mTimeBgSize);
              }
              // second left point
              mSecondLeft = mMinuteLeft + mTimeBgSize + mSuffixMinuteTextWidth + mSuffixMinuteLeftMargin + mSuffixMinuteRightMargin + (mTimeBgBorderSize * 2);
  
              if (!isInitHasBackgroundTextBaseY) {
                  isInitHasBackgroundTextBaseY = true;
                  initHasBackgroundTextBaseY(mMinuteBgRectF);
              }
          } else {
              // second left point
              mSecondLeft = mMinuteLeft;
          }
  
          if (isShowSecond) {
              // initialize second background border rectF
              if (isShowTimeBgBorder) {
                  mSecondBgBorderRectF = new RectF(mSecondLeft, topPaddingSize, mSecondLeft + mTimeBgSize + (mTimeBgBorderSize * 2), topPaddingSize + mTimeBgSize + (mTimeBgBorderSize * 2));
                  mSecondBgRectF = new RectF(mSecondLeft + mTimeBgBorderSize, topPaddingSize + mTimeBgBorderSize, mSecondLeft + mTimeBgSize + mTimeBgBorderSize, topPaddingSize + mTimeBgSize + mTimeBgBorderSize);
              } else {
                  mSecondBgRectF = new RectF(mSecondLeft, topPaddingSize, mSecondLeft + mTimeBgSize, topPaddingSize + mTimeBgSize);
              }
  
              if (isShowMillisecond) {
                  // millisecond left point
                  float mMillisecondLeft = mSecondLeft + mTimeBgSize + mSuffixSecondTextWidth + mSuffixSecondLeftMargin + mSuffixSecondRightMargin + (mTimeBgBorderSize * 2);
  
                  // initialize millisecond background border rectF
                  if (isShowTimeBgBorder) {
                      mMillisecondBgBorderRectF = new RectF(mMillisecondLeft, topPaddingSize, mMillisecondLeft + mTimeBgSize + (mTimeBgBorderSize * 2), topPaddingSize + mTimeBgSize + (mTimeBgBorderSize * 2));
                      mMillisecondBgRectF = new RectF(mMillisecondLeft + mTimeBgBorderSize, topPaddingSize + mTimeBgBorderSize, mMillisecondLeft + mTimeBgSize + mTimeBgBorderSize, topPaddingSize + mTimeBgSize + mTimeBgBorderSize);
                  } else {
                      mMillisecondBgRectF = new RectF(mMillisecondLeft, topPaddingSize, mMillisecondLeft + mTimeBgSize, topPaddingSize + mTimeBgSize);
                  }
              }
  
              if (!isInitHasBackgroundTextBaseY) {
                  initHasBackgroundTextBaseY(mSecondBgRectF);
              }
          }
      }