def get_cdr_color(color): """ Converts color list to CDR colorspace and color valbytes """ cs = CDR_CS_MATSH[uc2const.COLOR_RGB] valbytes = '\x05\x05\x00\x00\x00\x00' if not color[0] == uc2const.COLOR_SPOT: cs = CDR_CS_MATSH[color[0]] if color[0] == uc2const.COLOR_RGB: r, g, b = cms.val_255(color[1]) valbytes += struct.pack('<3B', b, g, r) + '\x00' elif color[0] == uc2const.COLOR_CMYK: valbytes += struct.pack('<4B', *cms.val_100(color[1])) elif color[0] == uc2const.COLOR_GRAY: valbytes += struct.pack('<B', *cms.val_255(color[1])) valbytes += '\xeb\x54\x01' if color[0] == uc2const.COLOR_LAB: valbytes = '\x0d\x00\x00\x00\x00\x00' valbytes += struct.pack('<3B', *cms.val_255(color[1])) + '\xcc' else: if color[1][1]: cs = CDR_CS_MATSH[uc2const.COLOR_CMYK] valbytes += struct.pack('<4B', *cms.val_100(color[1])) else: r, g, b = cms.val_255(color[1][0]) valbytes += struct.pack('<3B', b, g, r) + '\x00' return cs, valbytes
def get_cdr_color(color): """ Converts color list to CDR colorspace and color valbytes """ cs = CDR_CS_MATSH[uc2const.COLOR_RGB] valbytes = b'\x05\x05\x00\x00\x00\x00' if not color[0] == uc2const.COLOR_SPOT: cs = CDR_CS_MATSH[color[0]] if color[0] == uc2const.COLOR_RGB: r, g, b = cms.val_255(color[1]) valbytes += struct.pack('<3B', b, g, r) + b'\x00' elif color[0] == uc2const.COLOR_CMYK: valbytes += struct.pack('<4B', *cms.val_100(color[1])) elif color[0] == uc2const.COLOR_GRAY: valbytes += struct.pack('<B', *cms.val_255(color[1])) valbytes += b'\xeb\x54\x01' if color[0] == uc2const.COLOR_LAB: valbytes = b'\x0d\x00\x00\x00\x00\x00' valbytes += struct.pack('<3B', *cms.val_255(color[1])) + b'\xcc' else: if color[1][1]: cs = CDR_CS_MATSH[uc2const.COLOR_CMYK] valbytes += struct.pack('<4B', *cms.val_100(color[1])) else: r, g, b = cms.val_255(color[1][0]) valbytes += struct.pack('<3B', b, g, r) + b'\x00' return cs, valbytes
def paint(self): w, h = self.dc.get_size() fg = cms.val_255(config.ruler_fg) bg = cms.val_255(config.ruler_bg) self.dc.set_stroke(None) self.dc.set_fill(bg) self.dc.draw_rect(0, 0, w, h) self.dc.draw_linear_gradient((0, h - 1, w * 2, 1), bg, fg) self.dc.draw_linear_gradient((w - 1, 0, 1, h * 2), bg, fg, True) shift = (w - 19) / 2 + 1 self.dc.draw_bitmap(BITMAPS[self.origin], shift, shift)
def paint(self): color1 = self._composite_color(self.color) color2 = self._composite_color(self.color, color1) self.set_stroke(cms.val_255(color1), 1.0) for item in self.vgrid: self.draw_line(item, 0, item, 200) for item in self.hgrid: self.draw_line(0, item, 200, item) self.set_stroke(cms.val_255(color2), 1.0) self.draw_line(self.vgrid[2], 0, self.vgrid[2], 200) self.draw_line(0, self.hgrid[3], 200, self.hgrid[3])
def paint(self): w, h = self.dc.get_size() fg = cms.val_255(config.ruler_fg) bg = cms.val_255(config.ruler_bg) self.dc.set_stroke(None) self.dc.set_fill(bg) self.dc.draw_rect(0, 0, w, h) self.dc.draw_linear_gradient((0, h - 1, w * 2, 1), bg, fg) self.dc.draw_linear_gradient((w - 1, 0, 1, h * 2), bg, fg, True) self.dc.set_stroke(fg) shift = (w - 19) / 2 + 1 for x0, y0, x1, y1 in CORNER[self.origin]: self.dc.draw_line(x0 + shift, y0 + shift, x1 + shift, y1 + shift)
def _on_paint(self, event): w, h = self.panel.GetSize() dc = wal.get_dc(self.panel) dc.SetPen(wx.NullPen) dc.SetBrush(wx.Brush(wx.Colour(*cms.val_255(config.ruler_bg)))) dc.DrawRectangle(0, 0, w, h) color = cms.val_255(config.ruler_fg) grad_start = wx.Colour(*(color + [255])) grad_end = wx.Colour(*(color + [0])) rect = wx.Rect(0, h - 1, w * 2, 1) dc.GradientFillLinear(rect, grad_start, grad_end, nDirection=wx.WEST) rect = wx.Rect(w - 1, 0, 1, h * 2) dc.GradientFillLinear(rect, grad_start, grad_end, nDirection=wx.NORTH) shift = (w - 19) / 2 + 1 dc.DrawBitmap(BITMAPS[self.origin], shift, shift, True)
def paint(self): w, h = self.get_size() self.set_stroke() self.set_fill(cms.val_255(config.ruler_bg)) self.draw_rect(0, 0, w, h) stop_clr = cms.val_255(config.ruler_fg) + [255] start_clr = cms.val_255(config.ruler_fg) + [0] rect = (0, h - 1, w * 2, 1) self.gc_draw_linear_gradient(rect, start_clr, stop_clr) rect = (w - 1, 0, 1, h * 2) self.gc_draw_linear_gradient(rect, start_clr, stop_clr, True) shift = (w - 19) / 2 + 1 self.draw_bitmap(self.icon, shift, shift)
def convert_duotone_to_image(cms, pixmap, cs=None): update_image(cms, pixmap) fg = pixmap.style[3][0] bg = pixmap.style[3][1] raw_image = Image.open(StringIO(b64decode(pixmap.bitmap))) raw_image.load() fg_img = bg_img = None fg_cs = bg_cs = uc2const.IMAGE_RGB if pixmap.colorspace == uc2const.IMAGE_MONO: raw_image = raw_image.convert(IMAGE_GRAY) size = raw_image.size if cs == uc2const.IMAGE_CMYK: if fg: fg = tuple(cms.get_cmyk_color255(fg)) if bg: bg = tuple(cms.get_cmyk_color255(bg)) fg_cs = bg_cs = cs elif cs == uc2const.IMAGE_RGB: if fg: fg = tuple(cms.get_rgb_color255(fg)) if bg: bg = tuple(cms.get_rgb_color255(bg)) fg_cs = bg_cs = cs else: if fg: fg_cs = fg[0] fg = tuple(val_255(cms.get_color(fg, fg_cs)[1])) if bg: bg_cs = bg[0] bg = tuple(val_255(cms.get_color(bg, bg_cs)[1])) if fg: fg_img = Image.new(fg_cs, size, fg) if bg: bg_img = Image.new(bg_cs, size, bg) fg_alpha = ImageOps.invert(raw_image) bg_alpha = raw_image if pixmap.alpha_channel: alpha_chnl = Image.open(StringIO(b64decode(pixmap.alpha_channel))) alpha_chnl.load() alpha_chnl = ImageOps.invert(alpha_chnl) comp_img = Image.new('L', size, 0) fg_alpha.paste(comp_img, (0, 0), alpha_chnl) bg_alpha.paste(comp_img, (0, 0), alpha_chnl) return (fg_img, fg_alpha), (bg_img, bg_alpha)
def paint(self): color1 = self._composite_color(self.color) color2 = self._composite_color(self.color, color1) self.set_stroke(cms.val_255(color1), 1.0) for item in self.vgrid: self.draw_line(item, 0, item, WIDTH) for item in self.hgrid: self.draw_line(0, item, WIDTH, item) self.draw_line(0, self.get_size()[1] - 1, 200, self.get_size()[1] - 1) self.set_stroke(cms.val_255(color2), 1.0) self.draw_line(self.vgrid[2], 0, self.vgrid[2], WIDTH) self.draw_line(0, self.hgrid[3], WIDTH, self.hgrid[3]) self.set_stroke(cms.val_255(color2), 1.0) self.set_fill(None) w, h = self.get_size() self.draw_rect(0, 0, w, h)
def _on_paint(self, event): w, h = self.panel.GetSize() pdc = wx.PaintDC(self.panel) try:dc = wx.GCDC(pdc) except:dc = pdc pdc.BeginDrawing() dc.BeginDrawing() dc.SetPen(wx.NullPen) dc.SetBrush(wx.Brush(wx.Colour(*cms.val_255(config.ruler_bg)))) dc.DrawRectangle(0, 0, w, h) color = cms.val_255(config.ruler_fg) grad_start = wx.Colour(*(color + [255])) grad_end = wx.Colour(*(color + [0])) rect = wx.Rect(0, h - 1, w * 2, 1) dc.GradientFillLinear(rect, grad_start, grad_end, nDirection=wx.WEST) rect = wx.Rect(w - 1, 0, 1, h * 2) dc.GradientFillLinear(rect, grad_start, grad_end, nDirection=wx.NORTH) shift = (w - 19) / 2 + 1 dc.DrawBitmap(BITMAPS[self.origin], shift, shift, True)
def paint(self): w, h = self.get_size() self.set_stroke() self.set_fill(cms.val_255(config.ruler_bg)) self.draw_rect(0, 0, w, h) stop_clr = cms.val_255(config.ruler_fg) + [255] start_clr = cms.val_255(config.ruler_fg) + [0] rect = (0, h - 1, w * 2, 1) self.gc_draw_linear_gradient(rect, start_clr, stop_clr) rect = (w - 1, 0, 1, h * 2) self.gc_draw_linear_gradient(rect, start_clr, stop_clr, True) shift = (w - 19) / 2 + 1 self.set_stroke(cms.val_255(config.ruler_fg)) for x0, y0, x1, y1 in CORNER: self.draw_line(x0 + shift, y0 + shift, x1 + shift, y1 + shift)
def __init__(self, parent, colors=COLORS, size=(25, 25), onclick=None): wal.VPanel.__init__(self, parent) self.grid = wal.GridPanel(self, 1, len(colors), 1, 1) self.cells = [] for item in colors: color = cms.val_255(cms.hexcolor_to_rgb(item)) cell = ColorCell(self, color, size, onclick) self.grid.pack(cell) self.cells.append(cell) self.pack(self.grid, padding_all=1) self.set_enable(True)
def __init__(self, parent, colors=COLORS, size=(25, 25), onclick=None): wal.VPanel.__init__(self, parent) self.grid = wal.GridPanel(self, 1 , len(colors), 1 , 1) self.cells = [] for item in colors: color = cms.val_255(cms.hexcolor_to_rgb(item)) cell = ColorCell(self, color, size, onclick) self.grid.pack(cell) self.cells.append(cell) self.pack(self.grid, padding_all=1) self.set_enable(True)
def convert_duotone_to_image(self, cms, cs=None): fg = self.pixmap.style[3][0] bg = self.pixmap.style[3][1] raw_image = self.bitmap fg_cs = bg_cs = uc2const.IMAGE_RGB if self.bitmap.mode == uc2const.IMAGE_MONO: raw_image = raw_image.convert(uc2const.IMAGE_GRAY) size = raw_image.size if cs == uc2const.IMAGE_CMYK: fg = tuple(cms.get_cmyk_color255(fg)) if fg else () bg = tuple(cms.get_cmyk_color255(bg)) if bg else () fg_cs = bg_cs = cs elif cs == uc2const.IMAGE_RGB: fg = tuple(cms.get_rgb_color255(fg)) if fg else () bg = tuple(cms.get_rgb_color255(bg)) if bg else () fg_cs = bg_cs = cs else: if fg: fg_cs = fg[0] fg = tuple(val_255(cms.get_color(fg, fg_cs)[1])) if bg: bg_cs = bg[0] bg = tuple(val_255(cms.get_color(bg, bg_cs)[1])) fg_img = Image.new(fg_cs, size, fg) if fg else None bg_img = Image.new(bg_cs, size, bg) if bg else None fg_alpha = ImageOps.invert(raw_image) if fg else None bg_alpha = raw_image if bg else None if self.alpha and any((fg, bg)): alpha_chnl = ImageOps.invert(self.alpha) comp_img = Image.new('L', size, 0) if fg: fg_alpha.paste(comp_img, (0, 0), alpha_chnl) if bg: bg_alpha.paste(comp_img, (0, 0), alpha_chnl) return (fg_img, fg_alpha) if fg else None, \ (bg_img, bg_alpha) if bg else None
def paint(self): self.set_stroke(cms.val_255(self.color), 1.0, config.guide_line_dash) w, h = self.get_size() for item in (0.4, 0.5, 0.8): self.draw_line(int(item * w), 0, int(item * w), h) for item in (0.3, 0.7): self.draw_line(0, int(item * h), w, int(item * h)) self.set_stroke(wal.UI_COLORS['hover_solid_border']) self.set_fill(None) self.draw_rect(0, 0, w, h)
def update(self): self.handles = {} self.clear_transforms() config = self.app.config profiles = [ config.cms_rgb_profile, config.cms_cmyk_profile, config.cms_lab_profile, config.cms_gray_profile, config.cms_display_profile ] profile_dicts = [ config.cms_rgb_profiles, config.cms_cmyk_profiles, config.cms_lab_profiles, config.cms_gray_profiles, config.cms_display_profiles ] index = 0 profile_dir = self.app.appdata.app_color_profile_dir for item in CS + [ COLOR_DISPLAY, ]: path = None profile = profiles[index] if profile and profile in profile_dicts[index]: profile_filename = profile_dicts[index][profile] path = os.path.join(profile_dir, profile_filename) if path: path = fsutils.get_sys_path(path) self.handles[item] = libcms.cms_open_profile_from_file(path) else: profile_dir = self.app.appdata.app_color_profile_dir filename = 'built-in_%s.icm' % item path = os.path.join(profile_dir, filename) path = fsutils.get_sys_path(path) self.handles[item] = libcms.cms_open_profile_from_file(path) index += 1 self.use_cms = config.cms_use self.use_display_profile = config.cms_use_display_profile self.rgb_intent = config.cms_rgb_intent self.cmyk_intent = config.cms_cmyk_intent self.flags = config.cms_flags self.proofing = config.cms_proofing self.alarm_codes = config.cms_alarmcodes self.gamutcheck = config.cms_gamutcheck if self.gamutcheck: libcms.cms_set_alarm_codes(*val_255(self.alarm_codes)) self.proof_for_spot = config.cms_proof_for_spot if self.proofing: self.flags = self.flags | uc2const.cmsFLAGS_SOFTPROOFING if self.gamutcheck: self.flags = self.flags | uc2const.cmsFLAGS_GAMUTCHECK if config.cms_bpc_flag: self.flags = self.flags | uc2const.cmsFLAGS_BLACKPOINTCOMPENSATION if config.cms_bpt_flag: self.flags = self.flags | uc2const.cmsFLAGS_PRESERVEBLACK
def paint(self): self.set_stroke(cms.val_255(self.color), 1.0, config.guide_line_dash) w, h = self.get_size() for item in (0.4, 0.5, 0.8): self.draw_line(int(item * w), 0, int(item * w), h) for item in (0.3, 0.7): self.draw_line(0, int(item * h), w, int(item * h)) if wal.is_msw(): self.set_stroke(wal.GRAY) self.set_fill() self.draw_rect(0, 0, w, h)
def convert_duotone_to_image(cms, pixmap, cs=None): update_image(cms, pixmap) fg = pixmap.style[3][0] bg = pixmap.style[3][1] raw_image = Image.open(StringIO(b64decode(pixmap.bitmap))) raw_image.load() fg_img = None bg_img = None if pixmap.colorspace == uc2const.IMAGE_MONO: raw_image = raw_image.convert(IMAGE_GRAY) size = raw_image.size if cs == uc2const.IMAGE_CMYK: if fg:fg = tuple(cms.get_cmyk_color255(fg)) if bg:bg = tuple(cms.get_cmyk_color255(bg)) fg_cs = bg_cs = cs elif cs == uc2const.IMAGE_RGB: if fg:fg = tuple(cms.get_rgb_color255(fg)) if bg:bg = tuple(cms.get_rgb_color255(bg)) fg_cs = bg_cs = cs else: if fg: fg_cs = fg[0] fg = tuple(val_255(cms.get_color(fg, fg_cs)[1])) if bg: bg_cs = bg[0] bg = tuple(val_255(cms.get_color(bg, bg_cs)[1])) if fg:fg_img = Image.new(fg_cs, size, fg) if bg:bg_img = Image.new(bg_cs, size, bg) fg_alpha = ImageOps.invert(raw_image) bg_alpha = raw_image if pixmap.alpha_channel: alpha_chnl = Image.open(StringIO(b64decode(pixmap.alpha_channel))) alpha_chnl.load() alpha_chnl = ImageOps.invert(alpha_chnl) comp_img = Image.new('L', size, 0) fg_alpha.paste(comp_img, (0, 0), alpha_chnl) bg_alpha.paste(comp_img, (0, 0), alpha_chnl) return ((fg_img, fg_alpha), (bg_img, bg_alpha))
def update(self): self.handles = {} self.clear_transforms() profiles = [config.cms_rgb_profile, config.cms_cmyk_profile, config.cms_lab_profile, config.cms_gray_profile, config.cms_display_profile] profile_dicts = [config.cms_rgb_profiles, config.cms_cmyk_profiles, config.cms_lab_profiles, config.cms_gray_profiles, config.cms_display_profiles] index = 0 profile_dir = self.app.appdata.app_color_profile_dir for item in CS + [COLOR_DISPLAY, ]: path = None profile = profiles[index] if profile and profile_dicts[index].has_key(profile): profile_filename = profile_dicts[index][profile] path = os.path.join(profile_dir, profile_filename) if path: self.handles[item] = libcms.cms_open_profile_from_file(path) else: profile_dir = self.app.appdata.app_color_profile_dir filename = 'built-in_%s.icm' % item path = os.path.join(profile_dir, filename) self.handles[item] = libcms.cms_open_profile_from_file(path) index += 1 self.use_cms = config.cms_use self.use_display_profile = config.cms_use_display_profile self.rgb_intent = config.cms_rgb_intent self.cmyk_intent = config.cms_cmyk_intent self.flags = config.cms_flags self.proofing = config.cms_proofing self.alarm_codes = config.cms_alarmcodes self.gamutcheck = config.cms_gamutcheck if self.gamutcheck: libcms.cms_set_alarm_codes(*val_255(self.alarm_codes)) self.proof_for_spot = config.cms_proof_for_spot if self.proofing: self.flags = self.flags | uc2const.cmsFLAGS_SOFTPROOFING if self.gamutcheck: self.flags = self.flags | uc2const.cmsFLAGS_GAMUTCHECK if config.cms_bpc_flag: self.flags = self.flags | uc2const.cmsFLAGS_BLACKPOINTCOMPENSATION if config.cms_bpt_flag: self.flags = self.flags | uc2const.cmsFLAGS_PRESERVEBLACK
def __init__(self, parent, bg): wal.HPanel.__init__(self, parent) self.set_bg(wal.UI_COLORS['pressed_border'][:3]) self.pack((1, SIZE)) panel = wal.VPanel(self) panel.set_bg(wal.UI_COLORS['bg'][:3]) panel.pack(Spacer(panel)) self.canvas = ImageCanvas(panel, cms.val_255(bg)) panel.pack(self.canvas, fill=True, expand=True) info_panel = wal.VPanel(panel) info_panel.set_bg(wal.WHITE) self.info = wal.Label(info_panel, '---') info_panel.pack(self.info, padding_all=2) panel.pack(Spacer(panel)) panel.pack(info_panel, fill=True) panel.pack(Spacer(panel)) self.pack(panel, fill=True) self.pack((1, SIZE + info_panel.get_size()[1] + 3))
def __init__(self, parent, bg): wal.HPanel.__init__(self, parent) self.set_bg(wal.UI_COLORS["pressed_border"][:3]) self.pack((1, SIZE)) panel = wal.VPanel(self) panel.set_bg(wal.UI_COLORS["bg"][:3]) panel.pack(Spacer(panel)) self.canvas = ImageCanvas(panel, cms.val_255(bg)) panel.pack(self.canvas, fill=True, expand=True) info_panel = wal.VPanel(panel) info_panel.set_bg(wal.WHITE) self.info = wal.Label(info_panel, "---") info_panel.pack(self.info, padding_all=2) panel.pack(Spacer(panel)) panel.pack(info_panel, fill=True) panel.pack(Spacer(panel)) self.pack(panel, fill=True) self.pack((1, SIZE + info_panel.get_size()[1] + 3))
def generate_fontsample_cache(fonts): w = config.font_preview_width fontsize = config.font_preview_size color = cms.val_255(config.font_preview_color) text = config.font_preview_text.decode('utf-8') for item in fonts: h = libpango.get_sample_size(text, item, fontsize)[1] if not h: h = 10 LOG.warn('Incorrect font <%s>: zero font height', item) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h) ctx = cairo.Context(surface) ctx.set_source_rgb(0.0, 0.0, 0.0) ctx.set_matrix(cairo.Matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0)) ctx.set_antialias(cairo.ANTIALIAS_DEFAULT) libpango.render_sample(ctx, text, item, fontsize) ctx.fill() bmp = wal.copy_surface_to_bitmap(surface) FONTSAMPLE_CACHE.append(bmp)
def _add_color(self, color): doc_cms = self.sk2_doc.cms rclr = self.cmx_model.chunk_map['rclr'] clr = (5, 5, (0, 0, 0)) # Fallback RGB black if color[0] == uc2const.COLOR_RGB: model = cmx_const.COLOR_MODELS.index(cmx_const.CMX_RGB) palette = cmx_const.COLOR_PALETTES.index('User') vals = cms.val_255(color[1]) clr = (model, palette, vals) elif color[0] == uc2const.COLOR_CMYK: model = cmx_const.COLOR_MODELS.index(cmx_const.CMX_CMYK) palette = cmx_const.COLOR_PALETTES.index('User') vals = cms.val_100(color[1]) clr = (model, palette, vals) else: model = cmx_const.COLOR_MODELS.index(cmx_const.CMX_RGB) palette = cmx_const.COLOR_PALETTES.index('User') vals = doc_cms.get_rgb_color255(color) clr = (model, palette, vals) return rclr.add_color(clr)
def generate_fontsamples(fonts): bitmaps = [] w = config.font_preview_width fontsize = config.font_preview_size color = cms.val_255(config.font_preview_color) text = config.font_preview_text for item in fonts: h = libpango.get_sample_size(text, item, fontsize)[1] surface = cairo.ImageSurface(cairo.FORMAT_RGB24, w, h) ctx = cairo.Context(surface) ctx.set_source_rgb(0.0, 0.0, 0.0) ctx.paint() matrix = cairo.Matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0) ctx.set_matrix(matrix) ctx.set_source_rgb(1.0, 1.0, 1.0) ctx.set_antialias(cairo.ANTIALIAS_DEFAULT) libpango.render_sample(ctx, text, item, fontsize) ctx.fill() bmp = wal.copy_surface_to_bitmap(surface) bitmaps.append(wal.invert_text_bitmap(bmp, color)) return bitmaps
def generate_fontsample_cache(fonts): w = config.font_preview_width fontsize = config.font_preview_size color = cms.val_255(config.font_preview_color) text = config.font_preview_text for item in fonts: h = libpango.get_sample_size(text, item, fontsize)[1] if not h: h = 10 warn(_('incorrect font') + ' - %s' % item) surface = cairo.ImageSurface(cairo.FORMAT_RGB24, w, h) ctx = cairo.Context(surface) ctx.set_source_rgb(0.0, 0.0, 0.0) ctx.paint() matrix = cairo.Matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0) ctx.set_matrix(matrix) ctx.set_source_rgb(1.0, 1.0, 1.0) ctx.set_antialias(cairo.ANTIALIAS_DEFAULT) libpango.render_sample(ctx, text, item, fontsize) ctx.fill() bmp = wal.copy_surface_to_bitmap(surface) FONTSAMPLE_CACHE.append(wal.invert_text_bitmap(bmp, color))
def set_canvas_bg(self, color): self.canvas.set_bg(cms.val_255(color)) self.canvas.refresh()