def __init__(self, callback=None): gtk.EventBox.__init__(self) self.set_visible_window(False) self.add_events(gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK | gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.ENTER_NOTIFY_MASK | gtk.gdk.LEAVE_NOTIFY_MASK ) self.connect("expose-event", self.on_expose_event) lang = utils.get_system_lang() if lang == "zh_CN": prefix = "cn" elif lang in ["zh_HK", "zh_TW"]: prefix = "tw" else: prefix = "en" self.failed_dpixbuf = app_theme.get_pixbuf("network/timeout_%s.png" % prefix) self.connect("motion-notify-event", self.on_motion_notify) self.connect("button-press-event", self.on_button_press) self.normal_text_dcolor = app_theme.get_color("labelText") self.hover_text_dcolor = app_theme.get_color("globalItemHighlight") self.prompt_text = "点击此处刷新" self.text_padding_y = 5 self.text_padding_x = 5 self.text_rect = None self.is_hover = False self.press_callback = callback
def __init__(self, prompt_text, click_text, callback=None, auto_size=True): gtk.EventBox.__init__(self) self.set_visible_window(False) self.add_events(gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK | gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.ENTER_NOTIFY_MASK | gtk.gdk.LEAVE_NOTIFY_MASK ) self.normal_text_dcolor = app_theme.get_color("labelText") self.hover_text_dcolor = app_theme.get_color("globalItemHighlight") self.click_text = click_text self.prompt_text = prompt_text self.text_padding_y = 5 self.text_padding_x = 5 self.text_rect = None self.is_hover = False self.press_callback = callback self.adjust_size() self.connect("expose-event", self.on_expose_event) self.connect("motion-notify-event", self.on_motion_notify) self.connect("button-press-event", self.on_button_press)
def render_content(self, cr, rect): if self.is_highlight: if not self.is_double_click: draw_single_mask(cr, rect.x + 1, rect.y, rect.width, rect.height, "globalItemHighlight") text_color = "#FFFFFF" else: text_color = app_theme.get_color("labelText").get_color() elif self.is_hover: text_color = app_theme.get_color("labelText").get_color() draw_single_mask(cr, rect.x + 1, rect.y, rect.width, rect.height, "globalItemHover") else: text_color = app_theme.get_color("labelText").get_color() if not self.is_highlight: self.entry_buffer.move_to_start() self.entry_buffer.set_text_color(text_color) width, height = self.entry_buffer.get_content_size() offset_y = (self.item_height - height) / 2 # offset_x = (self.item_height - width) / 2 rect.y += offset_y rect.x += 10 # rect.x += offset_x if self.entry and self.entry.allocation.width == self.get_column_widths()[0]-4: self.entry.calculate() self.entry_buffer.set_text_color("#000000") self.entry_buffer.render(cr, rect, self.entry.im) else: self.entry_buffer.render(cr, rect)
def __init__(self, drag_data_received_cb, callback): gtk.EventBox.__init__(self) self.set_visible_window(False) self.add_events(gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK | gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.ENTER_NOTIFY_MASK | gtk.gdk.LEAVE_NOTIFY_MASK ) self.connect("expose-event", self.on_expose_event) self.empty_dpixbuf = app_theme.get_pixbuf("empty/local.png") targets = [("text/deepin-songs", gtk.TARGET_SAME_APP, 1), ("text/uri-list", 0, 2), ("text/plain", 0, 3)] self.drag_dest_set(gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_DROP, targets, gtk.gdk.ACTION_COPY) self.connect("drag-data-received", drag_data_received_cb) self.connect("motion-notify-event", self.on_motion_notify) self.connect("button-press-event", self.on_button_press) self.add_normal_dpixbuf = app_theme.get_pixbuf("empty/add_normal.png") self.add_hover_dpixbuf = app_theme.get_pixbuf("empty/add_hover.png") self.normal_text_dcolor = app_theme.get_color("labelText") self.hover_text_dcolor = app_theme.get_color("globalItemHighlight") self.text_padding_y = 5 self.text_padding_x = 5 self.prompt_offset = 15 self.text_rect = None self.is_hover = False self.press_callback = callback self.prompt_text = _("Add Music")
def __init__( self, fg_dpixbuf=app_theme.get_pixbuf("scalebar/fg.png"), bg_dpixbuf=app_theme.get_pixbuf("scalebar/bg.png"), point_normal_dpixbuf=app_theme.get_pixbuf("scalebar/point_normal.png"), point_hover_dpixbuf=app_theme.get_pixbuf("scalebar/point_hover.png"), point_press_dpixbuf=app_theme.get_pixbuf("scalebar/point_press.png"), ): super(HScalebar, self).__init__() self.set_draw_value(False) self.set_range(0, 100) self.fg_dpixbuf = fg_dpixbuf self.bg_dpixbuf = bg_dpixbuf self.point_normal_dpixbuf = point_normal_dpixbuf self.point_hover_dpixbuf = point_hover_dpixbuf self.point_press_dpixbuf = point_press_dpixbuf self.bottom_side = 0 self.fg_cache_pixbuf = CachePixbuf() self.bg_cache_pixbuf = CachePixbuf() self.side_cache_pixbuf = CachePixbuf() # Colors self.fg_left_dcolor = app_theme.get_color("progressBarLeft") self.fg_right_dcolor = app_theme.get_color("progressBarRight") self.set_size_request(-1, self.bg_dpixbuf.get_pixbuf().get_height()) self.connect("expose-event", self.expose_h_scalebar) self.connect("button-press-event", self.press_volume_progressbar)
def __init__(self, fg_dpixbuf=app_theme.get_pixbuf("scalebar/fg.png"), bg_dpixbuf=app_theme.get_pixbuf("scalebar/bg.png"), point_normal_dpixbuf = app_theme.get_pixbuf("scalebar/point_normal.png"), point_hover_dpixbuf = app_theme.get_pixbuf("scalebar/point_hover.png"), point_press_dpixbuf = app_theme.get_pixbuf("scalebar/point_press.png"), ): super(HScalebar, self).__init__() self.set_draw_value(False) self.set_range(0, 100) self.fg_dpixbuf = fg_dpixbuf self.bg_dpixbuf = bg_dpixbuf self.point_normal_dpixbuf = point_normal_dpixbuf self.point_hover_dpixbuf = point_hover_dpixbuf self.point_press_dpixbuf = point_press_dpixbuf self.bottom_side = 0 self.fg_cache_pixbuf = CachePixbuf() self.bg_cache_pixbuf = CachePixbuf() self.side_cache_pixbuf = CachePixbuf() # Colors self.fg_left_dcolor = app_theme.get_color("progressBarLeft") self.fg_right_dcolor = app_theme.get_color("progressBarRight") self.set_size_request(-1, self.bg_dpixbuf.get_pixbuf().get_height()) self.connect("expose-event", self.expose_h_scalebar) self.connect("button-press-event", self.press_volume_progressbar)
def on_expose_event(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation rect.x += self.padding_x rect.width -= self.padding_x * 2 keyword_span = self.red_span % self.keyword from_keyword_span = self.black_span % self.from_keyword from_keyword_dict = { "keyword": keyword_span, "from": from_keyword_span } self.prompt_text = self.prompt_format_text.format(**from_keyword_dict) _width, _height = get_content_size(self.prompt_text) draw_text(cr, self.prompt_text, rect.x, rect.y, rect.width, _height, text_color=app_theme.get_color("labelText").get_color()) # draw dash rect.y += _height + self.padding_y dash_line_width = 1 with cairo_disable_antialias(cr): cr.set_source_rgb(*color_hex_to_cairo("#D6D6D6")) cr.set_line_width(dash_line_width) cr.set_dash([4.0, 4.0]) cr.move_to(rect.x, rect.y) cr.rel_line_to(rect.width, 0) cr.stroke() rect.y += self.padding_y + dash_line_width _width, _height = get_content_size(self.suggest_title) draw_text(cr, self.suggest_title, rect.x, rect.y, rect.width, _height) rect.y += _height + self.padding_y _width, _height = get_content_size(self.suggest_first_line) draw_text(cr, self.suggest_first_line, rect.x, rect.y, rect.width, _height, text_color=app_theme.get_color("labelText").get_color()) rect.y += _height + self.padding_y _width, _height = get_content_size(self.suggest_second_line) draw_text(cr, self.suggest_second_line, rect.x, rect.y, rect.width, _height, text_color=app_theme.get_color("labelText").get_color()) return True
def expose_category_item(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation font_color = app_theme.get_color("labelText").get_color() arrow_pixbuf = self.arrow_dpixbuf.get_pixbuf() select_index = self.get_index() if widget.state == gtk.STATE_NORMAL: if select_index == self.index: select_status = BUTTON_PRESS else: select_status = BUTTON_NORMAL elif widget.state == gtk.STATE_PRELIGHT: if select_index == self.index: select_status = BUTTON_PRESS else: select_status = BUTTON_HOVER elif widget.state == gtk.STATE_ACTIVE: select_status = BUTTON_PRESS if select_status == BUTTON_PRESS: draw_vlinear( cr, rect.x, rect.y, rect.width, rect.height, app_theme.get_shadow_color("simpleItemPress").get_color_info()) font_color = app_theme.get_color("simpleSelectItem").get_color() elif select_status == BUTTON_HOVER: draw_vlinear( cr, rect.x, rect.y, rect.width, rect.height, app_theme.get_shadow_color("simpleItemHover").get_color_info()) # Draw content. draw_text(cr, self.content, rect.x + self.padding_left, rect.y, rect.width - self.padding_left - self.arrow_width - self.padding_right, rect.height, self.font_size, font_color, alignment=self.x_align) # Draw pixbuf. draw_pixbuf( cr, arrow_pixbuf, rect.x + rect.width - self.arrow_width - self.padding_right, rect.y + (rect.height - arrow_pixbuf.get_height()) / 2) propagate_expose(widget, event) return True
def render_title(self, cr, rect): # Draw select background. # if self.is_select: # draw_pixbuf(cr, self.hover_bg, rect.x, rect.y) # text_color = app_theme.get_color("simpleItemSelect").get_color() if self.is_hover: text_color = app_theme.get_color("simpleItemHighlight").get_color() else: text_color = app_theme.get_color("labelText").get_color() draw_text(cr, self.title, rect.x, rect.y, rect.width, rect.height, text_size=10, text_color = text_color, alignment=pango.ALIGN_CENTER)
def render_title(self, cr, rect, in_select, in_highlight): rect.x += self.title_padding_x rect.width -= self.title_padding_x * 2 if in_highlight: color = app_theme.get_color("simpleSelectItem").get_color() else: color = app_theme.get_color("labelText").get_color() # if error: # color = "#ff0000" content = utils.xmlescape(self.title) draw_text(cr, content, rect.x, rect.y, rect.width, rect.height, text_size=9, text_color=color, alignment=pango.ALIGN_LEFT)
def expose_category_item(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation font_color = app_theme.get_color("labelText").get_color() arrow_pixbuf = self.arrow_dpixbuf.get_pixbuf() select_index = self.get_index() if widget.state == gtk.STATE_NORMAL: if select_index == self.index: select_status = BUTTON_PRESS else: select_status = BUTTON_NORMAL elif widget.state == gtk.STATE_PRELIGHT: if select_index == self.index: select_status = BUTTON_PRESS else: select_status = BUTTON_HOVER elif widget.state == gtk.STATE_ACTIVE: select_status = BUTTON_PRESS if select_status == BUTTON_PRESS: draw_vlinear(cr, rect.x, rect.y, rect.width, rect.height, app_theme.get_shadow_color("simpleItemPress").get_color_info()) font_color = app_theme.get_color("simpleSelectItem").get_color() elif select_status == BUTTON_HOVER: draw_vlinear(cr, rect.x, rect.y, rect.width, rect.height, app_theme.get_shadow_color("simpleItemHover").get_color_info()) # Draw content. draw_text(cr, self.content, rect.x + self.padding_left, rect.y, rect.width - self.padding_left - self.arrow_width - self.padding_right, rect.height, self.font_size, font_color, alignment=self.x_align) # Draw pixbuf. draw_pixbuf(cr, arrow_pixbuf, rect.x + rect.width - self.arrow_width - self.padding_right ,rect.y + (rect.height - arrow_pixbuf.get_height()) / 2) propagate_expose(widget, event) return True
def __init__(self): super(MusicPlaylist, self).__init__() self.listen_db_file = get_cache_file("baidumusic/local_listen.db") self.status_db_file = get_cache_file("baidumusic/status.db") # Init default items self.default_list_item = MusicListItem("试听列表", list_type=MusicListItem.DEFAULT_TYPE) self.collect_list_item = MusicListItem("我的收藏", list_type=MusicListItem.COLLECT_TYPE, has_separator=True) # Init category list. self.category_list = CategoryView(enable_drag_drop=False, enable_multiple_select=True) self.category_list.add_items([self.default_list_item, self.collect_list_item]) del self.category_list.keymap["Delete"] self.category_list.draw_mask = self.draw_category_list_mask self.category_list.set_size_request(CATEGROYLIST_WIDTH, -1) self.category_list.connect("single-click-item", self.on_category_single_click) self.category_list.connect("right-press-items", self.on_category_right_press) self.category_list.set_highlight_item(self.default_list_item) # View box self.view_box = gtk.VBox() self.view_box.connect("size-allocate", self.on_viewbox_size_allocate) self.view_box.add(self.default_list_item.list_widget) # bottom_box = gtk.HBox(spacing=45) # bottom_box_align = gtk.Alignment() # bottom_box_align.set(0.5, 0.5, 1, 1) # bottom_box_align.set_padding(2, 2, 28, 0) # bottom_box_align.set_size_request(-1, 22) # bottom_box_align.add(bottom_box) # bottom_box_align.connect("expose_event", self.on_bottombox_expose_event) # self.search_button = create_toggle_button("toolbar/search", parent=bottom_box) # self.person_button = create_button("combo/artist", parent=bottom_box, no_hover=True) main_paned = HPaned(handle_color=app_theme.get_color("panedHandler"), enable_drag=True) main_paned.pack1(self.category_list, True, True) main_paned.pack2(self.view_box, True, False) # events event_manager.connect("login-success", self.on_event_login_success) event_manager.connect("collect-songs", self.on_event_collect_songs) event_manager.connect("add-songs", self.on_event_add_songs) event_manager.connect("play-songs", self.on_event_play_songs) event_manager.connect("save-listen-lists", self.on_event_save_listen_lists) event_manager.connect("save-playlist-status", self.save_status) # load playlists. self.online_thread_id = 0 self.new_list_thread_id = 0 self.load() self.load_online_lists() self.load_status() self.add(main_paned)
def on_expose_event(self, widget, event): if not self.prompt_pixbuf: return cr = widget.window.cairo_create() rect = widget.allocation pixbuf_y = rect.y + (rect.height - self.prompt_pixbuf.get_height()) / 2 draw_pixbuf(cr, self.bg_left, rect.x, rect.y) bg_left_w = self.bg_left.get_width() self.cache_bg_pixbuf.scale(self.bg_middle, rect.width - bg_left_w * 2, self.bg_middle.get_height()) draw_pixbuf(cr, self.cache_bg_pixbuf.get_cache(), rect.x + bg_left_w, rect.y) draw_pixbuf(cr, self.bg_right, rect.x + rect.width - bg_left_w, rect.y) draw_pixbuf(cr, self.prompt_pixbuf, rect.x + self.padding_x, pixbuf_y) # draw text. text_rect = gtk.gdk.Rectangle( rect.x + self.prompt_pixbuf.get_width() + self.padding_x * 2, rect.y, rect.width - self.prompt_pixbuf.get_width() - self.padding_x * 3, rect.height) render_text(cr, self.prompt_text, text_rect, app_theme.get_color("labelText").get_color(), 8) return True
def __init__(self): gtk.VBox.__init__(self) # Init radiobar. self.__init_radiobar() # is loaded. self.homepage_load_flag = False self.home_page = HomePage() self.hot_page_view, self.hot_page_sw = self.get_radio_icon_view( TAG_HOT, 20) self.fast_page_view, self.fast_page_sw = self.get_radio_icon_view( TAG_FAST, 20) # Genres page self.genre_page = GenrePage() self.page_box = gtk.VBox() self.page_box.add(self.home_page) self.body_paned = HPaned( handle_color=app_theme.get_color("panedHandler")) self.body_paned.add1(self.radiobar) self.body_paned.add2(self.page_box) self.network_failed_box = NetworkConnectFailed( self.check_network_connection) self.check_network_connection(auto=True)
def expose_simple_item(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation font_color = app_theme.get_color("labelText").get_color() item_pixbuf = self.normal_dpixbuf.get_pixbuf() # Draw pixbuf. draw_pixbuf(cr, item_pixbuf, rect.x + self.padding_left, rect.y + (rect.height - item_pixbuf.get_height()) / 2) # Draw content. draw_text(cr, self.content, rect.x + self.padding_left + self.font_offset, rect.y, rect.width - self.padding_left - self.font_offset - self.padding_right, rect.height, self.font_size, font_color, alignment=self.x_align) propagate_expose(widget, event) return True
def __init__(self, title_name): BaseBar.__init__(self, init_index=-1) self.set_spacing(3) self.child_box = gtk.VBox() self.child_item_height = 22 self.current_page = 1 self.page_items_num = 0 self.items = [] title_item = StaticLabel( app_theme.get_pixbuf("filter/local_normal.png"), title_name, 10, 25, 15, 10, 25, ALIGN_START) self.pack_start(title_item, False, False) self.pack_start(self.child_box, True, True) self.child_box.connect("size-allocate", self.size_change_cb) self.control_box = gtk.HBox() self.control_box.set_spacing(15) previous_align = self.create_simple_button("previous", self.update_current_page, "previous") next_align = self.create_simple_button("next", self.update_current_page, "next") self.info_label = Label("0/0", app_theme.get_color("labelText"), text_x_align=ALIGN_MIDDLE) self.control_box.pack_start(previous_align, False, False) self.control_box.pack_start(self.info_label, False, False) self.control_box.pack_start(next_align, False, False) self.control_box.set_no_show_all(True) control_align = gtk.Alignment() control_align.set(1, 1, 0.5, 0.5) control_align.add(self.control_box) self.pack_start(control_align, False, False)
def on_expose_event(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation draw_text(cr, self.text, rect.x, rect.y, rect.width, rect.height, text_color=app_theme.get_color("labelText").get_color(), alignment=pango.ALIGN_CENTER)
def __init__(self, title_name): BaseBar.__init__(self, init_index=-1) self.set_spacing(3) self.child_box = gtk.VBox() self.child_item_height = 22 self.current_page = 1 self.page_items_num = 0 self.items = [] title_item = SimpleLabel( app_theme.get_pixbuf("filter/local_normal.png"), title_name, 10, 25, 15, 10, 25, ALIGN_START) self.pack_start(title_item, False, False) self.pack_start(self.child_box, True, True) self.child_box.connect("size-allocate", self.size_change_cb) self.control_box = gtk.HBox() self.control_box.set_spacing(15) previous_align = self.create_simple_button("previous", self.update_current_page, "previous") next_align = self.create_simple_button("next", self.update_current_page, "next") self.info_label = Label("0/0", app_theme.get_color("labelText"), text_x_align=ALIGN_MIDDLE) self.control_box.pack_start(previous_align, False, False) self.control_box.pack_start(self.info_label, False, False) self.control_box.pack_start(next_align, False, False) self.control_box.set_no_show_all(True) control_align = gtk.Alignment() control_align.set(1, 1, 0.5, 0.5) control_align.add(self.control_box) self.pack_start(control_align, False, False)
def __init__(self, tab_names): ''' init docs ''' gtk.EventBox.__init__(self) self.set_visible_window(False) self.add_events(gtk.gdk.ALL_EVENTS_MASK) self.tab_names = tab_names self.tab_name_size = 10 self.tab_number = len(self.tab_names) tab_sizes = map(lambda tab_name: get_content_size(tab_name, self.tab_name_size), self.tab_names) self.tab_name_padding_x = 10 self.tab_name_padding_y = 2 self.tab_width = max(map(lambda (width, height): width, tab_sizes)) + self.tab_name_padding_x * 2 self.tab_height = tab_sizes[0][1] + self.tab_name_padding_y * 2 self.tab_line_height = 1 self.tab_index = 0 self.tab_animation_x = 0 self.tab_animation_time = 200 # milliseconds self.padding_x = 0 self.padding_y = 15 self.in_animiation = False self.set_size_request(-1, self.tab_height + self.tab_line_height) self.line_dcolor = app_theme.get_color("globalItemHighlight") self.connect("expose-event", self.expose_tab_switcher) self.connect("button-press-event", self.button_press_tab_switcher)
def __init__(self): gtk.VBox.__init__(self) self.set_spacing(10) self.local_view_page = LocalSearchView(local_search_tab) self.close_button = SearchCloseButton() self.line_dcolor = app_theme.get_color("globalItemHighlight") close_button_align = set_widget_gravity(self.close_button, gravity=(0.5, 0.5, 0, 0), paddings=(0, 0, 5, 10)) close_button_align.connect("expose-event", self.on_close_button_expose_event) self.tab_switcher = TabSwitcher([TabItem(_("Library"), self.local_view_page)]) self.tab_switcher.connect("tab-switch-start", lambda switcher, tab_index: self.switch_result_view(tab_index)) tab_switcher_align = set_widget_gravity(self.tab_switcher, gravity=(0, 0, 1, 1), paddings=(10, 0, 0, 0)) tab_switcher_box = gtk.HBox() tab_switcher_box.pack_start(tab_switcher_align, True, True) tab_switcher_box.pack_start(close_button_align, False, False) self.result_page = gtk.VBox() self.result_page.add(self.local_view_page) self.pack_start(tab_switcher_box, False, True) self.pack_start(self.result_page, True, True) Dispatcher.connect("add-search-view", self.on_dispatcher_add_search_view) Dispatcher.connect("remove-search-view", self.on_dispatcher_remove_search_view) Dispatcher.connect("switch-browser", self.on_list_manager_switch_browser)
def render_title(self, cr, rect): # Draw select background. if self.is_select: draw_single_mask(cr, rect.x + 1, rect.y, rect.width - 2, rect.height, "globalItemHighlight") elif self.is_hover: draw_single_mask(cr, rect.x + 1, rect.y, rect.width - 2, rect.height, "globalItemHover") if self.is_select: text_color = "#FFFFFF" else: text_color = app_theme.get_color("labelText").get_color() if self.is_select: icon_pixbuf = self.press_dpixbuf.get_pixbuf() else: icon_pixbuf = self.normal_dpixbuf.get_pixbuf() rect.x += self.padding_x rect.width -= self.padding_x * 2 icon_y = rect.y + (rect.height - icon_pixbuf.get_height()) / 2 draw_pixbuf(cr,icon_pixbuf, rect.x, icon_y) rect.x += self.icon_width + self.padding_x rect.width -= self.icon_width draw_text(cr, self.title, rect.x, rect.y, rect.width, rect.height, text_size=10, text_color = text_color, alignment=pango.ALIGN_LEFT)
def render_text(self, cr, rect): if self.is_hover: # Draw background. draw_single_mask(cr, rect.x + 1, rect.y, rect.width - 2, rect.height, "globalItemSelect") # Set font color. font_color = "#FFFFFF" # Don't highlight when select. # text = self.text else: # Set font color. font_color = app_theme.get_color("labelText").get_color() # Highilght match string. # (text_pre, text_post) = self.text.split(self.search_string) # text = "%s<span foreground=\"#00AAFF\">%s</span>%s" % (text_pre, self.search_string, text_post) draw_text(cr, self.text, rect.x + self.padding_x, rect.y, rect.width - self.padding_x * 2, rect.height, text_color=font_color)
def render_title(self, cr, rect): # Draw select background. if self.is_select: draw_single_mask(cr, rect.x, rect.y, rect.width, rect.height, "globalItemHighlight") elif self.is_hover: draw_single_mask(cr, rect.x, rect.y, rect.width, rect.height, "globalItemHover") if self.is_select: text_color = "#FFFFFF" else: text_color = app_theme.get_color("labelText").get_color() # draw arrow if self.is_expand: if self.is_select: arrow_pixbuf = self.down_press_dpixbuf.get_pixbuf() else: arrow_pixbuf = self.down_normal_dpixbuf.get_pixbuf() else: if self.is_select: arrow_pixbuf = self.right_press_dpixbuf.get_pixbuf() else: arrow_pixbuf = self.right_normal_dpixbuf.get_pixbuf() arrow_x = rect.x + self.arrow_padding_x arrow_y = rect.y + (rect.height - arrow_pixbuf.get_height()) / 2 draw_pixbuf(cr, arrow_pixbuf, arrow_x, arrow_y) draw_text(cr, self.title, rect.x + self.title_padding_x, rect.y, rect.width - self.title_padding_x, rect.height, text_size=10, text_color = text_color, alignment=pango.ALIGN_LEFT)
def render(self, cr, rect): if self.hover_flag or self.is_select: color = app_theme.get_color("simpleItemHighlight").get_color() else: color = "#333333" draw_text(cr, self.title, rect.x, rect.y, rect.width, rect.height, text_color=color, underline=self.underline_flag)
def render_title(self, cr, rect): # Draw select background. if self.is_select: draw_single_mask(cr, rect.x, rect.y, rect.width, rect.height, "globalItemHighlight") elif self.is_hover: draw_single_mask(cr, rect.x, rect.y, rect.width, rect.height, "globalItemHover") if self.is_select: text_color = "#FFFFFF" else: text_color = app_theme.get_color("labelText").get_color() column_offset = self.column_offset * self.column_index draw_text(cr, self.title, rect.x + self.title_padding_x + column_offset, rect.y, rect.width - self.title_padding_x - column_offset, rect.height, text_size=10, text_color=text_color, alignment=pango.ALIGN_LEFT)
def __init__(self): super(SongTimer, self).__init__() self.label_time = Label("00:00/00:00", app_theme.get_color("labelText"), 8, enable_gaussian=True) self.bar = HScalebar() self.bar.set_draw_value(False) self.bar.set_range(0, 1000) self.bar.set_value(0) self.bar.connect("button_press_event", self.on_bar_press) self.bar.connect("button_release_event", self.on_bar_release) self.__value_changed_id = self.bar.connect("value-changed", self.on_bar_value_changed) self.bar.handler_block(self.__value_changed_id) self.pack_start(self.bar, True, True) self.update_bar = 1 self.duration = 0 self.__idle_release_id = None self.delete = False self.__need_report = False Player.connect("instant-new-song", self.set_duration) Player.bin.connect("tick", self.on_tick) Player.connect("seeked", self.on_seek) Player.connect("stopped", self.set_duration) if not Player.song: self.bar.set_sensitive(False)
def render_item_text2(cr, content, rect, in_select, in_highlight, align=pango.ALIGN_LEFT, font_size=9, error=False): if in_select: color = app_theme.get_color("simpleSelectItem").get_color() else: # color = app_theme.get_color("labelText").get_color() color = "#707070" if error: color = "#ff0000" content = utils.xmlescape(content) draw_text(cr, content, rect.x, rect.y, rect.width, rect.height, font_size, color, alignment=align)
def __init__(self, draw_time_callback=None): super(SongTimer, self).__init__() self.label_time = Label("00:00", app_theme.get_color("labelText"), 8, enable_gaussian=True) self.draw_time_callback = draw_time_callback if draw_time_callback: draw_time_callback(self.label_time.get_text()) self.bar = ProgressBar() bar_align = gtk.Alignment() bar_align.set_padding(0, 0, 2, 2) bar_align.set(1, 1, 1, 1) bar_align.add(self.bar) self.bar.connect("button-press-event", self.on_bar_press) self.bar.connect("button-release-event", self.on_bar_release) self.__value_changed_id = self.bar.connect("value-changed", self.on_bar_value_changed) self.pack_start(bar_align, True, True) self.update_bar = 1 self.duration = 0 self.__idle_release_id = None self.delete = False self.__need_report = False self.press_flag = False Player.connect("instant-new-song", self.set_duration) Player.connect("init-status", self.on_player_init_status) Player.bin.connect("queue-running", self.on_queue_running) Player.bin.connect("tick", self.on_tick) Player.connect("seeked", self.on_seek) Player.connect("stopped", self.set_duration) if not Player.song: self.bar.set_sensitive(False)
def __init__(self, items): ''' init docs ''' gtk.EventBox.__init__(self) self.set_visible_window(False) self.add_events(gtk.gdk.ALL_EVENTS_MASK) self.items = items self.tab_name_size = 10 self.tab_number = len(self.items) tab_sizes = map( lambda item: get_content_size(item.title, self.tab_name_size), self.items) self.tab_name_padding_x = 10 self.tab_name_padding_y = 2 self.tab_width = max(map(lambda (width, height): width, tab_sizes)) + self.tab_name_padding_x * 2 self.tab_height = tab_sizes[0][1] + self.tab_name_padding_y * 2 self.tab_line_height = 1 self.tab_index = 0 self.tab_animation_x = 0 self.tab_animation_time = 200 # milliseconds self.padding_x = 0 self.padding_y = 15 self.in_animiation = False self.set_size_request(-1, self.tab_height + self.tab_line_height) self.line_dcolor = app_theme.get_color("globalItemHighlight") self.connect("expose-event", self.expose_tab_switcher) self.connect("button-press-event", self.button_press_tab_switcher)
def __init__(self, draw_time_callback=None): super(SongTimer, self).__init__() self.label_time = Label("00:00", app_theme.get_color("labelText"), 8, enable_gaussian=True) self.draw_time_callback = draw_time_callback if draw_time_callback: draw_time_callback(self.label_time.get_text()) self.bar = ProgressBar() bar_align = gtk.Alignment() bar_align.set_padding(0, 0, 1, 1) bar_align.set(1, 1, 1, 1) bar_align.add(self.bar) self.bar.connect("button-press-event", self.on_bar_press) self.bar.connect("button-release-event", self.on_bar_release) self.__value_changed_id = self.bar.connect("value-changed", self.on_bar_value_changed) self.pack_start(bar_align, True, True) self.update_bar = 1 self.duration = 0 self.__idle_release_id = None self.delete = False self.__need_report = False self.press_flag = False Player.connect("instant-new-song", self.set_duration) Player.connect("init-status", self.on_player_init_status) Player.bin.connect("queue-running", self.on_queue_running) Player.bin.connect("tick", self.on_tick) Player.connect("seeked", self.on_seek) Player.connect("stopped", self.set_duration) if not Player.song: self.bar.set_sensitive(False)
def on_panel_expose_event(self, widget, event): if not self.items: return cr = widget.window.cairo_create() rect = widget.allocation draw_line(cr, (rect.x, rect.y + 1), (rect.x + rect.width, rect.y + 1), "#c7c7c7") draw_line(cr, (rect.x + rect.width, rect.y), (rect.x + rect.width, rect.y + rect.height), "#c7c7c7") draw_line(cr, (rect.x, rect.y + rect.height), (rect.x + rect.width, rect.y + rect.height), "#c7c7c7") draw_line(cr, (rect.x + 1, rect.y + 32), (rect.x + 1, rect.y + rect.height), "#c7c7c7") rect.y += self.block_height start_x, start_y = self.padding_x, self.padding_y for index, item in enumerate(self.items): item_width, item_height = item.get_size() if rect.width - start_x < item_width + self.separate_width: start_y += item_height + self.item_interval_height start_x = self.padding_x item.render(cr, gtk.gdk.Rectangle(rect.x + start_x, rect.y + start_y, item_width, item_height)) self.coords[index] = self.range(rect.x + start_x, rect.x + start_x + item_width, rect.y + start_y, rect.y + start_y + item_height) start_x += item_width draw_text(cr, self.separate_text, rect.x + start_x, rect.y + start_y, self.separate_width, self.separate_height, text_color=app_theme.get_color("labelText").get_color()) start_x += self.separate_width return True
def expose_simple_item(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation font_color = app_theme.get_color("labelText").get_color() select_index = self.get_index() if widget.state == gtk.STATE_NORMAL: if select_index == self.index: select_status = BUTTON_PRESS else: select_status = BUTTON_NORMAL elif widget.state == gtk.STATE_PRELIGHT: if select_index == self.index: select_status = BUTTON_PRESS else: select_status = BUTTON_HOVER elif widget.state == gtk.STATE_ACTIVE: select_status = BUTTON_PRESS if select_status == BUTTON_PRESS: draw_single_mask(cr, rect.x, rect.y, rect.width, rect.height, "simpleItemHighlight") font_color = app_theme.get_color("simpleSelectItem").get_color() elif select_status == BUTTON_HOVER: draw_single_mask(cr, rect.x, rect.y, rect.width, rect.height, "simpleItemHover") # Draw content. draw_text(cr, self.content, rect.x + self.padding_left + self.font_offset, rect.y, rect.width - self.padding_left - self.font_offset - self.padding_right, rect.height, self.font_size, font_color, alignment=self.x_align) propagate_expose(widget, event) return True
def __init__(self): super(MusicPlaylist, self).__init__() # Set db file self.listen_db_file = get_cache_file("neteasecloudmusic/local_listen.db") self.status_db_file = get_cache_file("neteasecloudmusic/status.db") # Set default & collect list item self.playing_list_item = MusicListItem("播放列表", MusicListItem.PLAYING_LIST_TYPE) # Set category list and connect click/right click self.category_list = CategoryView(enable_drag_drop=False, enable_multiple_select=True) self.category_list.add_items([self.playing_list_item]) del self.category_list.keymap["Delete"] self.category_list.draw_mask = self.draw_category_list_mask self.category_list.set_size_request(CATEGROYLIST_WIDTH, -1) self.category_list.connect("single-click-item", self.on_category_single_click) self.category_list.connect("right-press-items", self.on_category_right_press) #self.category_list.set_highlight_item(self.playing_list_item) # Set view_box self.view_box = gtk.VBox() self.view_box.connect("size-allocate", self.on_viewbox_size_allocate) #self.view_box.add(self.playing_list_item.list_widget) main_paned = HPaned(handle_color=app_theme.get_color("panedHandler"), enable_drag=True) main_paned.pack1(self.category_list, True, True) main_paned.pack2(self.view_box, True, False) """ Set events""" event_manager.connect("login-success", self.load_online_lists) event_manager.connect("relogin", self.relogin) event_manager.connect("add-songs-to-playing-list-and-play", self.add_songs_to_playing_list_and_play) event_manager.connect("add-songs-to-playing-list", self.add_songs_to_playing_list) event_manager.connect("save-playing-list-status", self.save) # Load playlists self.online_thread_id = 0 self.new_list_thread_id = 0 if nplayer.is_login: self.load_online_lists('') else: self.login_item = MusicListItem("登录", MusicListItem.LOGIN_LIST_TYPE) self.category_list.add_items([self.login_item]) self.load() self.add(main_paned)
def render_title(self, cr, rect): # Draw select background. if self.is_select: draw_pixbuf(cr, self.hover_bg, rect.x, rect.y) text_color = app_theme.get_color("simpleItemHighlight").get_color() elif self.is_hover: text_color = app_theme.get_color("simpleItemHighlight").get_color() else: text_color = app_theme.get_color("labelText").get_color() draw_text(cr, self.title, rect.x, rect.y, rect.width, rect.height, text_size=10, text_color = text_color, alignment=pango.ALIGN_CENTER) if self.has_icon: draw_pixbuf(cr, self.selected_pixbuf, rect.x + 10, rect.y + (rect.height - self.selected_pixbuf.get_height()) / 2)
def __init__(self, value=100, lower=0, upper=100, step=5): gtk.Button.__init__(self) # Init data. self.__value = value self.__lower = lower self.__upper = upper self.__step = step self.drag_flag = False self.move_flag = False # Init DPixbufs. self.bg_dpixbuf = app_theme.get_pixbuf("scalebar/bg.png") self.point_dpixbuf = app_theme.get_pixbuf("scalebar/point_normal.png") self.point_width = self.point_dpixbuf.get_pixbuf().get_width() # Init Dcolors. self.fg_left_dcolor = app_theme.get_color("progressBarLeft") self.fg_right_dcolor = app_theme.get_color("progressBarRight") # self.progressbar_tip = progressBarTip() # Init Sizes. self._value = lower self.padding_x = 0 self.padding_y = 0 self.progress_x = 0 self.point_offset = 0 self.fg_offset = self.bg_offset = 0 self.default_height = self.bg_dpixbuf.get_pixbuf().get_height() # Init CachePixbufs self.bg_cache_pixbuf = CachePixbuf() self.fg_cache_pixbuf = CachePixbuf() self.set_size_request(-1, self.default_height) # Init Events. self.add_events(gtk.gdk.ALL_EVENTS_MASK) self.connect("expose-event", self.on_expose_event) self.connect("button-press-event", self.on_button_press_event) self.connect("motion-notify-event", self.on_motion_notify_event) self.connect("button-release-event", self.on_button_release_event)
def expose_tab_switcher(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw tab line. cr.set_source_rgb(*color_hex_to_cairo(self.line_dcolor.get_color())) cr.rectangle(rect.x + self.padding_x, rect.y + self.tab_height, rect.width - self.padding_x * 2, self.tab_line_height) cr.fill() # Draw tab. draw_start_x = rect.x + (rect.width - self.tab_width * self.tab_number) / 2 if self.in_animiation: cr.rectangle(self.tab_animation_x, rect.y, self.tab_width, self.tab_height) else: cr.rectangle(draw_start_x + self.tab_index * self.tab_width, rect.y, self.tab_width, self.tab_height) cr.fill() # Draw tab name. for (tab_index, tab_name) in enumerate(self.tab_names): if self.in_animiation: tab_name_color = app_theme.get_color("labelText").get_color() elif tab_index == self.tab_index: tab_name_color = "#FFFFFF" else: tab_name_color = app_theme.get_color("labelText").get_color() draw_text(cr, tab_name, draw_start_x + tab_index * self.tab_width, rect.y, self.tab_width, self.tab_height, text_size=self.tab_name_size, text_color=tab_name_color, alignment=pango.ALIGN_CENTER, )
def draw_single_mask(cr, x, y, width, height, color_name): if color_name.startswith("#"): color = color_name else: color = app_theme.get_color(color_name).get_color() cairo_color = color_hex_to_cairo(color) cr.set_source_rgb(*cairo_color) cr.rectangle(x, y, width, height) cr.fill()
def render(self, cr, rect): if not self.hover_flag: color = "#333333" self.underline = False else: if self.has_underline: self.underline = True color = app_theme.get_color("simpleItemHighlight").get_color() draw_text(cr, self.title, rect.x, rect.y, rect.width, rect.height, text_color=color, underline=self.underline)
def render_title(self, cr, rect): # Draw select background. # if self.is_select: # draw_pixbuf(cr, self.hover_bg, rect.x, rect.y) # text_color = app_theme.get_color("simpleItemSelect").get_color() if self.is_hover: text_color = app_theme.get_color("simpleItemHighlight").get_color() else: text_color = app_theme.get_color("labelText").get_color() draw_text(cr, self.title, rect.x, rect.y, rect.width, rect.height, text_size=10, text_color=text_color, alignment=pango.ALIGN_CENTER)
def expose_simple_item(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation font_color = app_theme.get_color("labelText").get_color() select_index = self.get_index() if widget.state == gtk.STATE_NORMAL: if select_index == self.index: select_status = BUTTON_PRESS else: select_status = BUTTON_NORMAL elif widget.state == gtk.STATE_PRELIGHT: if select_index == self.index: select_status = BUTTON_PRESS else: select_status = BUTTON_HOVER elif widget.state == gtk.STATE_ACTIVE: select_status = BUTTON_PRESS if select_status == BUTTON_PRESS: draw_single_mask(cr, rect.x, rect.y, rect.width, rect.height, "simpleItemHighlight") font_color = app_theme.get_color("simpleSelectItem").get_color() elif select_status == BUTTON_HOVER: draw_single_mask(cr, rect.x, rect.y, rect.width, rect.height, "simpleItemHover") # Draw content. draw_text(cr, self.content, rect.x + self.padding_left + self.font_offset , rect.y, rect.width - self.padding_left - self.font_offset - self.padding_right, rect.height, self.font_size, font_color, alignment=self.x_align) propagate_expose(widget, event) return True
def on_expose_event(self, widget, event): cr = widget.window.cairo_create() rect = widget.allocation rect.x += self.padding_x rect.width -= self.padding_x * 2 keyword_span = self.red_span % self.keyword from_keyword_span = self.black_span % self.from_keyword from_keyword_dict = {"keyword" : keyword_span, "from" : from_keyword_span} self.prompt_text = self.prompt_format_text.format(**from_keyword_dict) _width, _height = get_content_size(self.prompt_text) draw_text(cr, self.prompt_text, rect.x, rect.y, rect.width, _height, text_color=app_theme.get_color("labelText").get_color()) # draw dash rect.y += _height + self.padding_y dash_line_width = 1 with cairo_disable_antialias(cr): cr.set_source_rgb(*color_hex_to_cairo("#D6D6D6")) cr.set_line_width(dash_line_width) cr.set_dash([4.0, 4.0]) cr.move_to(rect.x, rect.y) cr.rel_line_to(rect.width, 0) cr.stroke() rect.y += self.padding_y + dash_line_width _width, _height = get_content_size(self.suggest_title) draw_text(cr, self.suggest_title, rect.x, rect.y, rect.width, _height) rect.y += _height + self.padding_y _width, _height = get_content_size(self.suggest_first_line) draw_text(cr, self.suggest_first_line, rect.x, rect.y, rect.width, _height, text_color=app_theme.get_color("labelText").get_color()) rect.y += _height + self.padding_y _width, _height = get_content_size(self.suggest_second_line) draw_text(cr, self.suggest_second_line, rect.x, rect.y, rect.width, _height, text_color=app_theme.get_color("labelText").get_color()) return True
def draw_range(cr, x, y, width, height, color_name): if color_name.startswith("#"): color = color_name else: color = app_theme.get_color(color_name).get_color() cairo_color = color_hex_to_cairo(color) with cairo_disable_antialias(cr): cr.set_line_width(1) cr.set_source_rgb(*cairo_color) cr.rectangle(x, y, width, height) cr.stroke()
def expose_tab_switcher(self, widget, event): # Init. cr = widget.window.cairo_create() rect = widget.allocation # Draw tab line. cr.set_source_rgb(*color_hex_to_cairo(self.line_dcolor.get_color())) cr.rectangle(rect.x + self.padding_x, rect.y + self.tab_height, rect.width - self.padding_x * 2, self.tab_line_height) cr.fill() # Draw tab. draw_start_x = rect.x + (rect.width - self.tab_width * self.tab_number) / 2 if self.in_animiation: cr.rectangle(self.tab_animation_x, rect.y, self.tab_width, self.tab_height) else: cr.rectangle(draw_start_x + self.tab_index * self.tab_width, rect.y, self.tab_width, self.tab_height) cr.fill() # Draw tab name. for (tab_index, tab_item) in enumerate(self.items): if self.in_animiation: tab_name_color = app_theme.get_color("labelText").get_color() elif tab_index == self.tab_index: tab_name_color = "#FFFFFF" else: tab_name_color = app_theme.get_color("labelText").get_color() draw_text( cr, tab_item.title, draw_start_x + tab_index * self.tab_width, rect.y, self.tab_width, self.tab_height, text_size=self.tab_name_size, text_color=tab_name_color, alignment=pango.ALIGN_CENTER, )
def draw_line(cr, start, end, color_name): if color_name.startswith("#"): color = color_name else: color = app_theme.get_color(color_name).get_color() cairo_color = color_hex_to_cairo(color) with cairo_disable_antialias(cr): cr.set_line_width(1) cr.set_source_rgb(*cairo_color) cr.move_to(*start) cr.line_to(*end) cr.stroke()
def render_item_text(cr, content, rect, in_select, in_highlight, align=pango.ALIGN_LEFT, font_size=9, error=False): if in_highlight: color = app_theme.get_color("simpleSelectItem").get_color() else: # color = app_theme.get_color("labelText").get_color() color = "#707070" if error: color = "#ff0000" content = utils.xmlescape(content) draw_text(cr, content, rect.x, rect.y, rect.width, rect.height, font_size, color, alignment=align)
def render(self, cr, rect): ''' Render item. This is IconView interface, you should implement it. ''' # Draw cover. if self.pixbuf is None: self.create_cover_pixbuf() pixbuf_x = rect.x + (rect.width - self.pixbuf.get_width()) / 2 cr.save() cr.arc(pixbuf_x + self.pixbuf.get_width() / 2, rect.y + self.pixbuf.get_height() / 2, self.pixbuf.get_width() / 2, 0, 2 * math.pi) cr.clip() draw_pixbuf(cr, self.pixbuf, pixbuf_x, rect.y) cr.restore() if self.pixbuf_rect is None: self.pixbuf_rect = gtk.gdk.Rectangle( (rect.width - self.pixbuf.get_width()) / 2, 0, self.pixbuf.get_width(), self.pixbuf.get_height()) if self.mask_flag: if self.mask_pixbuf is None: self.create_mask_pixbuf() cr.save() cr.arc(pixbuf_x + self.pixbuf.get_width() / 2, rect.y + self.pixbuf.get_height() / 2, self.pixbuf.get_width() / 2, 0, 2 * math.pi) cr.clip() draw_pixbuf(cr, self.mask_pixbuf, pixbuf_x, rect.y) cr.restore() title_rect = gtk.gdk.Rectangle(rect.x + self.padding_x, rect.y + self.pixbuf.get_height() + 5, rect.width - self.padding_x * 2, 11) total_rect = gtk.gdk.Rectangle(title_rect.x, title_rect.y + 16, title_rect.width, 9) render_text( cr, utils.xmlescape(self.title), title_rect, # app_theme.get_color("labelText").get_color(), "#444444", 10) render_text(cr, utils.xmlescape(self.description), total_rect, app_theme.get_color("labelText").get_color(), 8)
def __init__(self): super(JobsManager, self).__init__(spacing=6) self.connect("expose-event", self.draw_bg_mask) self.jobs_label = Label("0 " + _("jobs waiting!"), app_theme.get_color("labelText"), 8) self.jobs_label.set_size_request(150, 12) label_align = gtk.Alignment() label_align.set(0.5, 0.5, 0, 0) label_align.set_padding(0, 0, 10, 0) label_align.add(self.jobs_label) self.progress_label = Label("", app_theme.get_color("labelText"), 8) self.progress_label.set_size_request(500, 10) self.__paused = False btn_cancel = self.__create_simple_button("stop", self.stop) self.__btn_pause = self.__create_begin_button(self.pause) btn_pause_align = gtk.Alignment() btn_pause_align.set(0.5, 0.5, 0, 0) btn_pause_align.add(self.__btn_pause) btn_cancel_align = gtk.Alignment() btn_cancel_align.set(0.5, 0.5, 0, 0) btn_cancel_align.set_padding(0, 0, 0, 10) btn_cancel_align.add(btn_cancel) self.pack_start(label_align, False, False) # self.pack_start(self.throbber, False, False) self.pack_start(self.progress_label, True, True) self.pack_start(btn_pause_align, False, False) self.pack_start(btn_cancel_align, False, False) self.show_all() self.set_no_show_all(True) self.hide() self.jobs_label.hide_all()
def render_title(self, cr, rect): # Draw select background. if self.is_select: draw_pixbuf(cr, self.hover_bg, rect.x, rect.y) text_color = app_theme.get_color("simpleItemHighlight").get_color() elif self.is_hover: text_color = app_theme.get_color("simpleItemHighlight").get_color() else: text_color = app_theme.get_color("labelText").get_color() draw_text(cr, self.title, rect.x, rect.y, rect.width, rect.height, text_size=10, text_color=text_color, alignment=pango.ALIGN_CENTER) if self.has_icon: draw_pixbuf( cr, self.selected_pixbuf, rect.x + 10, rect.y + (rect.height - self.selected_pixbuf.get_height()) / 2)
def render_version(self, cr, rect): if self.is_select: draw_single_mask(cr, rect.x, rect.y, rect.width, rect.height, "globalItemSelect") elif self.is_hover: draw_single_mask(cr, rect.x, rect.y, rect.width, rect.height, "globalItemHover") if self.is_select: text_color = "#FFFFFF" else: text_color = app_theme.get_color("labelText").get_color() draw_text(cr, self.pluginfo["Version"], rect.x + self.draw_padding_x, rect.y, rect.width - self.draw_padding_x * 2, rect.height, text_size=10, text_color = text_color, alignment=pango.ALIGN_LEFT)