Changeset 136:1e9599e48d7b


Ignore:
Timestamp:
Apr 4, 2011, 10:50:42 PM (9 years ago)
Author:
Stefano Rivera <stefano@…>
Branch:
default
rebase_source:
a08c72bc91d62c99504bc45d021d8316b16aa97c
Message:

Simplistic text wrapping

Location:
skaapsteker
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • skaapsteker/cutscene.py

    r134 r136  
    1515        self.text = text
    1616        self.text_widget = Text(text, pygame.Rect(20, 20, 800-40, 600-40),
    17                                 size=24)
     17                                size=24, wrap=True)
    1818        self.background = data.load_image('backgrounds/' + background)
    1919        self.start_time = pygame.time.get_ticks()
  • skaapsteker/widgets/text.py

    r134 r136  
    3838
    3939class Text(Widget):
    40     def __init__(self, text, pos, font='sans', size=16, color='black'):
     40    def __init__(self, text, pos, font='sans', size=16, color='black',
     41                 wrap=False):
    4142        self.text = text
    4243        if isinstance(pos, pygame.Rect):
     
    4647        self.font = load_font(font, size)
    4748        self.color = pygame.Color(color)
    48         # TODO: Wrapping
     49        if wrap:
     50            if not isinstance(pos, pygame.Rect):
     51                raise Exception("Cannot wrap without dimensions")
     52            self._wrap()
     53
    4954        self.surfaces = [self.font.render(line, True, self.color)
    5055                         for line in self.text.split('\n')]
    5156        self.rect.width = max(line.get_width() for line in self.surfaces)
    5257        self.rect.height = self.font.get_linesize() * len(self.surfaces)
     58
     59
     60    def _wrap(self):
     61        unwrapped = self.text.split('\n\n')
     62        text = []
     63        for paragraph in unwrapped:
     64            paragraph = paragraph.replace('\n', ' ')
     65            words = paragraph.split(' ')
     66            nwords = len(words)
     67            from_ = 0
     68            to = 0
     69            while to < nwords:
     70                to += 1
     71                line = ' '.join(words[from_:to])
     72                if self.font.size(line)[0] <= self.rect.width:
     73                    continue
     74                if to - from_ > 1:
     75                    to -= 1
     76                text.append(' '.join(words[from_:to]))
     77                from_ = to
     78            text.append(' '.join(words[from_:to]))
     79            text.append('')
     80        if text:
     81            text.pop(-1)
     82        self.text = '\n'.join(text)
    5383
    5484    def draw(self, surface):
Note: See TracChangeset for help on using the changeset viewer.