def do_draw(self, contexto): rect = self.get_allocation() w, h = (rect.width, rect.height) # Relleno de la barra ww = w - self.borde * 2 hh = h - self.borde * 2 Gdk.cairo_set_source_color(contexto, Gdk.Color(0, 0, 0)) rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = (self.borde, self.borde, ww, hh) Gdk.cairo_rectangle(contexto, rect) contexto.fill() # Relleno de la barra segun progreso Gdk.cairo_set_source_color(contexto, Gdk.Color(23000, 41000, 12000)) rect = Gdk.Rectangle() ximage = int(self.ajuste.get_value() * ww / 100) rect.x, rect.y, rect.width, rect.height = (self.borde, self.borde, ximage, hh) Gdk.cairo_rectangle(contexto, rect) contexto.fill() return True
def do_draw(self, contexto): """ Dibuja el estado de la barra de progreso. """ rect = self.get_allocation() w, h = (rect.width, rect.height) # Fondo #Gdk.cairo_set_source_color(contexto, G.BLANCO) #contexto.paint() # Relleno de la barra ww = w - self.borde * 2 hh = h - self.borde * 2 Gdk.cairo_set_source_color(contexto, get_color("NEGRO")) rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = ( self.borde, self.borde, ww, hh) Gdk.cairo_rectangle(contexto, rect) contexto.fill() # Relleno de la barra segun progreso Gdk.cairo_set_source_color(contexto, get_color("NARANJA")) rect = Gdk.Rectangle() ximage = int(self.ajuste.get_value() * ww / 100) rect.x, rect.y, rect.width, rect.height = (self.borde, self.borde, ximage, hh) Gdk.cairo_rectangle(contexto, rect) contexto.fill() return True
def do_draw(self, ctx): square = Gdk.Rectangle() square.x = 0 square.y = 0 square.width = Gdk.Screen.width() square.height = Gdk.Screen.height() color = Gdk.color_parse("white") Gdk.cairo_set_source_color(ctx, color) Gdk.cairo_rectangle(ctx, square) ctx.fill() self.draw_images(ctx, self.current_images) if self._face: self.draw_face(self._face) if not self.finished: if not self._id: def enable_click(): self._id = self.connect('button-press-event', self.check_option) if self._face: self._face = None self.queue_draw() GObject.timeout_add(1500, enable_click)
def do_draw(self, contexto): rect = self.get_allocation() w, h = (rect.width, rect.height) # Relleno de la barra ww = w - self.borde * 2 hh = h - self.borde * 2 Gdk.cairo_set_source_color(contexto, Gdk.Color(0, 0, 0)) rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = ( self.borde, self.borde, ww, hh) Gdk.cairo_rectangle(contexto, rect) contexto.fill() # Relleno de la barra segun progreso Gdk.cairo_set_source_color(contexto, Gdk.Color(23000, 41000, 12000)) rect = Gdk.Rectangle() ximage = int(self.ajuste.get_value() * ww / 100) rect.x, rect.y, rect.width, rect.height = (self.borde, self.borde, ximage, hh) Gdk.cairo_rectangle(contexto, rect) contexto.fill() return True
def area_expose_cb(area, cr): style = area.get_style() Gdk.cairo_set_source_color(cr, style.white) cr.rectangle(0, 0, size, size) cr.fill() Gdk.cairo_set_source_color(cr, style.black) for r in range(boxcount_row): for c in range(boxcount_row): if matrix[r][c]: cr.rectangle((c + 2) * boxsize, (r + 2) * boxsize, boxsize, boxsize) cr.fill()
def do_draw(self, cr): """ Draw indicator and label @param cr as cairo.Context """ Gtk.Label.do_draw(self, cr) if self.__unshown: w = self.get_allocated_width() cr.stroke() cr.translate(w - 5, 5) cr.set_line_width(1) Gdk.cairo_set_source_color(cr, Gdk.Color.parse("red")[1]) cr.arc(0, 0, 4, 0, 2 * pi) cr.stroke_preserve() Gdk.cairo_set_source_color(cr, Gdk.Color.parse("red")[1]) cr.fill()
def __draw(self, cr): """Draws the widget""" alloc = self.get_allocation() # FIXME - why to use a special variables? alloc_w, alloc_h = alloc.width, alloc.height # Drawing context # cr_ctxt = Gdk.cairo_create(self.window) # gdkcontext = Gdk.CairoContext(cr_ctxt) # FIXME gdkcontext = cr # Draw rectangle if self.color is not None: my_color = Gdk.color_parse(self.color) Gdk.cairo_set_source_color(gdkcontext, my_color) else: Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0)) gdkcontext.rectangle(0, 0, alloc_w, alloc_h) gdkcontext.fill() # Outer line Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.30)) gdkcontext.set_line_width(2.0) gdkcontext.rectangle(0, 0, alloc_w, alloc_h) gdkcontext.stroke() # If selected draw a symbol if (self.selected): size = alloc_h * 0.50 - 3 pos_x = math.floor((alloc_w - size) / 2) pos_y = math.floor((alloc_h - size) / 2) Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(255, 255, 255, 0.80)) gdkcontext.arc(alloc_w / 2, alloc_h / 2, size / 2 + 3, 0, 2 * math.pi) gdkcontext.fill() gdkcontext.set_line_width(1.0) Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.20)) gdkcontext.arc(alloc_w / 2, alloc_h / 2, size / 2 + 3, 0, 2 * math.pi) gdkcontext.stroke() Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.50)) gdkcontext.set_line_width(3.0) gdkcontext.move_to(pos_x, pos_y + size / 2) gdkcontext.line_to(pos_x + size / 2, pos_y + size) gdkcontext.line_to(pos_x + size, pos_y) gdkcontext.stroke()
def __draw(self, cr): """Draws the widget""" alloc = self.get_allocation() #FIXME - why to use a special variables? alloc_w, alloc_h = alloc.width, alloc.height # Drawing context #cr_ctxt = self.window.cairo_create() # pylint: disable-msg=E1101 #gdkcontext = Gdk.CairoContext(cr_ctxt) #FIXME gdkcontext = cr # Draw rectangle if self.color is not None: my_color = Gdk.color_parse(self.color) Gdk.cairo_set_source_color(gdkcontext, my_color) else: Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0)) gdkcontext.rectangle(0, 0, alloc_w, alloc_h) gdkcontext.fill() # Outer line Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.30)) gdkcontext.set_line_width(2.0) gdkcontext.rectangle(0, 0, alloc_w, alloc_h) gdkcontext.stroke() # If selected draw a symbol if(self.selected): size = alloc_h * 0.50 - 3 pos_x = math.floor((alloc_w - size) / 2) pos_y = math.floor((alloc_h - size) / 2) Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(255, 255, 255, 0.80)) gdkcontext.arc( alloc_w / 2, alloc_h / 2, size / 2 + 3, 0, 2 * math.pi) gdkcontext.fill() gdkcontext.set_line_width(1.0) Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.20)) gdkcontext.arc( alloc_w / 2, alloc_h / 2, size / 2 + 3, 0, 2 * math.pi) gdkcontext.stroke() Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.50)) gdkcontext.set_line_width(3.0) gdkcontext.move_to(pos_x, pos_y + size / 2) gdkcontext.line_to(pos_x + size / 2, pos_y + size) gdkcontext.line_to(pos_x + size, pos_y) gdkcontext.stroke()
def draw_callback(self, w, cr, levels, s_width, interval, v_step): #levels = a number of volume levels (a number of sticks equals level-1) #s_width - width of stick #interval - interval between sticks #v_step - increase the height of the stick #all parameters must be integer type area_width = w.get_allocation().width area_height = w.get_allocation().height h_step = s_width + interval width = levels * (s_width + interval) - interval height = v_step * (levels - 1) if width < area_width: start_x = (area_width - width) / 2 else: start_x = 1 if height < area_height: start_y = area_height - (area_height - height) / 2 else: start_y = 0 x = start_x y = start_y - 1 label = FC().volume * width / 100.0 + start_x i = 0 while i < levels: color = Gdk.color_parse( "orange red") if x < label else Gdk.color_parse("white") Gdk.cairo_set_source_color(cr, color) cr.move_to(x, start_y) cr.line_to(x + s_width, start_y) cr.line_to(x + s_width, y) cr.line_to(x, y) #cr.close_path() cr.fill() i += 1 x += h_step y -= v_step return True
def draw_callback(self, w, cr, levels, s_width, interval, v_step): #levels = a number of volume levels (a number of sticks equals level-1) #s_width - width of stick #interval - interval between sticks #v_step - increase the height of the stick #all parameters must be integer type area_width = w.get_allocation().width area_height = w.get_allocation().height h_step = s_width + interval width = levels * (s_width + interval) - interval height = v_step * (levels - 1) if width < area_width: start_x = (area_width-width)/2 else: start_x = 1 if height < area_height: start_y = area_height - (area_height - height)/2 else: start_y = 0 x = start_x y = start_y - 1 label = FC().volume * width/100.0 + start_x i = 0 while i < levels: color = Gdk.color_parse("orange red") if x < label else Gdk.color_parse("white") Gdk.cairo_set_source_color(cr, color) cr.move_to(x, start_y) cr.line_to(x+s_width, start_y) cr.line_to(x+s_width, y) cr.line_to(x, y) #cr.close_path() cr.fill() i += 1 x += h_step y -= v_step
def do_draw(self, contexto): """ Dibuja el estado de la barra de progreso. """ rect = self.get_allocation() w, h = (rect.width, rect.height) # Fondo #Gdk.cairo_set_source_color(contexto, G.BLANCO) #contexto.paint() # Relleno de la barra ww = w - self.borde * 2 hh = h - self.borde * 2 Gdk.cairo_set_source_color(contexto, get_color("NEGRO")) rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = (self.borde, self.borde, ww, hh) Gdk.cairo_rectangle(contexto, rect) contexto.fill() # Relleno de la barra segun progreso Gdk.cairo_set_source_color(contexto, get_color("NARANJA")) rect = Gdk.Rectangle() ximage = int(self.get_adjustment().get_value() * ww / 100) rect.x, rect.y, rect.width, rect.height = (self.borde, self.borde, ximage, hh) Gdk.cairo_rectangle(contexto, rect) contexto.fill() # La Imagen imgw, imgh = (self.pixbuf.get_width(), self.pixbuf.get_height()) imgx = ximage imgy = float(self.borde + hh / 2 - imgh / 2) Gdk.cairo_set_source_pixbuf(contexto, self.pixbuf, imgx, imgy) contexto.paint() return True
def do_draw(self, contexto): """ Dibuja el estado de la barra de progreso. """ rect = self.get_allocation() w, h = (rect.width, rect.height) # Relleno de la barra ww = w - self.borde * 2 hh = 10 #h - self.borde * 2 Gdk.cairo_set_source_color(contexto, get_color("NEGRO")) rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = ( self.borde, self.borde, ww, hh) Gdk.cairo_rectangle(contexto, rect) contexto.fill() # Relleno de la barra segun progreso Gdk.cairo_set_source_color(contexto, get_color("NARANJA")) rect = Gdk.Rectangle() ximage = int(self.get_adjustment().get_value() * ww / 100) rect.x, rect.y, rect.width, rect.height = (self.borde, self.borde, ximage, hh) Gdk.cairo_rectangle(contexto, rect) contexto.fill() # borde del progreso Gdk.cairo_set_source_color(contexto, get_color("BLANCO")) rect = Gdk.Rectangle() rect.x, rect.y, rect.width, rect.height = ( self.borde, self.borde, ww, hh) Gdk.cairo_rectangle(contexto, rect) contexto.stroke() # La Imagen imgw, imgh = (self.pixbuf.get_width(), self.pixbuf.get_height()) imgx = ximage imgy = float(self.borde + hh / 2 - imgh / 2) Gdk.cairo_set_source_pixbuf(contexto, self.pixbuf, imgx, imgy) contexto.paint() return True
def set_background_color(c, w, h): c.save() c.rectangle(0, 0, w, h) Gdk.cairo_set_source_color(c, Gdk.color_parse('white')) c.fill() c.restore()
def set_color(c, name): Gdk.cairo_set_source_color(c, Gdk.color_parse(name))
def draw(self, cairo_ctx): if self.has_focus(): state = Gtk.StateType.PRELIGHT else: state = Gtk.StateType.NORMAL #cairo_ctx.rectangle(0, 0, self.width, self.height) #cairo_ctx.set_source_color(self.style.bg[state]) #cairo_ctx.fill_preserve() #Gdk.cairo_set_source_color(cairo_ctx, # self.get_style_context().get_color(state).to_color()) #cairo_ctx.stroke() slider_knob_width = 37.5 if self.width * 3 / 4 > 37.5 else self.width * 3 / 4 slider_knob_height = slider_knob_width * 2 slider_knob_height -= slider_knob_height % 2 slider_knob_height += 1 slider_x = self.width / 2 cairo_ctx.set_line_width(1) # slider rail Gdk.cairo_set_source_color( cairo_ctx, self.get_style_context().get_color(state).to_color()) self.slider_rail_up = slider_knob_height / 2 + (self.width - slider_knob_width) / 2 self.slider_rail_height = self.height - 2 * self.slider_rail_up cairo_ctx.move_to(slider_x, self.slider_rail_up) cairo_ctx.line_to(slider_x, self.slider_rail_height + self.slider_rail_up) cairo_ctx.stroke() # slider knob slider_y = round(self.slider_rail_up + self.slider_rail_height * (1 - self.adjustment.get_value())) lg = cairo.LinearGradient(slider_x - float(slider_knob_width) / 2, slider_y - slider_knob_height / 2, slider_x - float(slider_knob_width) / 2, slider_y + slider_knob_height / 2) slider_alpha = 1.0 lg.add_color_stop_rgba(0, 0.55, 0.55, 0.55, slider_alpha) lg.add_color_stop_rgba(0.1, 0.65, 0.65, 0.65, slider_alpha) lg.add_color_stop_rgba(0.1, 0.75, 0.75, 0.75, slider_alpha) lg.add_color_stop_rgba(0.125, 0.75, 0.75, 0.75, slider_alpha) lg.add_color_stop_rgba(0.125, 0.15, 0.15, 0.15, slider_alpha) lg.add_color_stop_rgba(0.475, 0.35, 0.35, 0.35, slider_alpha) lg.add_color_stop_rgba(0.475, 0, 0, 0, slider_alpha) lg.add_color_stop_rgba(0.525, 0, 0, 0, slider_alpha) lg.add_color_stop_rgba(0.525, 0.35, 0.35, 0.35, slider_alpha) lg.add_color_stop_rgba(0.875, 0.65, 0.65, 0.65, slider_alpha) lg.add_color_stop_rgba(0.875, 0.75, 0.75, 0.75, slider_alpha) lg.add_color_stop_rgba(0.900, 0.75, 0.75, 0.75, slider_alpha) lg.add_color_stop_rgba(0.900, 0.15, 0.15, 0.15, slider_alpha) lg.add_color_stop_rgba(1.000, 0.10, 0.10, 0.10, slider_alpha) cairo_ctx.rectangle(slider_x - float(slider_knob_width) / 2, slider_y - slider_knob_height / 2, float(slider_knob_width), slider_knob_height) Gdk.cairo_set_source_color( cairo_ctx, self.get_style_context().get_background_color(state).to_color()) cairo_ctx.fill_preserve() cairo_ctx.set_source(lg) cairo_ctx.fill()
def do_render(self, cr, widget, background_area, cell_area, flags): vw_tags = self.__count_viewable_tags() count = 0 # Select source if self.tag_list is not None: tags = self.tag_list elif self.tag is not None: tags = [self.tag] else: return if self.config.get('dark_mode'): symbolic_color = Gdk.RGBA(0.9, 0.9, 0.9, 1) else: symbolic_color = Gdk.RGBA(0, 0, 0, 1) # Drawing context gdkcontext = cr gdkcontext.set_antialias(cairo.ANTIALIAS_NONE) # Coordinates of the origin point x_align = self.get_property("xalign") y_align = self.get_property("yalign") padding = self.PADDING orig_x = cell_area.x + int((cell_area.width - 16 * vw_tags - padding * 2 * (vw_tags - 1)) * x_align) orig_y = cell_area.y + int((cell_area.height - 16) * y_align) # We draw the icons & squares for my_tag in tags: my_tag_icon = my_tag.get_attribute("icon") my_tag_color = my_tag.get_attribute("color") rect_x = orig_x + self.PADDING * 2 * count + 16 * count rect_y = orig_y if my_tag_icon: if my_tag_icon in self.SYMBOLIC_ICONS: icon_theme = Gtk.IconTheme.get_default() info = icon_theme.lookup_icon(my_tag_icon, 16, 0) load = info.load_symbolic(symbolic_color) pixbuf = load[0] Gdk.cairo_set_source_pixbuf(gdkcontext, pixbuf, rect_x, rect_y) gdkcontext.paint() count += 1 else: layout = PangoCairo.create_layout(cr) layout.set_markup(my_tag_icon, -1) cr.move_to(rect_x - 2, rect_y - 1) PangoCairo.show_layout(cr, layout) count += 1 elif my_tag_color: # Draw rounded rectangle my_color = Gdk.color_parse(my_tag_color) Gdk.cairo_set_source_color(gdkcontext, my_color) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.fill() count += 1 # Outer line Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.20)) gdkcontext.set_line_width(1.0) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.stroke() if self.tag and my_tag: my_tag_icon = my_tag.get_attribute("icon") my_tag_color = my_tag.get_attribute("color") if not my_tag_icon and not my_tag_color: # Draw rounded rectangle Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0.95, 0.95, 0.95, 1)) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.fill() # Outer line Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.20)) gdkcontext.set_line_width(1.0) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.stroke()
def do_render(self, cr, widget, background_area, cell_area, flags): vw_tags = self.__count_viewable_tags() count = 0 # Select source if self.tag_list is not None: tags = self.tag_list elif self.tag is not None: tags = [self.tag] else: return # Drawing context gdkcontext = cr gdkcontext.set_antialias(cairo.ANTIALIAS_NONE) # Coordinates of the origin point x_align = self.get_property("xalign") y_align = self.get_property("yalign") padding = self.PADDING orig_x = cell_area.x + int((cell_area.width - 16 * vw_tags - padding * 2 * (vw_tags - 1)) * x_align) orig_y = cell_area.y + int((cell_area.height - 16) * y_align) # We draw the icons & squares for my_tag in tags: my_tag_icon = my_tag.get_attribute("icon") my_tag_color = my_tag.get_attribute("color") rect_x = orig_x + self.PADDING * 2 * count + 16 * count rect_y = orig_y if my_tag_icon: try: pixbuf = Gtk.IconTheme.get_default().load_icon( my_tag_icon, 16, 0) Gdk.cairo_set_source_pixbuf(gdkcontext, pixbuf, rect_x, rect_y) gdkcontext.paint() count = count + 1 except GLib.GError: # In some rare cases an icon could not be found # (e.g. wrong set icon path, missing icon) # Raising an exception breaks UI and signal catcher badly Log.error("Can't load icon '%s'" % my_tag_icon) elif my_tag_color: # Draw rounded rectangle my_color = Gdk.color_parse(my_tag_color) Gdk.cairo_set_source_color(gdkcontext, my_color) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.fill() count = count + 1 # Outer line Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.20)) gdkcontext.set_line_width(1.0) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.stroke() if self.tag and my_tag: my_tag_icon = my_tag.get_attribute("icon") my_tag_color = my_tag.get_attribute("color") if not my_tag_icon and not my_tag_color: # Draw rounded rectangle Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0.95, 0.95, 0.95, 1)) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.fill() # Outer line Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.20)) gdkcontext.set_line_width(1.0) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.stroke()
def do_render(self, cr, widget, background_area, cell_area, flags): vw_tags = self.__count_viewable_tags() count = 0 # Select source if self.tag_list is not None: tags = self.tag_list elif self.tag is not None: tags = [self.tag] else: return # Drawing context gdkcontext = cr gdkcontext.set_antialias(cairo.ANTIALIAS_NONE) # Coordinates of the origin point x_align = self.get_property("xalign") y_align = self.get_property("yalign") padding = self.PADDING orig_x = cell_area.x + int((cell_area.width - 16 * vw_tags - padding * 2 * (vw_tags - 1)) * x_align) orig_y = cell_area.y + int((cell_area.height - 16) * y_align) # We draw the icons & squares for my_tag in tags: my_tag_icon = my_tag.get_attribute("icon") my_tag_color = my_tag.get_attribute("color") rect_x = orig_x + self.PADDING * 2 * count + 16 * count rect_y = orig_y if my_tag_icon: try: pixbuf = Gtk.IconTheme.get_default().load_icon( my_tag_icon, 16, 0) Gdk.cairo_set_source_pixbuf(gdkcontext, pixbuf, rect_x, rect_y) gdkcontext.paint() count = count + 1 except GLib.GError: # In some rare cases an icon could not be found # (e.g. wrong set icon path, missing icon) # Raising an exception breaks UI and signal catcher badly log.error(f"Can't load icon '{my_tag_icon}'") elif my_tag_color: # Draw rounded rectangle my_color = Gdk.color_parse(my_tag_color) Gdk.cairo_set_source_color(gdkcontext, my_color) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.fill() count = count + 1 # Outer line Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.20)) gdkcontext.set_line_width(1.0) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.stroke() if self.tag and my_tag: my_tag_icon = my_tag.get_attribute("icon") my_tag_color = my_tag.get_attribute("color") if not my_tag_icon and not my_tag_color: # Draw rounded rectangle Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0.95, 0.95, 0.95, 1)) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.fill() # Outer line Gdk.cairo_set_source_rgba(gdkcontext, Gdk.RGBA(0, 0, 0, 0.20)) gdkcontext.set_line_width(1.0) self.__roundedrec(gdkcontext, rect_x, rect_y, 16, 16, 8) gdkcontext.stroke()