vlinenumberarea.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "vlinenumberarea.h"
  2. #include <QPaintEvent>
  3. #include <QTextDocument>
  4. VLineNumberArea::VLineNumberArea(VTextEditWithLineNumber *p_editor,
  5. const QTextDocument *p_document,
  6. int p_digitWidth,
  7. int p_digitHeight,
  8. QWidget *p_parent)
  9. : QWidget(p_parent),
  10. m_editor(p_editor),
  11. m_document(p_document),
  12. m_width(0),
  13. m_blockCount(-1),
  14. m_digitWidth(p_digitWidth),
  15. m_digitHeight(p_digitHeight),
  16. m_foregroundColor("black"),
  17. m_backgroundColor("grey")
  18. {
  19. }
  20. int VLineNumberArea::calculateWidth() const
  21. {
  22. int bc = m_document->blockCount();
  23. if (m_blockCount == bc) {
  24. return m_width;
  25. }
  26. const_cast<VLineNumberArea *>(this)->m_blockCount = bc;
  27. int digits = 1;
  28. int max = qMax(1, m_blockCount);
  29. while (max >= 10) {
  30. max /= 10;
  31. ++digits;
  32. }
  33. int width = m_digitWidth * (digits + 1);
  34. const_cast<VLineNumberArea *>(this)->m_width = width;
  35. return m_width;
  36. }