You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

WrapLabelView.java 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * @author Stanislav Lapitsky
  3. * @version 1.0
  4. */
  5. package com.dmdirc.addons.ui_swing.components.text;
  6. import javax.swing.text.BadLocationException;
  7. import javax.swing.text.Element;
  8. import javax.swing.text.GlyphView;
  9. import javax.swing.text.LabelView;
  10. import javax.swing.text.View;
  11. /**
  12. * @author Stanislav Lapitsky
  13. * @version 1.0
  14. */
  15. public class WrapLabelView extends LabelView {
  16. /**
  17. * Creates a new wrap label view.
  18. *
  19. * @param elem Element to view
  20. */
  21. public WrapLabelView(final Element elem) {
  22. super(elem);
  23. }
  24. /** {@inheritDoc} */
  25. @Override
  26. public int getBreakWeight(final int axis, final float pos, final float len) {
  27. if (axis == View.X_AXIS) {
  28. checkPainter();
  29. final int p0 = getStartOffset();
  30. final int p1 = getGlyphPainter().getBoundedPosition(this, p0, pos,
  31. len);
  32. if (p1 == p0) {
  33. // can't even fit a single character
  34. return View.BadBreakWeight;
  35. }
  36. try {
  37. //if the view contains line break char return forced break
  38. if (getDocument().getText(p0, p1 - p0).indexOf("\r") >= 0) {
  39. return View.ForcedBreakWeight;
  40. }
  41. } catch (BadLocationException ex) {
  42. //should never happen
  43. }
  44. }
  45. return super.getBreakWeight(axis, pos, len);
  46. }
  47. /** {@inheritDoc} */
  48. @Override
  49. public View breakView(final int axis, final int p0, final float pos,
  50. final float len) {
  51. if (axis == View.X_AXIS) {
  52. checkPainter();
  53. final int p1 = getGlyphPainter().getBoundedPosition(this, p0, pos,
  54. len);
  55. try {
  56. //if the view contains line break char break the view
  57. final int index = getDocument().getText(p0, p1 - p0)
  58. .indexOf("\r");
  59. if (index >= 0) {
  60. return (GlyphView) createFragment(p0, p0 + index + 1);
  61. }
  62. } catch (BadLocationException ex) {
  63. //should never happen
  64. }
  65. }
  66. return super.breakView(axis, p0, pos, len);
  67. }
  68. }