예제 #1
0
파일: widget.py 프로젝트: dlobue/urwid
 def finalize_render(self, size, focus=False):
     canv = fn(self, size, focus=focus)
     if canv.widget_info:
         canv = CompositeCanvas(canv)
     validate_size(self, size, canv)
     canv.finalize(self, size, focus)
     return canv
예제 #2
0
파일: graphics.py 프로젝트: dlobue/urwid
 def render(self, size, focus=False):
     fixed_size(size) # complain if parameter is wrong
     a = None
     ai = ak = 0
     o = []
     rows = self.font.height
     attrib = self.attrib+[(None,len(self.text))]
     for ch in self.text:
         if not ak:
             a, ak = attrib[ai]
             ai += 1
         ak -= 1
         width = self.font.char_width(ch)
         if not width: 
             # ignore invalid characters
             continue
         c = self.font.render(ch)
         if a is not None:
             c = CompositeCanvas(c)
             c.fill_attr(a)
         o.append((c, None, False, width))
     if o:
         canv = CanvasJoin(o)
     else:
         canv = TextCanvas([""]*rows, maxcol=0, 
             check_width=False)
         canv = CompositeCanvas(canv)
     canv.set_depends([])
     return canv
예제 #3
0
파일: decoration.py 프로젝트: dlobue/urwid
 def render(self, size, focus=False):
     """
     Render wrapped widget and apply attribute. Return canvas.
     """
     attr_map = self._attr_map
     if focus and self._focus_map is not None:
         attr_map = self._focus_map
     canv = self._original_widget.render(size, focus=focus)
     canv = CompositeCanvas(canv)
     canv.fill_attr_apply(attr_map)
     return canv
예제 #4
0
파일: widget.py 프로젝트: dlobue/urwid
    def cached_render(self, size, focus=False):
        focus = focus and not ignore_focus
        canv = CanvasCache.fetch(self, cls, size, focus)
        if canv:
            return canv

        canv = fn(self, size, focus=focus)
        validate_size(self, size, canv)
        if canv.widget_info:
            canv = CompositeCanvas(canv)
        canv.finalize(self, size, focus)
        CanvasCache.store(cls, canv)
        return canv
예제 #5
0
파일: decoration.py 프로젝트: dlobue/urwid
 def render(self, size, focus=False):
     """Render self.original_widget with space above and/or below."""
     (maxcol, maxrow) = size
     top, bottom = self.filler_values(size, focus)
     
     if self.height_type is None:
         canv = self._original_widget.render((maxcol,), focus)
     else:
         canv = self._original_widget.render((maxcol,maxrow-top-bottom),focus)
     canv = CompositeCanvas(canv)
     
     if maxrow and canv.rows() > maxrow and canv.cursor is not None:
         cx, cy = canv.cursor
         if cy >= maxrow:
             canv.trim(cy-maxrow+1,maxrow-top-bottom)
     if canv.rows() > maxrow:
         canv.trim(0, maxrow)
         return canv
     canv.pad_trim_top_bottom(top, bottom)
     return canv
예제 #6
0
파일: widget.py 프로젝트: dlobue/urwid
    def render(self, size, focus=False):
        """ 
        Render edit widget and return canvas.  Include cursor when in
        focus.

        >>> c = Edit("? ","yes").render((10,), focus=True)
        >>> c.text
        ['? yes     ']
        >>> c.cursor
        (5, 0)
        """
        (maxcol,) = size
        self._shift_view_to_cursor = bool(focus)
        
        canv = Text.render(self,(maxcol,))
        if focus:
            canv = CompositeCanvas(canv)
            canv.cursor = self.get_cursor_coords((maxcol,))

        # .. will need to FIXME if I want highlight to work again
        #if self.highlight:
        #    hstart, hstop = self.highlight_coords()
        #    d.coords['highlight'] = [ hstart, hstop ]
        return canv
예제 #7
0
파일: container.py 프로젝트: dlobue/urwid
 def render(self, size, focus=False):
     """Render top_w overlayed on bottom_w."""
     left, right, top, bottom = self.calculate_padding_filler(size,
         focus)
     bottom_c = self.bottom_w.render(size)
     top_c = self.top_w.render(
         self.top_w_size(size, left, right, top, bottom), focus)
     if left<0 or right<0:
         top_c = CompositeCanvas(top_c)
         top_c.pad_trim_left_right(min(0,left), min(0,right))
     if top<0 or bottom<0:
         top_c = CompositeCanvas(top_c)
         top_c.pad_trim_top_bottom(min(0,top), min(0,bottom))
     
     return CanvasOverlay(top_c, bottom_c, max(0,left), top)
예제 #8
0
파일: graphics.py 프로젝트: dlobue/urwid
    def render(self, size, focus=False):
        """
        Render GraphVScale.
        """
        (maxcol, maxrow) = size
        pl = scale_bar_values( self.pos, self.top, maxrow )

        combinelist = []
        rows = 0
        for p, t in zip(pl, self.txt):
            p -= 1
            if p >= maxrow: break
            if p < rows: continue
            c = t.render((maxcol,))
            if p > rows:
                run = p-rows
                c = CompositeCanvas(c)
                c.pad_trim_top_bottom(run, 0)
            rows += c.rows()
            combinelist.append((c, None, False))
        c = CanvasCombine(combinelist)
        if maxrow - rows:
            c.pad_trim_top_bottom(0, maxrow - rows)
        return c