Example #1
0
 def expose_progressbar(self, widget, event):
     '''Expose progressbar.'''
     # Init.
     cr = widget.window.cairo_create()
     rect = widget.allocation
     
     # Draw frame.
     cr.set_source_rgba(*alpha_color_hex_to_cairo(ui_theme.get_alpha_color("progressbar_frame").get_color_info()))
     cr.set_operator(cairo.OPERATOR_OVER)
     draw_round_rectangle(cr, rect.x, rect.y, rect.width, rect.height, 1)
     cr.stroke()
     
     # Draw background.
     draw_vlinear(cr, rect.x, rect.y, rect.width, rect.height, 
                  ui_theme.get_shadow_color("progressbar_background").get_color_info(), 
                  1)
 
     # Draw foreground.
     draw_vlinear(cr, rect.x, rect.y, rect.width * self.progress / 100.0, rect.height, 
                  ui_theme.get_shadow_color("progressbar_foreground").get_color_info(), 
                  1)
     
     # Draw font.
     draw_text(cr, str(self.progress) + "%", 
               rect.x, rect.y, rect.width, rect.height, 
               rect.height - 5, "#000000",
               alignment=pango.ALIGN_CENTER)
     
     # Draw light.
     light_radius = rect.height * 4
     light_offset_x = min(self.light_ticker % 150, 100) / 100.0 * (rect.width + light_radius * 2)
     with cairo_state(cr):
         cr.rectangle(rect.x, rect.y, rect.width * self.progress / 100.0, rect.height)
         cr.clip()
         draw_radial_round(cr, rect.x + light_offset_x - light_radius, rect.y - light_radius / 2, light_radius, 
                           ui_theme.get_shadow_color("progressbar_light").get_color_info())
            
     # Propagate expose.
     propagate_expose(widget, event)
     
     return True        
Example #2
0
    def expose_tab_title_box(self, widget, event):
        '''
        Internal callback for `expose-event` signal.
        '''
        cr = widget.window.cairo_create()
        rect = widget.allocation
        if self.dockfill:
            self.update_tab_title_widths(rect.width)

        # Draw background.
        self.draw_title_background(cr, widget)

        if len(self.tab_items) > 0:
            # Draw title unselect tab.
            tab_title_width = sum(self.tab_title_widths)

            with cairo_state(cr):
                with cairo_disable_antialias(cr):
                    cr.set_source_rgba(*alpha_color_hex_to_cairo((
                        self.tab_unselect_bg_color.get_color(), 0.7)))
                    cr.rectangle(1, 1, tab_title_width, self.tab_height)
                    cr.fill()

                    cr.set_line_width(1)
                    cr.set_source_rgba(*alpha_color_hex_to_cairo((
                        self.tab_unselect_frame_color.get_color(), 1.0)))
                    cr.rectangle(1, 1, tab_title_width, self.tab_height)
                    cr.stroke()

                    for (index,
                         width) in enumerate(self.tab_title_widths[:-1]):
                        cr.set_source_rgba(*alpha_color_hex_to_cairo((
                            self.tab_unselect_frame_color.get_color(), 1.0)))
                        cr.rectangle(
                            1 + sum(self.tab_title_widths[0:index]) + width, 1,
                            1, self.tab_height)
                        cr.fill()

                    cr.set_source_rgb(*color_hex_to_cairo(
                        self.tab_select_frame_color.get_color()))
                    cr.rectangle(0, rect.height - 1,
                                 sum(self.tab_title_widths[0:self.tab_index]),
                                 1)
                    cr.fill()

                    cr.set_source_rgb(*color_hex_to_cairo(
                        self.tab_select_frame_color.get_color()))
                    cr.rectangle(
                        1 + sum(self.tab_title_widths[0:self.tab_index]),
                        rect.height - 1, rect.width -
                        sum(self.tab_title_widths[0:self.tab_index]), 1)
                    cr.fill()

            for (index, item) in enumerate(self.tab_items):
                # Draw title background.
                title = item[0]

                # Draw title tab.
                with cairo_disable_antialias(cr):
                    if index == self.tab_index:
                        # Draw title select tab.
                        cr.set_source_rgba(*alpha_color_hex_to_cairo((
                            self.tab_select_bg_color.get_color(), 0.93)))
                        if index == 0:
                            cr.rectangle(sum(self.tab_title_widths[0:index]),
                                         1, self.tab_title_widths[index] + 1,
                                         self.tab_height)
                        else:
                            cr.rectangle(
                                1 + sum(self.tab_title_widths[0:index]), 1,
                                self.tab_title_widths[index], self.tab_height)
                        cr.fill()

                        if index == 0:
                            cr.rectangle(0, 0, rect.width, self.tab_height)
                            cr.clip()

                        cr.set_line_width(1)
                        cr.set_source_rgb(*color_hex_to_cairo(
                            self.tab_select_frame_color.get_color()))
                        if index == 0:
                            cr.rectangle(sum(self.tab_title_widths[0:index]),
                                         1, self.tab_title_widths[index] + 2,
                                         self.tab_height)
                        else:
                            cr.rectangle(
                                1 + sum(self.tab_title_widths[0:index]), 1,
                                self.tab_title_widths[index] + 1,
                                self.tab_height)
                        cr.stroke()

                draw_text(
                    cr,
                    title,
                    sum(self.tab_title_widths[0:index]) + self.tab_padding_x,
                    self.tab_padding_y,
                    self.tab_title_widths[index] - self.tab_padding_x * 2,
                    self.tab_height - self.tab_padding_y * 2,
                )

                # Draw close button.
                if self.can_close_tab:
                    button_x = sum(
                        self.tab_title_widths[0:index + 1]
                    ) - self.close_button_padding_x - self.close_button_size
                    button_y = self.close_button_padding_y

                    if self.hover_close_button_index == index:
                        cr.set_source_rgb(*color_hex_to_cairo(
                            self.close_button_select_background_color))
                        draw_round_rectangle(
                            cr, button_x - self.close_button_frame_size,
                            button_y - self.close_button_frame_size,
                            self.close_button_size +
                            self.close_button_frame_size * 2,
                            self.close_button_size +
                            self.close_button_frame_size * 2, 2)
                        cr.fill()

                    cr.set_line_width(1.5)
                    if self.hover_close_button_index == index:
                        cr.set_source_rgb(*color_hex_to_cairo(
                            self.close_button_select_foreground_color))
                    else:
                        cr.set_source_rgb(
                            *color_hex_to_cairo(self.close_button_color))
                    cr.move_to(button_x, button_y)
                    cr.line_to(button_x + self.close_button_size,
                               button_y + self.close_button_size)
                    cr.stroke()

                    cr.move_to(button_x + self.close_button_size, button_y)
                    cr.line_to(button_x, button_y + self.close_button_size)
                    cr.stroke()
        else:
            cr.set_source_rgba(*alpha_color_hex_to_cairo((
                self.tab_select_bg_color.get_color(), 0.93)))
            cr.rectangle(0, 0, rect.width, rect.height)
            cr.fill()
Example #3
0
    def expose_tab_title_box(self, widget, event):
        '''
        Internal callback for `expose-event` signal.
        '''
        cr = widget.window.cairo_create()
        rect = widget.allocation
        if self.dockfill:
            self.update_tab_title_widths(rect.width)

        # Draw background.
        self.draw_title_background(cr, widget)
            
        if len(self.tab_items) > 0:    
            # Draw title unselect tab.
            tab_title_width = sum(self.tab_title_widths)
            
            with cairo_state(cr):
                with cairo_disable_antialias(cr):
                    cr.set_source_rgba(*alpha_color_hex_to_cairo((self.tab_unselect_bg_color.get_color(), 0.7)))
                    cr.rectangle(1, 1, tab_title_width, self.tab_height)
                    cr.fill()
                        
                    cr.set_line_width(1)
                    cr.set_source_rgba(*alpha_color_hex_to_cairo((self.tab_unselect_frame_color.get_color(), 1.0)))
                    cr.rectangle(1, 1, tab_title_width, self.tab_height)
                    cr.stroke()
                    
                    for (index, width) in enumerate(self.tab_title_widths[:-1]):
                        cr.set_source_rgba(*alpha_color_hex_to_cairo((self.tab_unselect_frame_color.get_color(), 1.0)))
                        cr.rectangle(1 + sum(self.tab_title_widths[0:index]) + width,
                                     1,
                                     1,
                                     self.tab_height)
                        cr.fill()
                        
                    cr.set_source_rgb(*color_hex_to_cairo(self.tab_select_frame_color.get_color()))    
                    cr.rectangle(0,
                                 rect.height - 1,
                                 sum(self.tab_title_widths[0:self.tab_index]),
                                 1)
                    cr.fill()
                
                    cr.set_source_rgb(*color_hex_to_cairo(self.tab_select_frame_color.get_color()))    
                    cr.rectangle(1 + sum(self.tab_title_widths[0:self.tab_index]),
                                 rect.height - 1,
                                 rect.width - sum(self.tab_title_widths[0:self.tab_index]),
                                 1)
                    cr.fill()
                            
            for (index, item) in enumerate(self.tab_items):
                # Draw title background.
                title = item[0]
                
                # Draw title tab.
                with cairo_disable_antialias(cr):
                    if index == self.tab_index:
                        # Draw title select tab.
                        cr.set_source_rgba(*alpha_color_hex_to_cairo((self.tab_select_bg_color.get_color(), 0.93)))    
                        if index == 0:
                            cr.rectangle(sum(self.tab_title_widths[0:index]),
                                         1,
                                         self.tab_title_widths[index] + 1,
                                         self.tab_height)
                        else:
                            cr.rectangle(1 + sum(self.tab_title_widths[0:index]),
                                         1,
                                         self.tab_title_widths[index],
                                         self.tab_height)
                        cr.fill()
                        
                        if index == 0:
                            cr.rectangle(0,
                                         0,
                                         rect.width,
                                         self.tab_height)
                            cr.clip()
                            
                        cr.set_line_width(1)
                        cr.set_source_rgb(*color_hex_to_cairo(self.tab_select_frame_color.get_color()))    
                        if index == 0:
                            cr.rectangle(sum(self.tab_title_widths[0:index]),
                                         1,
                                         self.tab_title_widths[index] + 2,
                                         self.tab_height)
                        else:
                            cr.rectangle(1 + sum(self.tab_title_widths[0:index]),
                                         1,
                                         self.tab_title_widths[index] + 1,
                                         self.tab_height)
                        cr.stroke()
                        
                draw_text(cr, title, 
                          sum(self.tab_title_widths[0:index]) + self.tab_padding_x,
                          self.tab_padding_y,
                          self.tab_title_widths[index] - self.tab_padding_x * 2,
                          self.tab_height - self.tab_padding_y * 2,
                          )
                
                # Draw close button.
                if self.can_close_tab:
                    button_x = sum(self.tab_title_widths[0:index + 1]) - self.close_button_padding_x - self.close_button_size
                    button_y = self.close_button_padding_y
                    
                    if self.hover_close_button_index == index:
                        cr.set_source_rgb(*color_hex_to_cairo(self.close_button_select_background_color))
                        draw_round_rectangle(
                            cr,
                            button_x - self.close_button_frame_size,
                            button_y - self.close_button_frame_size,
                            self.close_button_size + self.close_button_frame_size * 2,
                            self.close_button_size + self.close_button_frame_size * 2,
                            2
                            )
                        cr.fill()
                    
                    cr.set_line_width(1.5)
                    if self.hover_close_button_index == index:
                        cr.set_source_rgb(*color_hex_to_cairo(self.close_button_select_foreground_color))
                    else:
                        cr.set_source_rgb(*color_hex_to_cairo(self.close_button_color))
                    cr.move_to(button_x, button_y)
                    cr.line_to(button_x + self.close_button_size, button_y + self.close_button_size)
                    cr.stroke()

                    cr.move_to(button_x + self.close_button_size, button_y)
                    cr.line_to(button_x, button_y + self.close_button_size)
                    cr.stroke()
        else:
            cr.set_source_rgba(*alpha_color_hex_to_cairo((self.tab_select_bg_color.get_color(), 0.93)))
            cr.rectangle(0, 0, rect.width, rect.height)
            cr.fill()
Example #4
0
    def expose_nav_item(self, widget, event):
        '''
        Internal callback `expose-event` signal.
        '''
        # Init.
        cr = widget.window.cairo_create()
        rect = widget.allocation
        select_index = self.get_index()
        hover_pixbuf = self.item_hover_pixbuf.get_pixbuf()
        press_pixbuf = self.item_press_pixbuf.get_pixbuf()

        # Draw background.
        if widget.state == gtk.STATE_NORMAL:
            if select_index == self.index:
                select_pixbuf = press_pixbuf
            else:
                select_pixbuf = None
        elif widget.state == gtk.STATE_PRELIGHT:
            if select_index == self.index:
                select_pixbuf = press_pixbuf
            else:
                select_pixbuf = hover_pixbuf
        elif widget.state == gtk.STATE_ACTIVE:
            select_pixbuf = press_pixbuf

        if select_pixbuf:
            select_pixbuf = select_pixbuf.scale_simple(
                    rect.width, rect.height, gtk.gdk.INTERP_BILINEAR)
            draw_pixbuf(cr, select_pixbuf, rect.x, rect.y)

        # Draw navigate item.
        if self.vertical:
            draw_pixbuf(
                cr, self.nav_item_pixbuf,
                rect.x + (rect.width - self.nav_item_pixbuf.get_width()) / 2,
                rect.y)

            draw_text(cr,
                      self.content,
                      rect.x,
                      rect.y + self.nav_item_pixbuf.get_height() - 3,
                      rect.width,
                      rect.height - self.nav_item_pixbuf.get_height(),
                      text_size=self.font_size,
                      text_color="#FFFFFF",
                      alignment=pango.ALIGN_CENTER,
                      gaussian_radious=2, gaussian_color="#000000",
                      border_radious=1, border_color="#000000",
                      )
        else:
            padding_x = (rect.width - self.nav_item_pixbuf.get_width() - self.text_width) / 2

            draw_pixbuf(
                cr,
                self.nav_item_pixbuf,
                rect.x + padding_x,
                rect.y + (rect.height - self.nav_item_pixbuf.get_height()) / 2)

            draw_text(cr,
                      self.content,
                      rect.x + self.nav_item_pixbuf.get_width() + padding_x,
                      rect.y,
                      rect.width,
                      rect.height,
                      text_size=self.font_size,
                      text_color="#FFFFFF",
                      gaussian_radious=2, gaussian_color="#000000",
                      border_radious=1, border_color="#000000",
                      )

        # Draw notify number.
        text_size = 8
        (number_width, number_height) = get_content_size(str(self.notify_num), text_size)
        padding_x = 2
        padding_y = 0
        radious = 3
        draw_offset_x = -5
        draw_offset_y = 8
        draw_x = rect.x + self.nav_item_pixbuf.get_width() + padding_x + draw_offset_x
        draw_y = rect.y + draw_offset_y
        if self.notify_num > 0:
            cr.set_source_rgb(*color_hex_to_cairo("#BF0000"))
            draw_round_rectangle(
                cr,
                draw_x,
                draw_y,
                number_width + padding_x * 2,
                number_height + padding_y * 2,
                radious)
            cr.fill()

            draw_text(
                cr,
                str(self.notify_num),
                draw_x + padding_x,
                draw_y + padding_y,
                number_width,
                number_height,
                text_color="#FFFFFF",
                text_size=text_size,
                )

        # Propagate expose to children.
        propagate_expose(widget, event)

        return True
Example #5
0
    def expose_nav_item(self, widget, event):
        '''
        Internal callback `expose-event` signal.
        '''
        # Init.
        cr = widget.window.cairo_create()
        rect = widget.allocation
        select_index = self.get_index()
        hover_pixbuf = self.item_hover_pixbuf.get_pixbuf()
        press_pixbuf = self.item_press_pixbuf.get_pixbuf()

        # Draw background.
        if widget.state == gtk.STATE_NORMAL:
            if select_index == self.index:
                select_pixbuf = press_pixbuf
            else:
                select_pixbuf = None
        elif widget.state == gtk.STATE_PRELIGHT:
            if select_index == self.index:
                select_pixbuf = press_pixbuf
            else:
                select_pixbuf = hover_pixbuf
        elif widget.state == gtk.STATE_ACTIVE:
            select_pixbuf = press_pixbuf

        if select_pixbuf:
            select_pixbuf = select_pixbuf.scale_simple(rect.width, rect.height,
                                                       gtk.gdk.INTERP_BILINEAR)
            draw_pixbuf(cr, select_pixbuf, rect.x, rect.y)

        # Draw navigate item.
        if self.vertical:
            draw_pixbuf(
                cr, self.nav_item_pixbuf,
                rect.x + (rect.width - self.nav_item_pixbuf.get_width()) / 2,
                rect.y)

            draw_text(
                cr,
                self.content,
                rect.x,
                rect.y + self.nav_item_pixbuf.get_height() - 3,
                rect.width,
                rect.height - self.nav_item_pixbuf.get_height(),
                text_size=self.font_size,
                text_color="#FFFFFF",
                alignment=pango.ALIGN_CENTER,
                gaussian_radious=2,
                gaussian_color="#000000",
                border_radious=1,
                border_color="#000000",
            )
        else:
            padding_x = (rect.width - self.nav_item_pixbuf.get_width() -
                         self.text_width) / 2

            draw_pixbuf(
                cr, self.nav_item_pixbuf, rect.x + padding_x,
                rect.y + (rect.height - self.nav_item_pixbuf.get_height()) / 2)

            draw_text(
                cr,
                self.content,
                rect.x + self.nav_item_pixbuf.get_width() + padding_x,
                rect.y,
                rect.width,
                rect.height,
                text_size=self.font_size,
                text_color="#FFFFFF",
                gaussian_radious=2,
                gaussian_color="#000000",
                border_radious=1,
                border_color="#000000",
            )

        # Draw notify number.
        text_size = 8
        (number_width,
         number_height) = get_content_size(str(self.notify_num), text_size)
        padding_x = 2
        padding_y = 0
        radious = 3
        draw_offset_x = -5
        draw_offset_y = 8
        draw_x = rect.x + self.nav_item_pixbuf.get_width(
        ) + padding_x + draw_offset_x
        draw_y = rect.y + draw_offset_y
        if self.notify_num > 0:
            cr.set_source_rgb(*color_hex_to_cairo("#BF0000"))
            draw_round_rectangle(cr, draw_x, draw_y,
                                 number_width + padding_x * 2,
                                 number_height + padding_y * 2, radious)
            cr.fill()

            draw_text(
                cr,
                str(self.notify_num),
                draw_x + padding_x,
                draw_y + padding_y,
                number_width,
                number_height,
                text_color="#FFFFFF",
                text_size=text_size,
            )

        # Propagate expose to children.
        propagate_expose(widget, event)

        return True