Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/brushes/FX_blender_prev and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/brushes/FX_blender_prev differ Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/brushes/FX_blender_prev.png and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/brushes/FX_blender_prev.png differ diff -Nru mypaint-1.0.0+git20111209.545d6f8/brushlib/brush.hpp mypaint-1.0.0+git20120121.b8338d5/brushlib/brush.hpp --- mypaint-1.0.0+git20111209.545d6f8/brushlib/brush.hpp 2011-12-09 18:42:04.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/brushlib/brush.hpp 2012-01-21 01:24:50.000000000 +0000 @@ -545,7 +545,8 @@ hsv_to_rgb_float (&color_h, &color_s, &color_v); return surface->draw_dab (x, y, radius, color_h, color_s, color_v, opaque, hardness, eraser_target_alpha, states[STATE_ACTUAL_ELLIPTICAL_DAB_RATIO], states[STATE_ACTUAL_ELLIPTICAL_DAB_ANGLE], - settings_value[BRUSH_LOCK_ALPHA]); + settings_value[BRUSH_LOCK_ALPHA], + settings_value[BRUSH_COLORIZE]); } // How many dabs will be drawn between the current and the next (x, y, pressure, +dt) position? diff -Nru mypaint-1.0.0+git20111209.545d6f8/brushlib/brushsettings.py mypaint-1.0.0+git20120121.b8338d5/brushlib/brushsettings.py --- mypaint-1.0.0+git20111209.545d6f8/brushlib/brushsettings.py 2011-12-09 18:42:04.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/brushlib/brushsettings.py 2012-01-21 01:24:50.000000000 +0000 @@ -87,6 +87,7 @@ ['direction_filter', _('Direction filter'), False, 0.0, 2.0, 10.0, _("A low value will make the direction input adapt more quickly, a high value will make it smoother")], ['lock_alpha', _('Lock alpha'), False, 0.0, 0.0, 1.0, _("Do not modify the alpha channel of the layer (paint only where there is paint already)\n 0.0 normal painting\n 0.5 half of the paint gets applied normally\n 1.0 alpha channel fully locked")], + ['colorize', _('Colorize'), False, 0.0, 0.0, 1.0, _("Colorize the target layer, setting its hue and saturation from the active brush colour while retaining its value and alpha.")], ] settings_hidden = 'color_h color_s color_v'.split() diff -Nru mypaint-1.0.0+git20111209.545d6f8/brushlib/generate.py mypaint-1.0.0+git20120121.b8338d5/brushlib/generate.py --- mypaint-1.0.0+git20111209.545d6f8/brushlib/generate.py 2011-12-09 18:42:04.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/brushlib/generate.py 2012-01-21 01:24:50.000000000 +0000 @@ -1,4 +1,3 @@ -#!/usr/bin/env python # brushlib - The MyPaint Brush Library # Copyright (C) 2007-2008 Martin Renold # diff -Nru mypaint-1.0.0+git20111209.545d6f8/brushlib/surface.hpp mypaint-1.0.0+git20120121.b8338d5/brushlib/surface.hpp --- mypaint-1.0.0+git20111209.545d6f8/brushlib/surface.hpp 2011-12-09 18:42:04.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/brushlib/surface.hpp 2012-01-21 01:24:50.000000000 +0000 @@ -26,7 +26,8 @@ float opaque, float hardness = 0.5, float alpha_eraser = 1.0, float aspect_ratio = 1.0, float angle = 0.0, - float lock_alpha = 0.0 + float lock_alpha = 0.0, + float colorize = 0.0 ) = 0; virtual void get_color (float x, float y, diff -Nru mypaint-1.0.0+git20111209.545d6f8/debian/changelog mypaint-1.0.0+git20120121.b8338d5/debian/changelog --- mypaint-1.0.0+git20111209.545d6f8/debian/changelog 2011-12-09 18:54:49.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/debian/changelog 2012-01-21 01:35:01.000000000 +0000 @@ -1,4 +1,30 @@ -mypaint (1.0.0+git20111209.545d6f8-1ppa1~natty1) natty; urgency=low +mypaint (1.0.0+git20120121.b8338d5-1ppa1~natty1) natty; urgency=low + + * View>Fit command. + * New colorise mode. + * Zoom feedback overlay. + * Chinese Traditional and Japanese translation updates. + * Various bugfixes. + * Changes since 545d6f8: + - b8338d5 i18n: update Japanese translation + - b177a40 overlay: rounded text box, prefix, longer fades + - c97b5e6 fix reference counting + - 2258511 feedback/overlays: begin categorizing, add toggles + - 619789d overlays: api for showing info on tdws + - c849d04 drawwindow: pass unbound button presses to the tdw + - 964927c scratchpad: update icons, fix icon sizes + - 3cd2067 i18n: bugfix in zh_TW + - 98caa67 added View>Fit command + - f9f7e07 colorize: add brushmodifier action & toolbar entry + - 7014f2e brushlib: colorize brush blendmode with weighting + - 9311f2f tiledsurface: rm empty tiles only at end + - ab1c617 move layer: fix to prevent tiledict overgrowth + - 4a06eae minor "scons install" stuff + - 37da298 i18n: update Chinese Traditional (zh_TW) + + -- Andrew Chadwick Sat, 21 Jan 2012 01:24:59 +0000 + +mypaint (1.0.0+git20111209.545d6f8-1ppa1) lucid; urgency=low * Fixes some really annoying exceptions that crept in post-1.0.0. Oops. * Allow the current layer to be moved around. Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/16x16/actions/mypaint-brush-blend-mode-colorize.png and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/16x16/actions/mypaint-brush-blend-mode-colorize.png differ Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/16x16/actions/mypaint-tool-scratchpad.png and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/16x16/actions/mypaint-tool-scratchpad.png differ Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/22x22/actions/mypaint-brush-blend-mode-colorize.png and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/22x22/actions/mypaint-brush-blend-mode-colorize.png differ Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/22x22/actions/mypaint-tool-scratchpad.png and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/22x22/actions/mypaint-tool-scratchpad.png differ Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/24x24/actions/mypaint-brush-blend-mode-colorize.png and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/24x24/actions/mypaint-brush-blend-mode-colorize.png differ Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/24x24/actions/mypaint-tool-scratchpad.png and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/24x24/actions/mypaint-tool-scratchpad.png differ Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/32x32/actions/mypaint-brush-blend-mode-colorize.png and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/32x32/actions/mypaint-brush-blend-mode-colorize.png differ Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/32x32/actions/mypaint-tool-scratchpad.png and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/32x32/actions/mypaint-tool-scratchpad.png differ Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/48x48/actions/mypaint-brush-blend-mode-colorize.png and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/48x48/actions/mypaint-brush-blend-mode-colorize.png differ Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/48x48/actions/mypaint-tool-scratchpad.png and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/48x48/actions/mypaint-tool-scratchpad.png differ diff -Nru mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/scalable/actions/mypaint-brush-blend-mode-colorize.svg mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/scalable/actions/mypaint-brush-blend-mode-colorize.svg --- mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/scalable/actions/mypaint-brush-blend-mode-colorize.svg 1970-01-01 00:00:00.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/scalable/actions/mypaint-brush-blend-mode-colorize.svg 2012-01-21 01:24:50.000000000 +0000 @@ -0,0 +1,538 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/scalable/actions/mypaint-tool-scratchpad.svg mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/scalable/actions/mypaint-tool-scratchpad.svg --- mypaint-1.0.0+git20111209.545d6f8/desktop/icons/hicolor/scalable/actions/mypaint-tool-scratchpad.svg 2011-12-09 18:42:04.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/desktop/icons/hicolor/scalable/actions/mypaint-tool-scratchpad.svg 2012-01-21 01:24:50.000000000 +0000 @@ -8,285 +8,721 @@ xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="48px" - height="48px" - id="svg12535" version="1.1" - inkscape:version="0.48.1 r9760" - sodipodi:docname="New document 18"> + width="48" + height="48" + id="svg2985" + style="enable-background:new"> + id="defs2987"> + + + + + + + + + + + + + + + + + + + cx="605.71429" + cy="486.64789" + r="117.14286" + fx="605.71429" + fy="486.64789" + id="radialGradient6717" + xlink:href="#linearGradient5060" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" /> + id="linearGradient5060"> + + + + + + + + + + offset="1" /> + + - - - - + id="stop2875-9" + style="stop-color:#939393;stop-opacity:1" + offset="0" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cx="605.71429" + cy="486.64789" + r="117.14286" + fx="605.71429" + fy="486.64789" + id="radialGradient5435" + xlink:href="#linearGradient5060-1" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)" /> + + + + + id="linearGradient2855-9-9-15"> + + offset="1" /> + + + id="stop2875-9-7-1" + style="stop-color:#939393;stop-opacity:1" + offset="0" /> + + + + + gradientTransform="matrix(0.55271409,0,0,0.67158434,106.52561,15.230737)" /> + x1="21.043484" + y1="42.83337" + x2="14.283642" + y2="6.8333683" + id="linearGradient5875" + xlink:href="#linearGradient2855-9-9-15" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.62891669,0,0,0.52312202,103.05491,12.168616)" /> + + + + id="stop2857-9-9-50-4" + style="stop-color:#dfdfdf;stop-opacity:1" + offset="0" /> + id="stop2859-5-2-1-0" + style="stop-color:#ffffff;stop-opacity:1" + offset="1" /> + gradientTransform="matrix(0.55271409,0,0,0.52312202,103.52561,12.168616)" /> + id="linearGradient2873-9-0-7-4"> + id="stop2875-9-7-1-6" + style="stop-color:#939393;stop-opacity:1" + offset="0" /> + id="stop2877-3-3-3-1" + style="stop-color:#424242;stop-opacity:1" + offset="1" /> + gradientTransform="matrix(0.55271409,0,0,0.67158434,105.52561,15.230737)" /> + id="linearGradient2919-0-7-1"> + id="stop2921-7-6-8" + style="stop-color:#a3a4a0;stop-opacity:1" + offset="0" /> + id="stop2923-2-4-1" + style="stop-color:#888a85;stop-opacity:1" + offset="1" /> - - - - - - - - - + + + + + - - - + cx="605.71429" + cy="486.64789" + r="117.14286" + fx="605.71429" + fy="486.64789" + id="radialGradient5855-0" + xlink:href="#linearGradient5060-1-5-9" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.774389,0,0,1.5219821,-1891.633,-708.72838)" /> + + + + gradientTransform="matrix(-2.774389,0,0,1.5219821,112.7623,-708.72838)" /> + x1="21.043484" + y1="42.83337" + x2="14.283642" + y2="6.8333683" + id="linearGradient5875-1-6" + xlink:href="#linearGradient2855-9-9-15-1-0" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.62891669,0,0,0.52312202,102.05491,12.168616)" /> + + id="stop2857-9-9-50-4-4" + style="stop-color:#dfdfdf;stop-opacity:1" + offset="0" /> + id="stop2859-5-2-1-0-6" + style="stop-color:#ffffff;stop-opacity:1" + offset="1" /> + gradientTransform="matrix(0.55271409,0,0,0.52312202,103.52561,12.168616)" /> + id="linearGradient2873-9-0-7-4-8"> + id="stop2875-9-7-1-6-5" + style="stop-color:#939393;stop-opacity:1" + offset="0" /> + id="stop2877-3-3-3-1-3" + style="stop-color:#424242;stop-opacity:1" + offset="1" /> + gradientTransform="matrix(0.55271409,0,0,0.67158434,105.52561,15.230737)" /> + id="linearGradient2919-0-7-1-5"> + id="stop2921-7-6-8-2" + style="stop-color:#a3a4a0;stop-opacity:1" + offset="0" /> + id="stop2923-2-4-1-0" + style="stop-color:#888a85;stop-opacity:1" + offset="1" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + - + id="metadata2990"> @@ -294,100 +730,186 @@ + + + + + + + + + + + + style="display:inline"> + id="g4612"> + transform="matrix(0.02417561,0,0,0.02086758,45.12765,44.1536)" + id="g6707"> - - + width="1339.6335" + height="478.35718" + x="-1559.2523" + y="-150.69685" + id="rect6709" + style="opacity:0.40206185;color:#000000;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" /> + d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z" + id="path6711" + style="opacity:0.40206185;color:#000000;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" /> - - - - - - - - - + d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z" + id="path6713" + style="opacity:0.40206185;color:#000000;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" /> + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru mypaint-1.0.0+git20111209.545d6f8/gui/application.py mypaint-1.0.0+git20120121.b8338d5/gui/application.py --- mypaint-1.0.0+git20111209.545d6f8/gui/application.py 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/gui/application.py 2012-01-21 01:24:50.000000000 +0000 @@ -14,6 +14,8 @@ import filehandling, keyboard, brushmanager, windowing, document, layout import colorhistory, brushmodifier import stock +from overlays import LastPaintPosOverlay, ScaleOverlay + class Application: # singleton """ @@ -89,7 +91,6 @@ self.filehandler = filehandling.FileHandler(self) self.brushmodifier = brushmodifier.BrushModifier(self) - if not self.preferences.get("scratchpad.last_opened_scratchpad", None): self.preferences["scratchpad.last_opened_scratchpad"] = self.filehandler.get_scratchpad_autosave() self.scratchpad_filename = self.preferences["scratchpad.last_opened_scratchpad"] @@ -207,6 +208,8 @@ 'ui.hide_toolbar_in_fullscreen': True, 'ui.hide_subwindows_in_fullscreen': True, 'ui.parts': dict(main_toolbar=True, menubar=False), + 'ui.feedback.scale': True, + 'ui.feedback.last_pos': False, 'ui.toolbar_items': dict( toolbar1_file=False, toolbar1_edit=True, diff -Nru mypaint-1.0.0+git20111209.545d6f8/gui/brushmodifier.py mypaint-1.0.0+git20120121.b8338d5/gui/brushmodifier.py --- mypaint-1.0.0+git20111209.545d6f8/gui/brushmodifier.py 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/gui/brushmodifier.py 2012-01-21 01:24:50.000000000 +0000 @@ -61,15 +61,20 @@ ('BlendModeLockAlpha', stock.BRUSH_BLEND_MODE_ALPHA_LOCK, None, None, _("Lock Alpha: paint over existing strokes only, using the current brush"), self.blend_mode_lock_alpha_cb), + ('BlendModeColorize', stock.BRUSH_BLEND_MODE_COLORIZE, None, + None, _("Colorize: alter Hue and Saturation with the current brush"), + self.blend_mode_colorize_cb), ] ag.add_toggle_actions(toggle_actions) self.eraser_mode = ag.get_action("BlendModeEraser") self.lock_alpha_mode = ag.get_action("BlendModeLockAlpha") self.normal_mode = ag.get_action("BlendModeNormal") + self.colorize_mode = ag.get_action("BlendModeColorize") # Each mode ToggleAction has a corresponding setting self.eraser_mode.setting_name = "eraser" self.lock_alpha_mode.setting_name = "lock_alpha" + self.colorize_mode.setting_name = "colorize" self.normal_mode.setting_name = None for action in self.action_group.list_actions(): @@ -150,6 +155,7 @@ # has become active. other_active = self.eraser_mode.get_active() other_active |= self.lock_alpha_mode.get_active() + other_active |= self.colorize_mode.get_active() if not other_active: self.normal_mode.set_active(True) @@ -215,6 +221,18 @@ self.set_override_setting("lock_alpha", lock_alpha_wanted) + def blend_mode_colorize_cb(self, action): + """Callback for the ``BlendModeColorize`` action. + """ + colorize_wanted = action.get_active() + if colorize_wanted: + self._cancel_other_modes(action) + self._push_hist(action) + else: + self._pop_hist(action) + self.set_override_setting("colorize", colorize_wanted) + + def restore_context_of_selected_brush(self): """Restores color from the unmodified base brush. diff -Nru mypaint-1.0.0+git20111209.545d6f8/gui/brushsettingswindow.py mypaint-1.0.0+git20120121.b8338d5/gui/brushsettingswindow.py --- mypaint-1.0.0+git20111209.545d6f8/gui/brushsettingswindow.py 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/gui/brushsettingswindow.py 2012-01-21 01:24:50.000000000 +0000 @@ -105,7 +105,7 @@ {'id' : 'speed', 'title' : _('Speed'), 'settings' : [ 'speed1_slowness', 'speed2_slowness', 'speed1_gamma', 'speed2_gamma', 'offset_by_speed', 'offset_by_speed_slowness' ]}, {'id' : 'tracking', 'title' : _('Tracking'),'settings' : [ 'slow_tracking', 'slow_tracking_per_dab', 'tracking_noise' ]}, {'id' : 'stroke', 'title' : _('Stroke'), 'settings' : [ 'stroke_threshold', 'stroke_duration_logarithmic', 'stroke_holdtime' ]}, - {'id' : 'color', 'title' : _('Color'), 'settings' : [ 'change_color_h', 'change_color_l', 'change_color_hsl_s', 'change_color_v', 'change_color_hsv_s', 'restore_color' ]}, + {'id' : 'color', 'title' : _('Color'), 'settings' : [ 'change_color_h', 'change_color_l', 'change_color_hsl_s', 'change_color_v', 'change_color_hsv_s', 'restore_color', 'colorize' ]}, {'id' : 'custom', 'title' : _('Custom'), 'settings' : [ 'custom_input', 'custom_input_slowness' ]} ] diff -Nru mypaint-1.0.0+git20111209.545d6f8/gui/document.py mypaint-1.0.0+git20120121.b8338d5/gui/document.py --- mypaint-1.0.0+git20111209.545d6f8/gui/document.py 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/gui/document.py 2012-01-21 01:24:50.000000000 +0000 @@ -43,9 +43,6 @@ # keep sorted for bisect default_zoom = self.app.preferences['view.default_zoom'] - self.zoomlevel = min(bisect_left(self.zoomlevel_values, default_zoom), - len(self.zoomlevel_values) - 1) - default_zoom = self.zoomlevel_values[self.zoomlevel] self.tdw.scale = default_zoom self.tdw.zoom_min = min(self.zoomlevel_values) self.tdw.zoom_max = max(self.zoomlevel_values) @@ -113,6 +110,7 @@ ('ResetView', gtk.STOCK_ZOOM_FIT, _('Reset and Center'), 'F12', _("Reset Zoom, Rotation and Mirroring, and recenter the document"), self.reset_view_cb), + ('Fit', None, _('Fit'), 'F10', None, self.reset_view_cb), ('ResetMenu', None, _('Reset')), ('ResetZoom', gtk.STOCK_ZOOM_100, _('Zoom'), None, None, self.reset_view_cb), ('ResetRotation', None, _('Rotation'), None, None, self.reset_view_cb), @@ -223,6 +221,10 @@ """ return self.tdw._input_stroke_ended_observers + @property + def input_stroke_started_observers(self): + return self.tdw._input_stroke_started_observers + # GENERIC def undo_cb(self, action): cmd = self.model.undo() @@ -479,12 +481,22 @@ else: assert 0 def zoom(self, command): - if command == 'ZoomIn' : self.zoomlevel += 1 - elif command == 'ZoomOut': self.zoomlevel -= 1 + try: + zoom_index = self.zoomlevel_values.index(self.tdw.scale) + except ValueError: + zoom_levels = self.zoomlevel_values[:] + zoom_levels.append(self.tdw.scale) + zoom_levels.sort() + zoom_index = zoom_levels.index(self.tdw.scale) + + if command == 'ZoomIn' : zoom_index += 1 + elif command == 'ZoomOut': zoom_index -= 1 else: assert 0 - if self.zoomlevel < 0: self.zoomlevel = 0 - if self.zoomlevel >= len(self.zoomlevel_values): self.zoomlevel = len(self.zoomlevel_values) - 1 - z = self.zoomlevel_values[self.zoomlevel] + if zoom_index < 0: zoom_index = 0 + if zoom_index >= len(self.zoomlevel_values): + zoom_index = len(self.zoomlevel_values) - 1 + + z = self.zoomlevel_values[zoom_index] self.tdw.set_zoom(z) def rotate(self, command): @@ -516,12 +528,46 @@ self.tdw.set_rotation(0.0) if reset_all or ('Zoom' in command_name): default_zoom = self.app.preferences['view.default_zoom'] - self.zoomlevel = self.zoomlevel_values.index(default_zoom) self.tdw.set_zoom(default_zoom) if reset_all or ('Mirror' in command_name): self.tdw.set_mirrored(False) if reset_all: self.tdw.recenter_document() + elif 'Fit' in command_name: + # View>Fit: fits image within window's borders. + junk, junk, w, h = self.tdw.doc.get_effective_bbox() + if w == 0: + # When there is nothing on the canvas reset zoom to default. + self.reset_view_cb(None) + else: + w1, h1 = self.tdw.window.get_size() + # Store radians and reset rotation to zero. + radians = self.tdw.rotation + self.tdw.set_rotation(0.0) + # Store mirror and temporarily it turn off mirror. + mirror = self.tdw.mirrored + self.tdw.set_mirrored(False) + # Using w h as the unrotated bbox, calculate the bbox of the + # rotated doc. + cos = math.cos(radians) + sin = math.sin(radians) + wcos = w * cos + hsin = h * sin + wsin = w * sin + hcos = h * cos + # We only need to calculate the positions of two corners of the + # bbox since it is centered and symetrical, but take the max + # value since during rotation one corner's distance along the + # x axis shortens while the other lengthens. Same for the y axis. + x = max(abs(wcos - hsin), abs(wcos + hsin)) + y = max(abs(wsin + hcos), abs(wsin - hcos)) + # Compare the doc and window dimensions and take the best fit + zoom = min((w1-20)/x, (h1-20)/y) + # Reapply all transformations + self.tdw.recenter_document() # Center image + self.tdw.set_rotation(radians) # reapply canvas rotation + self.tdw.set_mirrored(mirror) #reapply mirror + self.tdw.set_zoom(zoom, at_pointer=False) # Set new zoom level # DEBUGGING def print_inputs_cb(self, action): diff -Nru mypaint-1.0.0+git20111209.545d6f8/gui/drawwindow.py mypaint-1.0.0+git20120121.b8338d5/gui/drawwindow.py --- mypaint-1.0.0+git20111209.545d6f8/gui/drawwindow.py 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/gui/drawwindow.py 2012-01-21 01:24:50.000000000 +0000 @@ -33,6 +33,10 @@ # palette support from lib.scratchpad_palette import GimpPalette, hatch_squiggle, squiggle, draw_palette +from overlays import LastPaintPosOverlay, ScaleOverlay + + + # TODO: put in a helper file? def with_wait_cursor(func): """python decorator that adds a wait cursor around a function""" @@ -61,7 +65,7 @@ ## Ignore accidentals # Single button-presses only, not 2ble/3ple if event.type != gdk.BUTTON_PRESS: - # ignore the extra double-click event + # pass through the extra double-click event return False if event.button != 1: @@ -93,7 +97,7 @@ # No-ops if action_name == 'no_action': - return True # We handled it by doing nothing + return False # Pass event through to the tdw # Straight line # Really belongs in the tdw, but this is the only object with access @@ -179,6 +183,8 @@ self.connect("drag-data-received", self.drag_data_received) self.connect("window-state-event", self.window_state_event_cb) + self.update_overlays() + self.app.filehandler.current_file_observers.append(self.update_title) self.init_actions() @@ -267,6 +273,7 @@ ('ViewMenu', None, _('View')), ('MenuishBarMenu', None, _('Toolbars')), + ('FeedbackMenu', None, _('Feedback')), ('ShowPopupMenu', None, _('Popup Menu'), 'Menu', None, self.popupmenu_show_cb), ('Fullscreen', gtk.STOCK_FULLSCREEN, None, 'F11', None, self.fullscreen_cb), ('ViewHelp', gtk.STOCK_HELP, _('Help'), None, None, self.show_infodialog_cb), @@ -330,6 +337,14 @@ ('ToggleSubwindows', None, _('Subwindows'), 'Tab', _("Show subwindows"), self.toggle_subwindows_cb, self.get_show_subwindows()), + ('ToggleScaleFeedback', None, _("Zoom Level"), None, + _("Reveal the scale % when zooming in or out"), + self.toggle_scale_feedback_cb, + self.app.preferences.get("ui.feedback.scale", False)), + ('ToggleLastPosFeedback', None, _("Last Painting Position"), None, + _("Reveal the last painting pos when a stroke ends"), + self.toggle_last_pos_feedback_cb, + self.app.preferences.get("ui.feedback.last_pos", False)), ] ag.add_toggle_actions(toggle_actions) @@ -611,6 +626,39 @@ action.set_active(active) self._updating_toggled_item = False + + # Feedback and overlays + # It's not intended that all categories of feedback will use overlays, but + # they currently all do. This may change if/when we add a conventional + # statusbar for textual types of feedback. + + def toggle_scale_feedback_cb(self, action): + self.app.preferences['ui.feedback.scale'] = action.get_active() + self.update_overlays() + + def toggle_last_pos_feedback_cb(self, action): + self.app.preferences['ui.feedback.last_pos'] = action.get_active() + self.update_overlays() + + def update_overlays(self): + # Updates the list of overlays on the main doc's TDW to match the prefs + doc = self.app.doc + disp_overlays = [ + ('ui.feedback.scale', ScaleOverlay), + ('ui.feedback.last_pos', LastPaintPosOverlay), + ] + for key, class_ in disp_overlays: + current_instance = None + for ov in doc.tdw.display_overlays: + if isinstance(ov, class_): + current_instance = ov + active = self.app.preferences.get(key, False) + if active and not current_instance: + doc.tdw.display_overlays.append(class_(doc)) + elif current_instance and not active: + doc.tdw.display_overlays.remove(current_instance) + + def popup_cb(self, action): state = self.popup_states[action.get_name()] state.activate(action) @@ -1005,6 +1053,7 @@ u'João S. O. Bueno (pt_BR)\n' u'David Grundberg (sv)\n' u'Elliott Sales de Andrade (en_CA)\n' + u'Ruei-Yuan Lu (zh_TW)\n' ) d.run() diff -Nru mypaint-1.0.0+git20111209.545d6f8/gui/menu.xml mypaint-1.0.0+git20120121.b8338d5/gui/menu.xml --- mypaint-1.0.0+git20111209.545d6f8/gui/menu.xml 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/gui/menu.xml 2012-01-21 01:24:50.000000000 +0000 @@ -33,12 +33,21 @@ + + + + + + @@ -98,6 +107,7 @@ + diff -Nru mypaint-1.0.0+git20111209.545d6f8/gui/overlays.py mypaint-1.0.0+git20120121.b8338d5/gui/overlays.py --- mypaint-1.0.0+git20111209.545d6f8/gui/overlays.py 1970-01-01 00:00:00.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/gui/overlays.py 2012-01-21 01:24:50.000000000 +0000 @@ -0,0 +1,261 @@ +# This file is part of MyPaint. +# Copyright (C) 2012 by Andrew Chadwick +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +"""Overlays for TDWs showing information about the TDW state. +""" + +import gtk +from gtk import gdk +import gobject +import cairo +import pango +from math import floor, ceil, pi +from tileddrawwidget import Overlay +from lib.helpers import clamp + +from gettext import gettext as _ + + +class FadingOverlay (Overlay): + """Base class for temporary overlays which fade to alpha over a short time + """ + + # Overridable animation controls + fade_fps = 20 #: Nominal frames per second + fade_duration = 1.5 #: Time for fading entirely to zero, in seconds + + # Animation and redrawing state + tdw = None + alpha = 1.0 + __area = None + __anim_srcid = None + + def __init__(self, doc): + self.tdw = doc.tdw + + def paint(self, cr): + """Repaint the overlay and start animating if necessary. + + Individual frames are handled by `paint_frame()`. + """ + if self.overlay_changed(): + self.alpha = 1.0 + elif self.alpha <= 0: + # No need to draw anything. + return + self.__restart_anim_if_needed() + self.__area = self.paint_frame(cr) + + def anim_cb(self): + """Animation callback. + + Each step fades the alpha multiplier slightly and invalidates the area + last painted. + """ + self.alpha -= 1.0 / (float(self.fade_fps) * self.fade_duration) + self.alpha = clamp(self.alpha, 0.0, 1.0) + win = self.tdw.get_window() + if win is not None: + if self.__area: + win.invalidate_rect(gdk.Rectangle(*self.__area), True) + if self.alpha <= 0.0: + self.__anim_srcid = None + return False + else: + return True + + def __restart_anim_if_needed(self): + """Restart if not currently running, without changing the alpha. + """ + if self.__anim_srcid is None: + delay = int(1000 / self.fade_fps) + self.__anim_srcid = gobject.timeout_add(delay, self.anim_cb) + + def stop_anim(self): + """Stops the animation after the next frame is drawn. + """ + self.alpha = 0.0 + + def start_anim(self): + """Restarts the animation, setting alpha to 1. + """ + self.alpha = 1.0 + self.__restart_anim_if_needed() + + def paint_frame(self, cr): + """Paint a single frame. + """ + raise NotImplementedError + + def overlay_changed(self): + """Return true if the overlay has changed. + + This virtual method is called by paint() to determine whether the + alpha should be reset to 1.0 and the fade begun anew. + """ + raise NotImplementedError + + +def rounded_box(cr, x, y, w, h, r): + """Paint a rounded box path into a Cairo context. + + The position is given by `x` and `y`, and the size by `w` and `h`. The + cornders are of radius `r`, and must be smaller than half the minimum + dimension. The path is created as a new, closed subpath. + """ + assert r <= min(w, h) / 2 + cr.new_sub_path() + cr.arc(x+r, y+r, r, pi, pi*1.5) + cr.line_to(x+w-r, y) + cr.arc(x+w-r, y+r, r, pi*1.5, pi*2) + cr.line_to(x+w, y+h-r) + cr.arc(x+w-r, y+h-r, r, 0, pi*0.5) + cr.line_to(x+r, y+h) + cr.arc(x+r, y+h-r, r, pi*0.5, pi) + cr.close_path() + + +class ScaleOverlay (FadingOverlay): + """Overlays its TDW's current zoom, fading to transparent. + + The animation is started by the normal full canvas repaint which happens + after the scale changes. + """ + + background_rgba = [0, 0, 0, 0.666] + text_rgba = [1, 1, 1, 1.0] + vmargin = 6 + hmargin = 12 + padding = 6 + shown_scale = None + + + def overlay_changed(self): + return self.tdw.scale != self.shown_scale + + + def paint_frame(self, cr): + self.shown_scale = self.tdw.scale + text = _("Zoom: %.01f%%") % (100*self.shown_scale) + layout = self.tdw.create_pango_layout(text) + attrs = pango.AttrList() + attrs.insert(pango.AttrWeight(pango.WEIGHT_BOLD, 0, -1)) + layout.set_attributes(attrs) + alloc = self.tdw.get_allocation() + lw, lh = layout.get_pixel_size() + + # Background rectangle + hm = self.hmargin + vm = self.hmargin + w = alloc.width + h = alloc.height + p = self.padding + area = bx, by, bw, bh = w-lw-hm-p-p, vm, lw+p+p, lh+p+p + rounded_box(cr, bx, by, bw, bh, p) + #cr.rectangle(*area) + rgba = self.background_rgba[:] + rgba[3] *= self.alpha + cr.set_source_rgba(*rgba) + cr.fill() + + # Text + cr.translate(w-lw-hm-p, vm+p) + rgba = self.text_rgba[:] + rgba[3] *= self.alpha + cr.set_source_rgba(*rgba) + cr.show_layout(layout) + + # Where to invalidate + return area + + + +class LastPaintPosOverlay (FadingOverlay): + """Displays the last painting position after a stroke has finished. + + Not especially useful, but serves as an example of how to drive an overlay + from user input events. + """ + + inner_line_rgba = [1, 1, 1, 1] + inner_line_width = 6 + outer_line_rgba = [0, 0, 0, 0.666] + outer_line_width = 8 + radius = 4.0 + + + def __init__(self, doc): + FadingOverlay.__init__(self, doc) + doc.input_stroke_started_observers.append(self.input_stroke_started) + doc.input_stroke_ended_observers.append(self.input_stroke_ended) + self.current_marker_pos = None + self.in_input_stroke = False + + def input_stroke_started(self, event): + self.in_input_stroke = True + if self.current_marker_pos is None: + return + # Clear the current marker + model_x, model_y = self.current_marker_pos + model_cr = self.tdw.get_model_coordinates_cairo_context() + x, y = model_cr.user_to_device(model_x, model_y) + area = self._calc_area(x, y) + self.tdw.queue_draw_area(*area) + self.current_marker_pos = None + self.stop_anim() + + def input_stroke_ended(self, event): + self.in_input_stroke = False + if self.tdw.last_painting_pos is None: + return + # Record the new marker position + model_x, model_y = self.tdw.last_painting_pos + model_cr = self.tdw.get_model_coordinates_cairo_context() + x, y = model_cr.user_to_device(model_x, model_y) + area = self._calc_area(x, y) + self.tdw.queue_draw_area(*area) + self.current_marker_pos = model_x, model_y + self.start_anim() + + def overlay_changed(self): + return False + + def _calc_area(self, x, y): + r = self.radius + lw = max(self.inner_line_width, self.outer_line_width) + return (int(x-r-lw), int(y-r-lw), int(2*(r+lw)), int(2*(r+lw))) + + def paint_frame(self, cr): + if self.in_input_stroke: + return + if self.current_marker_pos is None: + return + model_cr = self.tdw.get_model_coordinates_cairo_context() + x, y = model_cr.user_to_device(*self.current_marker_pos) + area = self._calc_area(x, y) + x = int(x) + 0.5 + y = int(y) + 0.5 + r = self.radius + cr.set_line_cap(cairo.LINE_CAP_ROUND) + rgba = list(self.outer_line_rgba) + rgba[3] *= self.alpha + cr.set_source_rgba(*rgba) + cr.set_line_width(self.outer_line_width) + cr.move_to(x-r, y-r) + cr.line_to(x+r, y+r) + cr.move_to(x+r, y-r) + cr.line_to(x-r, y+r) + cr.stroke_preserve() + rgba = list(self.inner_line_rgba) + rgba[3] *= self.alpha + cr.set_source_rgba(*rgba) + cr.set_line_width(self.inner_line_width) + cr.stroke() + return area + + diff -Nru mypaint-1.0.0+git20111209.545d6f8/gui/stock.py mypaint-1.0.0+git20120121.b8338d5/gui/stock.py --- mypaint-1.0.0+git20111209.545d6f8/gui/stock.py 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/gui/stock.py 2012-01-21 01:24:50.000000000 +0000 @@ -28,6 +28,7 @@ BRUSH_BLEND_MODE_NORMAL = "mypaint-brush-blend-mode-normal" BRUSH_BLEND_MODE_ERASER = "mypaint-brush-blend-mode-eraser" BRUSH_BLEND_MODE_ALPHA_LOCK = "mypaint-brush-blend-mode-alpha-lock" +BRUSH_BLEND_MODE_COLORIZE = "mypaint-brush-blend-mode-colorize" BRUSH_MODIFIERS_ACTIVE = "mypaint-brush-mods-active" BRUSH_MODIFIERS_INACTIVE = "mypaint-brush-mods-inactive" @@ -52,6 +53,7 @@ (BRUSH_BLEND_MODE_ERASER, _("Eraser"), 0, ord('e'), None), (BRUSH_BLEND_MODE_ALPHA_LOCK, _("Lock Alpha Channel"), gdk.SHIFT_MASK, ord('l'), None), + (BRUSH_BLEND_MODE_COLORIZE, _("Colorize"), 0, ord('k'), None), (BRUSH_MODIFIERS_ACTIVE, _("Brush Modifiers Active"), 0, 0, None), (BRUSH_MODIFIERS_INACTIVE, _("Brush Modifiers Inactive"), 0, 0, None), ] diff -Nru mypaint-1.0.0+git20111209.545d6f8/gui/tileddrawwidget.py mypaint-1.0.0+git20120121.b8338d5/gui/tileddrawwidget.py --- mypaint-1.0.0+git20111209.545d6f8/gui/tileddrawwidget.py 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/gui/tileddrawwidget.py 2012-01-21 01:24:50.000000000 +0000 @@ -6,8 +6,13 @@ # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. -import gtk, gobject, cairo, random -gdk = gtk.gdk +import gobject +import cairo +import pango +import gtk +from gtk import gdk + +import random from math import floor, ceil, pi, log from numpy import isfinite from warnings import warn @@ -25,6 +30,19 @@ return lib.document.Document(brush) +class Overlay: + """Base class/interface for objects which paint things over a TDW. + """ + + def paint(self, cr): + """Paint information onto a TiledDrawWidget. + + The drawing interface is very simple. `cr` is a Cairo context in either + display coordinates or model coordinates: which one you get depends on + which list the Overlay is appended to on its tdw. + """ + pass + class TiledDrawWidget(gtk.DrawingArea): """ @@ -88,6 +106,7 @@ self.last_event_had_pressure_info = False self.last_painting_pos = None self.device_observers = [] #: Notified during drawing when input devices change + self._input_stroke_started_observers = [] self._input_stroke_ended_observers = [] #: Access via gui.document self.visualize_rendering = False @@ -125,6 +144,10 @@ self.override_cursor = None + # Overlays + self.model_overlays = [] + self.display_overlays = [] + #def set_scroll_at_edges(self, choice): # self.scroll_at_edges = choice @@ -301,6 +324,9 @@ return if event.button == 1: + for func in self._input_stroke_started_observers: + func(event) + # mouse button pressed (while painting without pressure information) if not self.last_event_had_pressure_info: # For the mouse we don't get a motion event for "pressure" @@ -310,11 +336,12 @@ def button_release_cb(self, win, event): # (see comment above in button_press_cb) - if event.button == 1 and not self.last_event_had_pressure_info: - self.motion_notify_cb(win, event, button1_pressed=False) - # Outsiders can access this via gui.document - for func in self._input_stroke_ended_observers: - func(event) + if event.button == 1: + if not self.last_event_had_pressure_info: + self.motion_notify_cb(win, event, button1_pressed=False) + # Outsiders can access this via gui.document + for func in self._input_stroke_ended_observers: + func(event) def straight_line_from_last_pos(self, is_sequence=False): if not self.last_painting_pos: @@ -408,6 +435,18 @@ def repaint(self, device_bbox=None): cr, surface, sparse, mipmap_level, gdk_clip_region = self.render_prepare(device_bbox) self.render_execute(cr, surface, sparse, mipmap_level, gdk_clip_region) + # Model coordinate space: + cr.restore() # CONTEXT2<<< + for overlay in self.model_overlays: + cr.save() + overlay.paint(cr) + cr.restore() + # Back to device coordinate space + cr.restore() # CONTEXT1<<< + for overlay in self.display_overlays: + cr.save() + overlay.paint(cr) + cr.restore() def render_prepare(self, device_bbox): if device_bbox is None: @@ -433,7 +472,9 @@ cr.paint() # bye bye device coordinates + cr.save() # >>>CONTEXT1 self.get_model_coordinates_cairo_context(cr) + cr.save() # >>>CONTEXT2 # choose best mipmap hq_zoom = False @@ -607,9 +648,9 @@ def f(): self.scale *= zoom_step self.rotozoom_with_center(f, at_pointer=True) - def set_zoom(self, zoom): + def set_zoom(self, zoom, at_pointer=True): def f(): self.scale = zoom - self.rotozoom_with_center(f, at_pointer=True) + self.rotozoom_with_center(f, at_pointer) def rotate(self, angle_step): if self.mirrored: angle_step = -angle_step diff -Nru mypaint-1.0.0+git20111209.545d6f8/gui/toolbar-blendmodes.xml mypaint-1.0.0+git20120121.b8338d5/gui/toolbar-blendmodes.xml --- mypaint-1.0.0+git20111209.545d6f8/gui/toolbar-blendmodes.xml 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/gui/toolbar-blendmodes.xml 2012-01-21 01:24:50.000000000 +0000 @@ -14,6 +14,7 @@ + diff -Nru mypaint-1.0.0+git20111209.545d6f8/gui/toolbar.py mypaint-1.0.0+git20120121.b8338d5/gui/toolbar.py --- mypaint-1.0.0+git20111209.545d6f8/gui/toolbar.py 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/gui/toolbar.py 2012-01-21 01:24:50.000000000 +0000 @@ -485,7 +485,8 @@ frame.add(vbox) self.vbox.pack_start(frame, True, True) - for a in ["BlendModeNormal", "BlendModeEraser", "BlendModeLockAlpha"]: + for a in ["BlendModeNormal", "BlendModeEraser", + "BlendModeLockAlpha", "BlendModeColorize"]: action = self.app.find_action(a) cb = gtk.CheckButton() action.connect_proxy(cb) diff -Nru mypaint-1.0.0+git20111209.545d6f8/lib/brushmodes.hpp mypaint-1.0.0+git20120121.b8338d5/lib/brushmodes.hpp --- mypaint-1.0.0+git20111209.545d6f8/lib/brushmodes.hpp 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/lib/brushmodes.hpp 2012-01-21 01:24:50.000000000 +0000 @@ -53,6 +53,132 @@ } }; + + +// Colorize: apply the source hue and saturation, retaining the target +// brightness. Same thing as in the PDF spec addendum but with different Luma +// coefficients. Colorize should be used at either 1.0 or 0.0, values in +// between probably aren't very useful. This blend mode retains the target +// alpha, and any pure whites and blacks in the target layer. +// +// Code is still ugly. Using floating-point arithmetic in here, which maybe +// isn't very efficient. + +#define MAX3(a, b, c) ((a)>(b)?MAX((a),(c)):MAX((b),(c))) +#define MIN3(a, b, c) ((a)<(b)?MIN((a),(c)):MIN((b),(c))) + +/* +// From ITU Rec. BT.601 (SDTV) +static const float LUMA_RED_COEFF = 0.3; +static const float LUMA_GREEN_COEFF = 0.59; +static const float LUMA_BLUE_COEFF = 0.11; +*/ + +// From ITU Rec. BT.709 (HDTV and sRGB) +static const float LUMA_RED_COEFF = 0.2126; +static const float LUMA_GREEN_COEFF = 0.7152; +static const float LUMA_BLUE_COEFF = 0.0722; + +// See also http://en.wikipedia.org/wiki/YCbCr + + +inline static float +nonsep_lum (const float r, + const float g, + const float b) +{ + return (r*LUMA_RED_COEFF) + (g*LUMA_GREEN_COEFF) + (b*LUMA_BLUE_COEFF); +} + + +inline static void +nonsep_clip_inplace(float *r, + float *g, + float *b) +{ + float lum = nonsep_lum(*r, *g, *b); + float cmin = MIN3(*r, *g, *b); + float cmax = MAX3(*r, *g, *b); + if (cmin < 0.0) { + *r = lum + (((*r - lum) * lum) / (lum - cmin)); + *g = lum + (((*g - lum) * lum) / (lum - cmin)); + *b = lum + (((*b - lum) * lum) / (lum - cmin)); + } + if (cmax > 1.0) { + *r = lum + (((*r - lum) * (1-lum)) / (cmax - lum)); + *g = lum + (((*g - lum) * (1-lum)) / (cmax - lum)); + *b = lum + (((*b - lum) * (1-lum)) / (cmax - lum)); + } +} + + +inline static void +nonsep_apply_lum(const float topr, + const float topg, + const float topb, + const float botlum, + float *botr, + float *botg, + float *botb) +{ + float diff = botlum - nonsep_lum(topr, topg, topb); + *botr = topr + diff; + *botg = topg + diff; + *botb = topb + diff; + nonsep_clip_inplace(botr, botg, botb); +} + + +// The method is an implementation of that described in the official Adobe "PDF +// Blend Modes: Addendum" document, dated January 23, 2006; specifically it's +// the "Color" nonseparable blend mode. We do however use different +// coefficients for the Luma value. + +void +draw_dab_pixels_BlendMode_Color (uint16_t * mask, + uint16_t * rgba, // b/bottom, premult + uint16_t color_r, // } + uint16_t color_g, // }-- a/top, !premult + uint16_t color_b, // } + uint16_t opacity) +{ + while (1) { + for (; mask[0]; mask++, rgba+=4) { + // De-multiply (and scale) + const float scalefact = rgba[3]; //can't work with premult alpha, sadly + + float r = ((float)rgba[0]) / scalefact; + float g = ((float)rgba[1]) / scalefact; + float b = ((float)rgba[2]) / scalefact; + + // Input luma, based on the target pixel + float lum = nonsep_lum(r, g, b); + + // Output RGB generation + r = g = b = 0; + nonsep_apply_lum( (float)color_r/(1<<15), + (float)color_g/(1<<15), + (float)color_b/(1<<15), + lum, &r, &g, &b ); + + // Re-premult/scale. + r *= scalefact; + g *= scalefact; + b *= scalefact; + + // And combine as normal. + uint32_t opa_a = mask[0]*(uint32_t)opacity/(1<<15); // topAlpha + uint32_t opa_b = (1<<15)-opa_a; // bottomAlpha + rgba[0] = (opa_a*r + opa_b*rgba[0])/(1<<15); + rgba[1] = (opa_a*g + opa_b*rgba[1])/(1<<15); + rgba[2] = (opa_a*b + opa_b*rgba[2])/(1<<15); + } + if (!mask[1]) break; + rgba += mask[1]; + mask += 2; + } +}; + // This blend mode is used for smudging and erasing. Smudging // allows to "drag" around transparency as if it was a color. When // smuding over a region that is 60% opaque the result will stay 60% diff -Nru mypaint-1.0.0+git20111209.545d6f8/lib/tiledsurface.hpp mypaint-1.0.0+git20120121.b8338d5/lib/tiledsurface.hpp --- mypaint-1.0.0+git20111209.545d6f8/lib/tiledsurface.hpp 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/lib/tiledsurface.hpp 2012-01-21 01:24:50.000000000 +0000 @@ -56,6 +56,7 @@ // OPTIMIZE: send a list tiles for minimal compositing? (but profile the code first) res = PyObject_CallMethod(self, "notify_observers", "(iiii)", bbox.x, bbox.y, bbox.w, bbox.h); if (!res) return NULL; + Py_DECREF(res); } } Py_RETURN_NONE; @@ -222,12 +223,14 @@ float opaque, float hardness = 0.5, float color_a = 1.0, float aspect_ratio = 1.0, float angle = 0.0, - float lock_alpha = 0.0 + float lock_alpha = 0.0, + float colorize = 0.0 ) { opaque = CLAMP(opaque, 0.0, 1.0); hardness = CLAMP(hardness, 0.0, 1.0); lock_alpha = CLAMP(lock_alpha, 0.0, 1.0); + colorize = CLAMP(colorize, 0.0, 1.0); if (radius < 0.1) return false; // don't bother with dabs smaller than 0.1 pixel if (hardness == 0.0) return false; // infintly small center point, fully transparent outside if (opaque == 0.0) return false; @@ -246,6 +249,7 @@ float normal = 1.0; normal *= 1.0-lock_alpha; + normal *= 1.0-colorize; if (aspect_ratio<1.0) aspect_ratio=1.0; @@ -293,6 +297,11 @@ draw_dab_pixels_BlendMode_LockAlpha(mask, rgba_p, color_r_, color_g_, color_b_, lock_alpha*opaque*(1<<15)); } + if (colorize) { + draw_dab_pixels_BlendMode_Color(mask, rgba_p, + color_r_, color_g_, color_b_, + colorize*opaque*(1<<15)); + } } } diff -Nru mypaint-1.0.0+git20111209.545d6f8/lib/tiledsurface.py mypaint-1.0.0+git20120121.b8338d5/lib/tiledsurface.py --- mypaint-1.0.0+git20111209.545d6f8/lib/tiledsurface.py 2011-12-09 18:42:05.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/lib/tiledsurface.py 2012-01-21 01:24:50.000000000 +0000 @@ -416,6 +416,7 @@ self.surface = surface self.snapshot = surface.save_snapshot() self.chunks = self.snapshot.tiledict.keys() + # print "Number of Tiledict_keys", len(self.chunks) tx = x // N ty = y // N chebyshev = lambda p: max(abs(tx - p[0]), abs(ty - p[1])) @@ -439,6 +440,8 @@ self.surface._mark_mipmap_dirty(*b) bbox = get_tiles_bbox(self.blanked) self.surface.notify_observers(*bbox) + # Remove empty tile created by Layer Move + self.surface.remove_empty_tiles() def process(self, n=200): if self.chunks_i > len(self.chunks): diff -Nru mypaint-1.0.0+git20111209.545d6f8/po/ja.po mypaint-1.0.0+git20120121.b8338d5/po/ja.po --- mypaint-1.0.0+git20111209.545d6f8/po/ja.po 2011-12-09 18:42:06.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/po/ja.po 2012-01-21 01:24:50.000000000 +0000 @@ -10,14 +10,14 @@ msgstr "" "Project-Id-Version: MyPaint\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-12-01 17:12+0900\n" +"POT-Creation-Date: 2012-01-16 01:06+0900\n" "PO-Revision-Date: 2011-12-02 21:27+0900\n" "Last-Translator: a3novy \n" "Language-Team: \n" -"Language: Japanese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: Japanese\n" "Plural-Forms: nplurals=2; plural=(n==1? 0 : 1);\n" "X-Poedit-Language: Japanese\n" "X-Poedit-Country: JAPAN\n" @@ -29,79 +29,116 @@ msgstr "筆圧" #: ../brushlib/brushsettings.py:26 -msgid "The pressure reported by the tablet, between 0.0 and 1.0. If you use the mouse, it will be 0.5 when a button is pressed and 0.0 otherwise." -msgstr "タブレットが返す圧力値は、0.0 と 1.0 の間です。マウス使用の場合、ボタンが押された時 0.5、それ以外は 0.0 になります。" +msgid "" +"The pressure reported by the tablet, between 0.0 and 1.0. If you use the " +"mouse, it will be 0.5 when a button is pressed and 0.0 otherwise." +msgstr "" +"タブレット利用時:デバイスが示す筆圧(0.0〜1.0)マウス利用時:マウスボタンを押" +"している間=0.5、その他=0.0" #: ../brushlib/brushsettings.py:27 msgid "Fine speed" -msgstr "正確な速さ" +msgstr "詳細速度" #: ../brushlib/brushsettings.py:27 -msgid "How fast you currently move. This can change very quickly. Try 'print input values' from the 'help' menu to get a feeling for the range; negative values are rare but possible for very low speed." -msgstr "現在の移動がどのくらいの速さか。ここで迅速に変更することがきます。だいたいの範囲の目安を得るために「ヘルプ」から「コンソールへブラシの入力値を表示」をご覧ください。マイナスの値は非常に低速のため稀ですが可能です。" +msgid "" +"How fast you currently move. This can change very quickly. Try 'print input " +"values' from the 'help' menu to get a feeling for the range; negative values " +"are rare but possible for very low speed." +msgstr "" +"現在のポインターの移動がどのくらいの速さかを示します。このパラメータは(カーソ" +"ルの速度に合わせて)即時に値が変わります。値の範囲の目安を得るためには「ヘル" +"プ」から「ブラシの入力値をコンソールに表示」をご覧ください。この値がマイナス" +"値になることは稀ですが、低速でカーソルを動かした場合にマイナス値になることが" +"あります。" #: ../brushlib/brushsettings.py:28 msgid "Gross speed" -msgstr "大まかな速さ" +msgstr "大まかな速度" #: ../brushlib/brushsettings.py:28 -msgid "Same as fine speed, but changes slower. Also look at the 'gross speed filter' setting." -msgstr "「正確な速さ」と同様ですが、ゆっくりと変化します。また「大まかな速度フィルタ」の設定もご覧ください。" +msgid "" +"Same as fine speed, but changes slower. Also look at the 'gross speed " +"filter' setting." +msgstr "" +"「詳細速度」と同様ですが、ゆっくりと変化します。また「『大まかな速度』フィル" +"タ」の設定もご覧ください。" #: ../brushlib/brushsettings.py:29 msgid "Random" msgstr "ランダム" #: ../brushlib/brushsettings.py:29 -msgid "Fast random noise, changing at each evaluation. Evenly distributed between 0 and 1." -msgstr "高速なランダムノイズ、個々の算出で変化します。0と 1の間に均等に分布します。" +msgid "" +"Fast random noise, changing at each evaluation. Evenly distributed between 0 " +"and 1." +msgstr "" +"高速なランダムノイズ、個々の算出で変化します。0と 1の間に均等に分布します。" -#: ../brushlib/brushsettings.py:30 -#: ../gui/brushsettingswindow.py:107 +#: ../brushlib/brushsettings.py:30 ../gui/brushsettingswindow.py:107 msgid "Stroke" msgstr "ストローク" #: ../brushlib/brushsettings.py:30 -msgid "This input slowly goes from zero to one while you draw a stroke. It can also be configured to jump back to zero periodically while you move. Look at the 'stroke duration' and 'stroke hold time' settings." -msgstr "ストロークを描画している間、この入力は徐々に 0から 1になります。また、移動している間、定期的にゼロに戻るように設定することもできます。「ストロークの経過時間」と「ストロークの保留時間」の設定もご覧ください。" +msgid "" +"This input slowly goes from zero to one while you draw a stroke. It can also " +"be configured to jump back to zero periodically while you move. Look at the " +"'stroke duration' and 'stroke hold time' settings." +msgstr "" +"ストロークを描画している間、この入力は徐々に 0から 1になります。また、移動し" +"ている間、定期的にゼロに戻るように設定することもできます。「『ストローク』基" +"準長」と「『ストローク』残留期間」の設定もご覧ください。" #: ../brushlib/brushsettings.py:31 msgid "Direction" msgstr "方向" #: ../brushlib/brushsettings.py:31 -msgid "The angle of the stroke, in degrees. The value will stay between 0.0 and 180.0, effectively ignoring turns of 180 degrees." -msgstr "ストロークの角度。値は、実質的には 180度のターンを無視して、0.0〜180.0の間のままです。" +msgid "" +"The angle of the stroke, in degrees. The value will stay between 0.0 and " +"180.0, effectively ignoring turns of 180 degrees." +msgstr "" +"ストロークの角度。値は、実質的には 180度のターンを無視して、0.0〜180.0の間の" +"ままです。" #: ../brushlib/brushsettings.py:32 msgid "Declination" -msgstr "ペンの傾きの角度" +msgstr "ペンの傾斜角度" #: ../brushlib/brushsettings.py:32 -msgid "Declination of stylus tilt. 0 when stylus is parallel to tablet and 90.0 when it's perpendicular to tablet." -msgstr "スタイラスペンの傾きの角度(赤緯)。ペンがタブレットに平行だと 0.0、タブレットに対して垂直だと 90.0です。" +msgid "" +"Declination of stylus tilt. 0 when stylus is parallel to tablet and 90.0 " +"when it's perpendicular to tablet." +msgstr "" +"スタイラスペンの傾きの角度(赤緯)。ペンがタブレットに平行だと 0.0、タブレット" +"に対して垂直だと 90.0です。" #: ../brushlib/brushsettings.py:33 msgid "Ascension" -msgstr "ペンの傾きの方向" +msgstr "ペンの傾斜の方向" #: ../brushlib/brushsettings.py:33 -msgid "Right ascension of stylus tilt. 0 when stylus working end points to you, +90 when rotated 90 degrees clockwise, -90 when rotated 90 degrees counterclockwise." -msgstr "スタイラスペンの傾きの方向(赤経)。 ペンの先端が自分を差す時は 0, 時計回りに90度回転させると +90、反時計回りに90度回転させると -90です。" +msgid "" +"Right ascension of stylus tilt. 0 when stylus working end points to you, +90 " +"when rotated 90 degrees clockwise, -90 when rotated 90 degrees " +"counterclockwise." +msgstr "" +"スタイラスペンの傾きの方向(赤経)。 ペンの先端が自分を差す時は 0, 時計回りに90" +"度回転させると +90、反時計回りに90度回転させると -90です。" #. ['motion_strength',0.0,0.0, 0.0, 1.0, 1.0, "[EXPERIMENTAL] Same as angle, but wraps at 180 degrees. The dynamics are shared with BRUSH_OFFSET_BY_SPEED_FILTER (FIXME: which is a bad thing)."], -#: ../brushlib/brushsettings.py:35 -#: ../gui/brushsettingswindow.py:109 +#: ../brushlib/brushsettings.py:35 ../gui/brushsettingswindow.py:109 msgid "Custom" msgstr "カスタム" #: ../brushlib/brushsettings.py:35 -msgid "This is a user defined input. Look at the 'custom input' setting for details." -msgstr "これはユーザー定義の入力です。詳細は「カスタム入力」の設定をご覧ください。" +msgid "" +"This is a user defined input. Look at the 'custom input' setting for details." +msgstr "" +"これはユーザー定義の入力です。詳細は「カスタム入力」の設定をご覧ください。" #. internal name, displayed name, constant, minimum, default, maximum, tooltip -#: ../brushlib/brushsettings.py:44 -#: ../gui/brushsettingswindow.py:102 +#: ../brushlib/brushsettings.py:44 ../gui/brushsettingswindow.py:102 msgid "Opacity" msgstr "不透明度" @@ -115,15 +152,20 @@ #: ../brushlib/brushsettings.py:45 msgid "Opacity multiply" -msgstr "不透明度を乗算" +msgstr "不透明度への乗算" #: ../brushlib/brushsettings.py:45 msgid "" -"This gets multiplied with opaque. You should only change the pressure input of this setting. Use 'opaque' instead to make opacity depend on speed.\n" -"This setting is responsible to stop painting when there is zero pressure. This is just a convention, the behaviour is identical to 'opaque'." -msgstr "" -"これは不透明で乗算されます。この設定の筆圧の入力を変更する必要があります。不透明度が速さに依存するようにする代わりに「不透明」を使用して下さい。\n" -"この設定は、筆圧がゼロである時に描画を停止する責任があります。これは単に規則であり、動作は「不透明」と同じです。" +"This gets multiplied with opaque. You should only change the pressure input " +"of this setting. Use 'opaque' instead to make opacity depend on speed.\n" +"This setting is responsible to stop painting when there is zero pressure. " +"This is just a convention, the behaviour is identical to 'opaque'." +msgstr "" +"不透明度に対してこの値が掛け合わされます。この値に関しては筆圧の設定のみ変更" +"するようにしなければなりません。不透明度を速度に合わせて変化するようにするた" +"めには、この値の代わりに「不透明度」を使用してください。\n" +"この設定値は筆圧が0になったときに描画が確実に停止するようにする必要がありま" +"す。これは単に慣例であり、動作は「不透明度」と同じです。" #: ../brushlib/brushsettings.py:46 msgid "Opacity linearize" @@ -131,14 +173,23 @@ #: ../brushlib/brushsettings.py:46 msgid "" -"Correct the nonlinearity introduced by blending multiple dabs on top of each other. This correction should get you a linear (\"natural\") pressure response when pressure is mapped to opaque_multiply, as it is usually done. 0.9 is good for standard strokes, set it smaller if your brush scatters a lot, or higher if you use dabs_per_second.\n" +"Correct the nonlinearity introduced by blending multiple dabs on top of each " +"other. This correction should get you a linear (\"natural\") pressure " +"response when pressure is mapped to opaque_multiply, as it is usually done. " +"0.9 is good for standard strokes, set it smaller if your brush scatters a " +"lot, or higher if you use dabs_per_second.\n" "0.0 the opaque value above is for the individual dabs\n" -"1.0 the opaque value above is for the final brush stroke, assuming each pixel gets (dabs_per_radius*2) brushdabs on average during a stroke" +"1.0 the opaque value above is for the final brush stroke, assuming each " +"pixel gets (dabs_per_radius*2) brushdabs on average during a stroke" msgstr "" -"複数のダブが重なり合い混合することによって引き起こされた非線形を補正します。通常行われているような、筆圧が「不透明度を乗算」に対応付けられている場合、この補正は線形の(自然な)筆圧の応答を取得する必要があります。\n" -"0.9 は標準的なストロークに適しています。ブラシが沢山散乱する場合は、より小さく、また「ダブ 毎秒」を使用する場合は、もっと高くします。\n" +"複数のダブが重なり合い混合することによって引き起こされた非線形を補正します。" +"通常行われているような、筆圧が「不透明度を乗算」に対応付けられている場合、こ" +"の補正は線形の(自然な)筆圧の応答を取得する必要があります。\n" +"0.9 は標準的なストロークに適しています。ブラシが沢山散乱する場合は、より小さ" +"く、また「ダブ 毎秒」を使用する場合は、もっと高くします。\n" "0.0 以上の不透明な値は、個々のダブに向いています。\n" -"1.0 以上の不透明な値は、ブラシストロークの最後に向いています。各ピクセルをストローク間の平均で(ダブ / 半径 *2)ブラシダブと仮定します。" +"1.0 以上の不透明な値は、ブラシストロークの最後に向いています。各ピクセルをス" +"トローク間の平均で(ダブ / 半径 *2)ブラシダブと仮定します。" #: ../brushlib/brushsettings.py:47 msgid "Radius" @@ -150,17 +201,21 @@ " 0.7 means 2 pixels\n" " 3.0 means 20 pixels" msgstr "" -"基本となるブラシの半径 (対数的)\n" -" 0.7 は 2 ピクセル\n" -" 3.0 は 20 ピクセルを表します。" +"基本ブラシ半径(対数的)\n" +" 0.7 = 2ピクセル\n" +" 3.0 = 20ピクセル" #: ../brushlib/brushsettings.py:48 msgid "Hardness" msgstr "硬さ" #: ../brushlib/brushsettings.py:48 -msgid "Hard brush-circle borders (setting to zero will draw nothing). To reach the maximum hardness, you need to disable Anti-aliasing." -msgstr "円形の縁の硬いブラシ (0に設定すると何も描けません). 最大の硬さにするには、アンチエイリアシングを無効にする必要があります。" +msgid "" +"Hard brush-circle borders (setting to zero will draw nothing). To reach the " +"maximum hardness, you need to disable Anti-aliasing." +msgstr "" +"円形の縁の硬いブラシ (0に設定すると何も描けません). 最大の硬さにするには、ア" +"ンチエイリアシングを無効にする必要があります。" #: ../brushlib/brushsettings.py:49 msgid "Anti-aliasing" @@ -168,7 +223,8 @@ #: ../brushlib/brushsettings.py:49 msgid "" -"This setting decreases the hardness when necessary to prevent a pixel staircase effect.\n" +"This setting decreases the hardness when necessary to prevent a pixel " +"staircase effect.\n" " 0.0 disable (for very strong erasers and pixel brushes)\n" " 1.0 blur one pixel (good value)\n" " 5.0 notable blur, thin strokes will disappear" @@ -180,85 +236,106 @@ #: ../brushlib/brushsettings.py:50 msgid "Dabs per basic radius" -msgstr "基本の半径毎のダブ" +msgstr "基本ブラシ半径あたり描点数" #: ../brushlib/brushsettings.py:50 -msgid "How many dabs to draw while the pointer moves a distance of one brush radius (more precise: the base value of the radius)" -msgstr " ポインタが一つのブラシの半径の長さを移動している間に描くダブの数(より正確な:半径範囲の基礎になる値)" +msgid "" +"How many dabs to draw while the pointer moves a distance of one brush radius " +"(more precise: the base value of the radius)" +msgstr "" +" ポインタがブラシ半径(より正確には、基本ブラシ半径)の分だけ移動する間の描点" +"数" #: ../brushlib/brushsettings.py:51 msgid "Dabs per actual radius" -msgstr "実際の半径毎のダブ" +msgstr "実際のブラシ半径あたりの描点数" #: ../brushlib/brushsettings.py:51 -msgid "Same as above, but the radius actually drawn is used, which can change dynamically" -msgstr "上記と同様ですが、実際に描画される半径範囲は、動的に変化します。" +msgid "" +"Same as above, but the radius actually drawn is used, which can change " +"dynamically" +msgstr "" +"上記の項目と同様のパラメータですが、基本ブラシ半径ではなく、(動的に変化す" +"る)実際のブラシ半径を使用して描点数を決定します。" #: ../brushlib/brushsettings.py:52 msgid "Dabs per second" -msgstr "ダブ 毎秒" +msgstr "1秒間辺りの描点数" #: ../brushlib/brushsettings.py:52 msgid "Dabs to draw each second, no matter how far the pointer moves" -msgstr "ポインタの移動に関係なく、1秒ごとに設定したダブを描画します。" +msgstr "1秒間辺りの描点数(移動距離に非依存)" #: ../brushlib/brushsettings.py:53 msgid "Radius by random" -msgstr "ランダムな半径" +msgstr "ランダムに変化する半径の大きさ" #: ../brushlib/brushsettings.py:53 msgid "" -"Alter the radius randomly each dab. You can also do this with the by_random input on the radius setting. If you do it here, there are two differences:\n" -"1) the opaque value will be corrected such that a big-radius dabs is more transparent\n" +"Alter the radius randomly each dab. You can also do this with the by_random " +"input on the radius setting. If you do it here, there are two differences:\n" +"1) the opaque value will be corrected such that a big-radius dabs is more " +"transparent\n" "2) it will not change the actual radius seen by dabs_per_actual_radius" msgstr "" -"個々のダブの半径をランダムに変化させます。適用する場合、2つの違いがあります。\n" -"1) 不透明度の値は、大きな半径のダブに対してより透明度の高い補正がなされます。\n" -"2) 「実際の半径毎のダブ」で表示され、実際の半径を変更しません。" +"個々の描点の半径をランダムに変化させます。「半径」の詳細設定で「ランダム」パ" +"ラメータをマッピングして設定しても同様の効果を得ますが、この項目で設定すると" +"以下の2つの違いがあります。\n" +"1) 不透明度の値は、半径が大きくなると透明度が高くなるように補正されます。\n" +"2) 「実際のブラシ半径あたりの描点数」で参照される「実際のブラシ半径」の値には" +"影響を与えません。" #: ../brushlib/brushsettings.py:54 msgid "Fine speed filter" -msgstr "正確な速度フィルタ" +msgstr "「詳細速度」フィルタ" #: ../brushlib/brushsettings.py:54 msgid "" "How slow the input fine speed is following the real speed\n" "0.0 change immediately as your speed changes (not recommended, but try it)" msgstr "" -"正確な速さの入力がどの程度遅れるかは、実際の速さによります。\n" -"0.0 速度変化に応じ即座に変化します。 (非推奨、しかし試してみて下さい)" +"「詳細速度」パラメータが、実際の速さに対してどの程度敏感に変化するかを指定し" +"ます\n" +"0.0: 速度変化に応じ即座に変化します。 (非推奨、しかし試してみて下さい)" #: ../brushlib/brushsettings.py:55 msgid "Gross speed filter" -msgstr "大まかな速度フィルタ" +msgstr "「大まかな速度」フィルタ" #: ../brushlib/brushsettings.py:55 msgid "Same as 'fine speed filter', but note that the range is different" -msgstr "「正確な速度フィルタ」と同様、しかし範囲が異なることに注意してください。" +msgstr "" +"「詳細速度」フィルタと同様に、ブラシの「大まかな速度」パラメータの感度を指定" +"します。" #: ../brushlib/brushsettings.py:56 msgid "Fine speed gamma" -msgstr "正確な速さのガンマ" +msgstr "「詳細速度」のガンマ値" #: ../brushlib/brushsettings.py:56 msgid "" -"This changes the reaction of the 'fine speed' input to extreme physical speed. You will see the difference best if 'fine speed' is mapped to the radius.\n" +"This changes the reaction of the 'fine speed' input to extreme physical " +"speed. You will see the difference best if 'fine speed' is mapped to the " +"radius.\n" "-8.0 very fast speed does not increase 'fine speed' much more\n" "+8.0 very fast speed increases 'fine speed' a lot\n" "For very slow speed the opposite happens." msgstr "" -"これは極端な物理的な速度の入力では「正確な速さ」の反応が変わります。「正確な速さ」が半径に対応付けされていた方が、相違が表れます。\n" -"-8.0 非常に速い速度では、なおさら「正確な速さ」を増加しません。\n" -"+8.0 非常に速い速度では、多くの「正確な速さ」を増加します。\n" -"非常に低速の場合は、逆のことが起こります。" +"これは極端な物理的な速度の入力に対する、「詳細速度」パラメータの反応を変更し" +"ます。「詳細速度」パラメータが「半径」に対してマッピングされていた場合に、最" +"もよく違いが現れます。\n" +"-8.0 非常に速い速度では、あまり「詳細速度」を増加しません。\n" +"+8.0 非常に速い速度では、「詳細速度」を大幅に増加します。\n" +"ポインタの動きがとても遅いの場合は、逆のことが起こります。" #: ../brushlib/brushsettings.py:57 msgid "Gross speed gamma" -msgstr "大まかな速さのガンマ" +msgstr "「大まかな速度」のガンマ値" #: ../brushlib/brushsettings.py:57 msgid "Same as 'fine speed gamma' for gross speed" -msgstr "「正確な速さのガンマ」と同様" +msgstr "" +"「『詳細速度』のガンマ値」と同様に「大まかな速度」のガンマ値を指定します。" #: ../brushlib/brushsettings.py:58 msgid "Jitter" @@ -271,14 +348,14 @@ " 1.0 standard deviation is one basic radius away\n" "<0.0 negative values produce no jitter" msgstr "" -"個々のダブが描かれる位置をランダムにずらします。\n" +"個々の描点の位置をランダムにずらします。\n" " 0.0 無効\n" " 1.0 標準偏差は1つの基本となる半径範囲の距離です。\n" "<0.0 負の値は揺らぎを生成しません。" #: ../brushlib/brushsettings.py:59 msgid "Offset by speed" -msgstr "速さでずらす" +msgstr "速度依存オフセット" #: ../brushlib/brushsettings.py:59 msgid "" @@ -287,42 +364,58 @@ "> 0 draw where the pointer moves to\n" "< 0 draw where the pointer comes from" msgstr "" -"ポインタの速さに応じて位置を変更します。\n" +"ポインタの速さに応じてポインタの位置を変更します。\n" "=0 無効\n" "> 0 ポインタの移動先に描く\n" "<0 ポインタの移動元に描く" #: ../brushlib/brushsettings.py:60 msgid "Offset by speed filter" -msgstr "速度フィルタでずらす" +msgstr "「速度依存オフセット」フィルタ" #: ../brushlib/brushsettings.py:60 msgid "How slow the offset goes back to zero when the cursor stops moving" -msgstr "カーソルが変化しないとき、ずれの位置がゼロに戻るのをどの程度遅らせるか。" +msgstr "" +"カーソルの動きが止まったときに、「速度依存オフセット」の値が0に戻るまでの速さ" +"を指定します。" #: ../brushlib/brushsettings.py:61 msgid "Slow position tracking" -msgstr "追従の遅延" +msgstr "手ブレ補正(遅延追加)" #: ../brushlib/brushsettings.py:61 -msgid "Slowdown pointer tracking speed. 0 disables it, higher values remove more jitter in cursor movements. Useful for drawing smooth, comic-like outlines." -msgstr "ポインタの追従を減速します。0は無効、それより高い値は、カーソルの揺らぎを取り除きます。漫画のような滑らかなアウトラインを描くのに便利です。" +msgid "" +"Slowdown pointer tracking speed. 0 disables it, higher values remove more " +"jitter in cursor movements. Useful for drawing smooth, comic-like outlines." +msgstr "" +"カーソルの動きに対して遅れて線が引かれるようになります。値を高くすると手ブレ" +"によるカーソルの動きを滑らかにできます。漫画のような滑らかな線を引くのに適し" +"ます。" #: ../brushlib/brushsettings.py:62 msgid "Slow tracking per dab" -msgstr "ダブごとの追従の遅延" +msgstr "描点ごとに手ブレ補正(遅延追加)" #: ../brushlib/brushsettings.py:62 -msgid "Similar as above but at brushdab level (ignoring how much time has past, if brushdabs do not depend on time)" -msgstr "上記と同様ですが、ブラシのダブのレベル。(ブラシのダブが時間に依存しない場合、経過した時間は無視されます)" +msgid "" +"Similar as above but at brushdab level (ignoring how much time has past, if " +"brushdabs do not depend on time)" +msgstr "" +"手ブレ補正と同様ですが、ブラシの描点ごとに補正します。(時間に依存するブラシを" +"使っていた場合でも、線を引くためにかかった時間は無視されます)" #: ../brushlib/brushsettings.py:63 msgid "Tracking noise" -msgstr "追従ノイズ" +msgstr "手ブレ追加" #: ../brushlib/brushsettings.py:63 -msgid "Add randomness to the mouse pointer; this usually generates many small lines in random directions; maybe try this together with 'slow tracking'" -msgstr "マウスポインタにランダム性を追加します。これは通常ランダムな方向に多くの小さな線を生成します。「追従の遅延」と一緒にこれを試してみてください。" +msgid "" +"Add randomness to the mouse pointer; this usually generates many small lines " +"in random directions; maybe try this together with 'slow tracking'" +msgstr "" +"線を引くときにランダムに揺れを追加します。その結果、線がバラバラに別れていろ" +"んな方向を向いた多数の細かい線を引くようになります。手ブレ補正と一緒に使って" +"みては?" #: ../brushlib/brushsettings.py:65 msgid "Color hue" @@ -342,16 +435,18 @@ #: ../brushlib/brushsettings.py:68 msgid "Save color" -msgstr "色の保存" +msgstr "色を保存" #: ../brushlib/brushsettings.py:68 msgid "" -"When selecting a brush, the color can be restored to the color that the brush was saved with.\n" +"When selecting a brush, the color can be restored to the color that the " +"brush was saved with.\n" " 0.0 do not modify the active color when selecting this brush\n" " 0.5 change active color towards brush color\n" " 1.0 set the active color to the brush color when selected" msgstr "" -"ブラシを選択する際、ブラシと一緒に保存されている選択色を復元することができます。\n" +"ブラシを選択する際、ブラシと一緒に保存されている選択色を復元することができま" +"す。\n" " 0.0 ブラシを選択する際、選択色を変更することはありません。\n" " 0.5 ブラシの色に向けて選択色を変化させます。\n" " 1.0 ブラシの色は選択色に設定されます。" @@ -374,7 +469,7 @@ #: ../brushlib/brushsettings.py:70 msgid "Change color lightness (HSL)" -msgstr "明度を変更 (HSL)" +msgstr "明るさを変更(HSL)" #: ../brushlib/brushsettings.py:70 msgid "" @@ -390,7 +485,7 @@ #: ../brushlib/brushsettings.py:71 msgid "Change color satur. (HSL)" -msgstr "彩度を変更 (HSL)" +msgstr "彩度を変更(HSL)" #: ../brushlib/brushsettings.py:71 msgid "" @@ -406,91 +501,99 @@ #: ../brushlib/brushsettings.py:72 msgid "Change color value (HSV)" -msgstr "明度を変更 (HSV)" +msgstr "明度を変更(HSV)" #: ../brushlib/brushsettings.py:72 msgid "" -"Change the color value (brightness, intensity) using the HSV color model. HSV changes are applied before HSL.\n" +"Change the color value (brightness, intensity) using the HSV color model. " +"HSV changes are applied before HSL.\n" "-1.0 darker\n" " 0.0 disable\n" " 1.0 brigher" msgstr "" -"HSVカラーモデルを使用して色の値(明るさ、輝度)を変更します。 HSVの変更は HSLの前に適用されています。\n" +"HSVカラーモデルを使用して色の値(明るさ、輝度)を変更します。 HSVの変更は HSL" +"の前に適用されています。\n" "-1.0 より暗く\n" " 0.0 無効\n" " 1.0 より明るく" #: ../brushlib/brushsettings.py:73 msgid "Change color satur. (HSV)" -msgstr "彩度を変更 (HSV)" +msgstr "彩度を変更(HSV)" #: ../brushlib/brushsettings.py:73 msgid "" -"Change the color saturation using the HSV color model. HSV changes are applied before HSL.\n" +"Change the color saturation using the HSV color model. HSV changes are " +"applied before HSL.\n" "-1.0 more grayish\n" " 0.0 disable\n" " 1.0 more saturated" msgstr "" -"HSVカラーモデルを使用して彩度を変更します。 HSVの変更は HSLの前に適用されています。\n" +"HSVカラーモデルを使用して彩度を変更します。 HSVの変更は HSLの前に適用されてい" +"ます。\n" "-1.0 よりグレイに\n" " 0.0 無効\n" " 1.0 より鮮やかに" -#: ../brushlib/brushsettings.py:74 -#: ../gui/brushsettingswindow.py:104 +#: ../brushlib/brushsettings.py:74 ../gui/brushsettingswindow.py:104 msgid "Smudge" -msgstr "擦りつけ" +msgstr "混色" #: ../brushlib/brushsettings.py:74 msgid "" -"Paint with the smudge color instead of the brush color. The smudge color is slowly changed to the color you are painting on.\n" +"Paint with the smudge color instead of the brush color. The smudge color is " +"slowly changed to the color you are painting on.\n" " 0.0 do not use the smudge color\n" " 0.5 mix the smudge color with the brush color\n" " 1.0 use only the smudge color" msgstr "" -"擦りつける色(ブラシの色とブラシの下の画像色で混色)で描画します。擦りつける色は描画されながら色が徐々に変化します。\n" -" 0.0 ブラシ色のみ、擦りつける色は使用しません\n" -" 0.5 擦りつけるはブラシ色と下の色を混色します\n" -" 1.0 取得した下の色のみが擦りつける色になります" +"ブラシの色とキャンバス上の色を混色して色を塗ります。描画色はブラシの色から" +"キャンバス上の色に次第に変わっていきます。\n" +" 0.0: 混色なし\n" +" 0.5: 混色した色とブラシの色を1:1で混合\n" +" 1.0: 混色した色のみ(ブラシの色が補填されません)" #: ../brushlib/brushsettings.py:75 msgid "Smudge length" -msgstr "擦りつけの間隔" +msgstr "混色する長さ" #: ../brushlib/brushsettings.py:75 msgid "" -"This controls how fast the smudge color becomes the color you are painting on.\n" -"0.0 immediately update the smudge color (requires more CPU cycles because of the frequent color checks)\n" +"This controls how fast the smudge color becomes the color you are painting " +"on.\n" +"0.0 immediately update the smudge color (requires more CPU cycles because of " +"the frequent color checks)\n" "0.5 change the smudge color steadily towards the canvas color\n" "1.0 never change the smudge color" msgstr "" -"このコントロールは、擦りつける色がどの程度の速さでブラシの下の画像色になるか。\n" -"0.0 擦りける色をすぐに変更 (頻繁に色を取得し、多くのCPUサイクルを必要とします)\n" -"0.5 擦りける色を徐々にブラシの下の色に変化させます\n" -"1.0 擦りつける色は変化しません" +"混色時にブラシの色がキャンバス上の色に変わっていく速さを指定します。\n" +"0.0: ブラシの色がすぐにキャンバス上の色に変化(高負荷)\n" +"0.5: ブラシの色が徐々にキャンバス上の色に変化\n" +"1.0: ブラシの色の変化なし" #: ../brushlib/brushsettings.py:76 msgid "Smudge radius" -msgstr "擦りつけの半径" +msgstr "混色の半径" #: ../brushlib/brushsettings.py:76 msgid "" -"This modifies the radius of the circle where color is picked up for smudging.\n" +"This modifies the radius of the circle where color is picked up for " +"smudging.\n" " 0.0 use the brush radius\n" "-0.7 half the brush radius (fast, but not always intuitive)\n" "+0.7 twice the brush radius\n" "+1.6 five times the brush radius (slow performance)" msgstr "" -"この設定は、擦りつける色を取得する範囲の円の半径\n" -" 0.0 ブラシの半径を使用\n" -"-0.7 ブラシの半径の半分 (速い,しかし感覚的ではない)\n" -"+0.7 ブラシの半径の 2倍\n" -"+1.6 ブラシの半径の 5倍(パフォーマンスの低下)" +"この設定は、キャンバス上の色を取得する際の範囲を指定します。指定した範囲内の" +"色の平均値をキャンバスの色として利用します。\n" +" 0.0: ブラシの半径と同じ範囲\n" +"-0.7: ブラシの半径の半分の範囲 (速いが予想と異なる結果になる可能性あり)\n" +"+0.7: ブラシの半径の2倍の範囲\n" +"+1.6: ブラシの半径の5倍の範囲(パフォーマンスが低下)" -#: ../brushlib/brushsettings.py:77 -#: ../gui/stock.py:52 +#: ../brushlib/brushsettings.py:77 ../gui/stock.py:53 msgid "Eraser" -msgstr "消しゴム" +msgstr "消しゴム" #: ../brushlib/brushsettings.py:77 msgid "" @@ -506,33 +609,46 @@ #: ../brushlib/brushsettings.py:79 msgid "Stroke threshold" -msgstr "ストロークのしきい値" +msgstr "開始しきい値" #: ../brushlib/brushsettings.py:79 -msgid "How much pressure is needed to start a stroke. This affects the stroke input only. Mypaint does not need a minimal pressure to start drawing." -msgstr "ストローク開始にどの程度の筆圧が必要か。これはストローク入力のみに作用します。Mypaintは、描画開始に最小限の筆圧を必要としません。" +msgid "" +"How much pressure is needed to start a stroke. This affects the stroke input " +"only. Mypaint does not need a minimal pressure to start drawing." +msgstr "" +"筆圧が指定した値を超えた場合に、「ストローク」パラメータが増加を開始します。" +"この項目は「ストローク」のパラメータのみに作用します。Mypaintでは筆圧がない場" +"合でも(ポインタの動きだけで)描画を行うことができます。" #: ../brushlib/brushsettings.py:80 msgid "Stroke duration" -msgstr "ストローク経過時間" +msgstr "基準長" #: ../brushlib/brushsettings.py:80 -msgid "How far you have to move until the stroke input reaches 1.0. This value is logarithmic (negative values will not inverse the process)." -msgstr "ストローク入力が1.0に達するまで、どのくらい移動するか。この値は対数的です。(マイナスの値は逆のプロセスをしません)" +msgid "" +"How far you have to move until the stroke input reaches 1.0. This value is " +"logarithmic (negative values will not inverse the process)." +msgstr "" +"「ストローク」パラメータが1.0になるまでに必要なポインタの移動距離を指定しま" +"す。この値は対数値で指定します。(マイナスの値は逆のプロセスをしません)" #: ../brushlib/brushsettings.py:81 msgid "Stroke hold time" -msgstr "ストローク保留時間" +msgstr "残留期間" #: ../brushlib/brushsettings.py:81 msgid "" -"This defines how long the stroke input stays at 1.0. After that it will reset to 0.0 and start growing again, even if the stroke is not yet finished.\n" +"This defines how long the stroke input stays at 1.0. After that it will " +"reset to 0.0 and start growing again, even if the stroke is not yet " +"finished.\n" "2.0 means twice as long as it takes to go from 0.0 to 1.0\n" "9.9 and bigger stands for infinite" msgstr "" -"これはストローク入力が1.0に留まる時間を定義します。0.0にリセット後、ストロークが終了されていなくても再び増加し始めます。\n" -"2.0 は、0.0から1.0に行くのに 2倍の長さが掛かる事を意味します。\n" -"9.9 以上は無限" +"これは「ストローク」パラメータが1.0の値に留まる時間を定義します。この値で指定" +"した時間が経過すると、(ストロークが終了していなくても)「ストローク」パラメー" +"タは0.0にリセットされ、再び増加し始めます。\n" +"2.0 は、0.0から1.0に行くのに 2倍の時間が掛かる事を意味します。\n" +"9.9 以上の場合、「ストローク」パラメータは一度1.0になると永久に固定されます" #: ../brushlib/brushsettings.py:82 msgid "Custom input" @@ -540,38 +656,55 @@ #: ../brushlib/brushsettings.py:82 msgid "" -"Set the custom input to this value. If it is slowed down, move it towards this value (see below). The idea is that you make this input depend on a mixture of pressure/speed/whatever, and then make other settings depend on this 'custom input' instead of repeating this combination everywhere you need it.\n" -"If you make it change 'by random' you can generate a slow (smooth) random input." -msgstr "" -"カスタム入力値を設定します。速度低下した場合、この値で移動します。(下記参照)\n" -"考え方としては、この入力を筆圧、速度、その他何でも混合し依存させることです。他の設定は、必要とするあらゆる所の組み合わせを繰り返しているよりは、この「カスタム入力」に依存させることです。\n" -"「ランダム」で変更できるようであれば、ゆっくりな(滑らかな)ランダム入力を生成することができます。" +"Set the custom input to this value. If it is slowed down, move it towards " +"this value (see below). The idea is that you make this input depend on a " +"mixture of pressure/speed/whatever, and then make other settings depend on " +"this 'custom input' instead of repeating this combination everywhere you " +"need it.\n" +"If you make it change 'by random' you can generate a slow (smooth) random " +"input." +msgstr "" +"カスタム入力値を設定します。速度低下した場合、この値で移動します。(下記参" +"照)\n" +"考え方としては、この入力を筆圧、速度、その他何でも混合し依存させることです。" +"他の設定は、必要とするあらゆる所の組み合わせを繰り返しているよりは、この「カ" +"スタム入力」に依存させることです。\n" +"「ランダム」で変更できるようであれば、ゆっくりな(滑らかな)ランダム入力を生" +"成することができます。" #: ../brushlib/brushsettings.py:83 msgid "Custom input filter" -msgstr "カスタム入力フィルタ" +msgstr "「カスタム入力」フィルタ" #: ../brushlib/brushsettings.py:83 msgid "" -"How slow the custom input actually follows the desired value (the one above). This happens at brushdab level (ignoring how much time has past, if brushdabs do not depend on time).\n" +"How slow the custom input actually follows the desired value (the one " +"above). This happens at brushdab level (ignoring how much time has past, if " +"brushdabs do not depend on time).\n" "0.0 no slowdown (changes apply instantly)" msgstr "" -"カスタム入力がどの程度遅れるか、実際の目的の値に従います(上記の)。これはブラシのダブのレベルで発生します。(ブラシのダブが時間に依存しない場合、どの程度時間が過ぎたかは無視します)\n" -"0.0 減速しません。(変更が即座に適用されます)" +"「カスタム入力」パラメータ上記で指定された値に達するまでにどの程度遅延するか" +"を指定します。この遅延は描点を描く度に計算されます。(描点の描画が時間に依存し" +"ない設定の場合、移動の度に遅延が計算されますが、ストローク開始からの経過時間" +"は考慮されません)\n" +"0.0 減速なし(変更が即座に適用されます)" #: ../brushlib/brushsettings.py:85 msgid "Elliptical dab: ratio" -msgstr "楕円形状ダブ:比率" +msgstr "楕円形の描点:縦横比" #: ../brushlib/brushsettings.py:85 -msgid "Aspect ratio of the dabs; must be >= 1.0, where 1.0 means a perfectly round dab. TODO: linearize? start at 0.0 maybe, or log?" +msgid "" +"Aspect ratio of the dabs; must be >= 1.0, where 1.0 means a perfectly round " +"dab. TODO: linearize? start at 0.0 maybe, or log?" msgstr "" -"ダブの縦横比:1.0かそれ以上でなければなりません。\n" -"1.0は真円のダブを意味します。" +"描点の縦横比:1.0かそれ以上でなければなりません。\n" +"1.0は真円の描点を意味します。(TODO: 0.0からはじまる線形値にするか対数値にする" +"か?)" #: ../brushlib/brushsettings.py:86 msgid "Elliptical dab: angle" -msgstr "楕円形状ダブ:角度" +msgstr "楕円形の描点:角度" #: ../brushlib/brushsettings.py:86 msgid "" @@ -580,26 +713,32 @@ " 45.0 45 degrees, turned clockwise\n" " 180.0 horizontal again" msgstr "" -"楕円形状ダブを傾斜させる角度\n" -" 0.0 水平ダブ\n" -" 45.0 45度 時計回り\n" -" 180.0 再び水平" +"楕円形状の描点を傾斜させる角度\n" +" 0.0 水平の描点\n" +" 45.0 時計回りに45度傾斜\n" +" 180.0 再び水平の描点に戻る" #: ../brushlib/brushsettings.py:87 msgid "Direction filter" -msgstr "方向フィルタ" +msgstr "「方向」フィルタ" #: ../brushlib/brushsettings.py:87 -msgid "A low value will make the direction input adapt more quickly, a high value will make it smoother" -msgstr "低い値は方向の入力がより素早く適応できるようになり、高い値はより滑らかなになります。" +msgid "" +"A low value will make the direction input adapt more quickly, a high value " +"will make it smoother" +msgstr "" +"「方向」パラメータの変化の度合いを指定します。値が低い場合は「方向」パラメー" +"タがポインタの動きに合わせて迅速に変化し、値が大きい場合はより滑らかに変化し" +"ます。" #: ../brushlib/brushsettings.py:89 msgid "Lock alpha" -msgstr "アルファ値を固定" +msgstr "アルファ値を保護" #: ../brushlib/brushsettings.py:89 msgid "" -"Do not modify the alpha channel of the layer (paint only where there is paint already)\n" +"Do not modify the alpha channel of the layer (paint only where there is " +"paint already)\n" " 0.0 normal painting\n" " 0.5 half of the paint gets applied normally\n" " 1.0 alpha channel fully locked" @@ -609,12 +748,22 @@ " 0.5 描画の半分が標準に適用されます\n" " 1.0 アルファチャンネルを完全にロック" +#: ../brushlib/brushsettings.py:90 ../gui/stock.py:56 +#, fuzzy +msgid "Colorize" +msgstr "色" + +#: ../brushlib/brushsettings.py:90 +msgid "" +"Colorize the target layer, setting its hue and saturation from the active " +"brush colour while retaining its value and alpha." +msgstr "" + #: ../gui/backgroundwindow.py:23 msgid "Save as Default" msgstr "デフォルトとして保存" -#: ../gui/backgroundwindow.py:25 -#: ../gui/drawwindow.py:287 +#: ../gui/backgroundwindow.py:25 ../gui/drawwindow.py:298 msgid "Background" msgstr "背景" @@ -622,9 +771,8 @@ msgid "Pattern" msgstr "パターン" -#: ../gui/backgroundwindow.py:45 -#: ../gui/brushsettingswindow.py:108 -#: ../gui/drawwindow.py:220 +#: ../gui/backgroundwindow.py:45 ../gui/brushsettingswindow.py:108 +#: ../gui/drawwindow.py:230 msgid "Color" msgstr "色" @@ -634,26 +782,33 @@ #: ../gui/backgroundwindow.py:123 #, python-format -msgid "The background %s was ignored because it has an alpha channel. Please remove it." -msgstr "アルファチャンネルを含むので背景 %s は無視されました。それを除去してください。" +msgid "" +"The background %s was ignored because it has an alpha channel. Please remove " +"it." +msgstr "" +"アルファチャンネルを含むので背景 %s は無視されました。それを除去してくださ" +"い。" #: ../gui/backgroundwindow.py:127 #, python-format -msgid "The background %s was ignored because it is the wrong size. Only (N*%d)x(M*%d) is supported." -msgstr "サイズが合わないので背景 %s は無視されました。 (N*%d)x(M*%d) のみサポートされています。" +msgid "" +"The background %s was ignored because it is the wrong size. Only (N*%d)x(M*%" +"d) is supported." +msgstr "" +"サイズが合わないので背景 %s は無視されました。 (N*%d)x(M*%d) のみサポートされ" +"ています。" -#: ../gui/brushcreationwidget.py:46 -#: ../gui/brushcreationwidget.py:66 +#: ../gui/brushcreationwidget.py:46 ../gui/brushcreationwidget.py:66 msgid "(unnamed brush)" -msgstr "(名前の付いていないブラシ)" +msgstr "(名称未設定ブラシ)" #: ../gui/brushcreationwidget.py:50 msgid "Save Settings" -msgstr "設定値を保存" +msgstr "設定を保存" #: ../gui/brushcreationwidget.py:51 msgid "Add As New" -msgstr "新規追加" +msgstr "新規ブラシとして追加" #: ../gui/brushcreationwidget.py:52 msgid "Edit Brush Icon" @@ -667,8 +822,7 @@ msgid "Remove..." msgstr "削除..." -#: ../gui/brushcreationwidget.py:101 -#: ../gui/brushcreationwidget.py:150 +#: ../gui/brushcreationwidget.py:101 ../gui/brushcreationwidget.py:150 msgid "No brush selected!" msgstr "ブラシが選択されていません!" @@ -678,29 +832,26 @@ #: ../gui/brushcreationwidget.py:116 msgid "A brush with this name already exists!" -msgstr "同名のブラシがすでにあります!" +msgstr "既に同名のブラシが存在します!" -#: ../gui/brushcreationwidget.py:142 -#: ../gui/brushcreationwidget.py:242 +#: ../gui/brushcreationwidget.py:142 ../gui/brushcreationwidget.py:242 msgid "No brush selected, please use \"Add As New\" instead." -msgstr "ブラシが選択されていません。代わりに「新規追加」を使用してください。" +msgstr "" +"ブラシが選択されていません。「新規ブラシとして追加」を利用してください。" #: ../gui/brushcreationwidget.py:152 msgid "Really delete brush from disk?" msgstr "ブラシをディスクから削除してもいいですか?" -#: ../gui/brushcreationwidget.py:203 -#: ../gui/drawwindow.py:218 +#: ../gui/brushcreationwidget.py:203 ../gui/drawwindow.py:228 msgid "Edit" msgstr "編集" -#: ../gui/brushcreationwidget.py:207 -#: ../gui/document.py:97 +#: ../gui/brushcreationwidget.py:207 ../gui/document.py:94 msgid "Clear" msgstr "消去" -#: ../gui/brushcreationwidget.py:213 -#: ../gui/filehandling.py:63 +#: ../gui/brushcreationwidget.py:213 ../gui/filehandling.py:63 msgid "Save" msgstr "保存" @@ -746,15 +897,15 @@ #: ../gui/brushmanager.py:81 msgid "Experimental" -msgstr "試用" +msgstr "実験的" -#: ../gui/brushmanager.py:714 +#: ../gui/brushmanager.py:719 msgid "Unknown Brush" msgstr "不明なブラシ" #: ../gui/brushmodifier.py:56 msgid "Paint normally" -msgstr "標準の描画" +msgstr "通常モード" #: ../gui/brushmodifier.py:59 msgid "Eraser Mode: remove strokes using the current brush" @@ -762,7 +913,14 @@ #: ../gui/brushmodifier.py:62 msgid "Lock Alpha: paint over existing strokes only, using the current brush" -msgstr "アルファ値を固定: 画面上の描画されたストロークのみ、現在のブラシで描画します。" +msgstr "" +"アルファ値を保護: 画面上の描画されたストロークのみ、現在のブラシで描画しま" +"す。" + +#: ../gui/brushmodifier.py:65 +#, fuzzy +msgid "Colorize: alter Hue and Saturation with the current brush" +msgstr "選択色を彩度展開" #: ../gui/brushselectionwindow.py:233 msgid "Try right click, middle click or Ctrl click" @@ -788,9 +946,8 @@ msgid "Download brushes (in web browser)" msgstr "ブラシのダウンロード (ウェブブラウザで)" -#: ../gui/brushselectionwindow.py:408 -#: ../gui/drawwindow.py:250 -#: ../gui/drawwindow.py:923 +#: ../gui/brushselectionwindow.py:408 ../gui/drawwindow.py:260 +#: ../gui/drawwindow.py:975 msgid "Import brush package..." msgstr "ブラシパッケージのインポート..." @@ -804,16 +961,15 @@ #: ../gui/brushselectionwindow.py:433 msgid "A group with this name already exists!" -msgstr "同名のグループがすでにあります!" +msgstr "同名のグループが既に存在します!" #: ../gui/brushselectionwindow.py:436 msgid "Export brush pack..." msgstr "ブラシパックのエクスポート..." -#: ../gui/brushselectionwindow.py:437 -#: ../gui/drawwindow.py:924 +#: ../gui/brushselectionwindow.py:437 ../gui/drawwindow.py:976 msgid "MyPaint brush package (*.zip)" -msgstr "MyPaintブラシパッケージ (*.zip)" +msgstr "MyPaintブラシパッケージ(*.zip)" #: ../gui/brushselectionwindow.py:443 #, python-format @@ -822,21 +978,20 @@ #: ../gui/brushselectionwindow.py:446 msgid "This group can not be deleted (try to empty it first)." -msgstr "このグループは削除できません (まず空にしてみてください)" +msgstr "このグループは削除できません(まずグループを空にしてください)" -#: ../gui/brushsettingswindow.py:32 -#: ../gui/drawwindow.py:293 +#: ../gui/brushsettingswindow.py:32 ../gui/drawwindow.py:304 msgid "Brush Settings Editor" msgstr "ブラシ設定エディタ" #: ../gui/brushsettingswindow.py:56 msgid "Back to settings" -msgstr "設定に戻る" +msgstr "ブラシ設定に戻る" #. Live update (goes to the end) #: ../gui/brushsettingswindow.py:64 msgid "Update the last canvas stroke in realtime" -msgstr "画像上の最後のストロークに適用し、リアルタイムに更新します。" +msgstr "直近のキャンバスへのストロークの描画をリアルタイムに更新する" #: ../gui/brushsettingswindow.py:101 msgid "Basic" @@ -844,32 +999,31 @@ #: ../gui/brushsettingswindow.py:103 msgid "Dabs" -msgstr "ダブ" +msgstr "ブラシ描点" #: ../gui/brushsettingswindow.py:105 msgid "Speed" -msgstr "速さ" +msgstr "スピード" #: ../gui/brushsettingswindow.py:106 msgid "Tracking" -msgstr "追従性" +msgstr "描線の修正" #: ../gui/brushsettingswindow.py:138 msgid "Reset to default value" -msgstr "既定値に戻します。" +msgstr "初期値に戻す" #: ../gui/brushsettingswindow.py:143 msgid "No additional configuration" -msgstr "追加設定なし" +msgstr "これ以外の設定項目はありません" -#: ../gui/brushsettingswindow.py:148 -#: ../gui/brushsettingswindow.py:191 +#: ../gui/brushsettingswindow.py:148 ../gui/brushsettingswindow.py:191 msgid "Add input value mapping" -msgstr "入力値の機能設定を追加します。" +msgstr "入力値のマッピングを追加" #: ../gui/brushsettingswindow.py:193 msgid "Modify input value mapping" -msgstr "入力値の機能設定を変更します。" +msgstr "入力値のマッピングを修正" #: ../gui/colorsamplerwindow.py:166 msgid "Recently used colors" @@ -886,7 +1040,7 @@ #. : Blank outer area, outer space #: ../gui/colorsamplerwindow.py:197 msgid "Change Saturation and Value" -msgstr "彩度と明度を変更します。" +msgstr "彩度と明度を変更" #: ../gui/colorsamplerwindow.py:199 msgid "Harmony color switcher" @@ -894,23 +1048,23 @@ #: ../gui/colorsamplerwindow.py:200 msgid "Change Hue" -msgstr "色相を変更します。" +msgstr "色相を変更" #: ../gui/colorsamplerwindow.py:201 msgid "Current color vs. Last Used" -msgstr "選択色 対 前回の色" +msgstr "現在の色 / 最後に利用された色" #: ../gui/colorsamplerwindow.py:202 msgid "Pick a screen color" -msgstr "画面の色を抽出" +msgstr "画面上の色を採取" #: ../gui/colorsamplerwindow.py:929 msgid "Change Hue, Saturation and Value" -msgstr "色相,彩度,明度を変更します。" +msgstr "HSVを変更" #: ../gui/colorsamplerwindow.py:1000 msgid "Change Red, Green and Blue components" -msgstr "レッド,グリーン,ブルー成分を変更します。" +msgstr "RGBを変更" #: ../gui/colorsamplerwindow.py:1062 msgid "RGB" @@ -926,8 +1080,7 @@ msgstr "色の履歴" #. Colour details -#: ../gui/colorsamplerwindow.py:1073 -#: ../gui/functionwindow.py:154 +#: ../gui/colorsamplerwindow.py:1073 ../gui/functionwindow.py:154 msgid "Details" msgstr "詳細" @@ -1015,9 +1168,7 @@ msgid "MyPaint color selector" msgstr "MyPaint 色を選択" -#: ../gui/dialogs.py:54 -#: ../gui/layerswindow.py:62 -#: ../gui/layerswindow.py:226 +#: ../gui/dialogs.py:54 ../gui/layerswindow.py:62 ../gui/layerswindow.py:226 msgid "Name" msgstr "名前" @@ -1025,13 +1176,11 @@ msgid "Overwrite brush?" msgstr "ブラシを上書きしますか?" -#: ../gui/dialogs.py:98 -#: ../gui/dialogs.py:156 +#: ../gui/dialogs.py:98 ../gui/dialogs.py:156 msgid "Replace" msgstr "置換" -#: ../gui/dialogs.py:101 -#: ../gui/dialogs.py:159 +#: ../gui/dialogs.py:101 ../gui/dialogs.py:159 msgid "Rename" msgstr "名前の変更 " @@ -1071,9 +1220,10 @@ "Do you want to replace it, or should the new group be renamed?\n" "If you replace it, the brushes may be moved to a group called `%s'." msgstr "" -"グループ名「%s」はすでにあります。\n" -"置き換えますか? または新しいグループ名に変更しますか?\n" -"置き換えると, ブラシを「%s」のグループに移動することができます。" +"'%s'という名前のグループは既に存在します。\n" +"既存のグループを置き換えますか?それとも、新しいグループの名前を変更します" +"か?\n" +"もし置き換えると、元のグループのブラシは'%s'というグループに移されます。" #: ../gui/dialogs.py:257 msgid "Import brush package?" @@ -1082,495 +1232,501 @@ #: ../gui/dialogs.py:269 #, python-format msgid "Do you really want to import package `%s'?" -msgstr "パッケージ「%s」をインポートしますか?" +msgstr "本当にパッケージ'%s'をインポートしますか?" #: ../gui/dialogs.py:285 msgid "Color details" msgstr "色の詳細" #. Quick brush changer -#: ../gui/dialogs.py:382 -#: ../gui/toolbar.py:300 +#: ../gui/dialogs.py:382 ../gui/toolbar.py:300 msgid "Change Brush" msgstr "ブラシを変更" -#: ../gui/document.py:81 +#: ../gui/document.py:78 msgid "Brighter" msgstr "より明るく" -#: ../gui/document.py:82 +#: ../gui/document.py:79 msgid "Smaller" msgstr "より小さく" -#: ../gui/document.py:83 +#: ../gui/document.py:80 msgid "More Opaque" msgstr "より不透明に" -#: ../gui/document.py:84 +#: ../gui/document.py:81 msgid "Less Opaque" msgstr "より透明に" -#: ../gui/document.py:85 -#: ../gui/preferenceswindow.py:37 +#: ../gui/document.py:82 ../gui/preferenceswindow.py:37 msgid "Pick Context (layer, brush and color)" msgstr "コンテキストを抽出選択(レイヤー,ブラシ,色)" -#: ../gui/document.py:87 +#: ../gui/document.py:84 msgid "Darker" msgstr "より暗く" -#: ../gui/document.py:88 +#: ../gui/document.py:85 msgid "Change Color Hue (counter-clockwise)" msgstr "色相の変更 (反時計回り)" -#: ../gui/document.py:89 +#: ../gui/document.py:86 msgid "Change Color Hue (clockwise)" -msgstr "色相の変更 (時計回り)" +msgstr "時計回りに色相を変更" -#: ../gui/document.py:90 +#: ../gui/document.py:87 msgid "Purer" msgstr "彩度を上げる" -#: ../gui/document.py:91 +#: ../gui/document.py:88 msgid "Grayer" msgstr "彩度を下げる" -#: ../gui/document.py:92 +#: ../gui/document.py:89 msgid "Bigger" msgstr "より大きく" #. Context actions are also added in init_context_actions -#: ../gui/document.py:95 +#: ../gui/document.py:92 msgid "Save to Most Recently Restored" msgstr "直前に復元されたブラシを保存します。" -#: ../gui/document.py:98 +#: ../gui/document.py:95 msgid "Copy to Clipboard" msgstr "クリップボードにコピー" -#: ../gui/document.py:99 +#: ../gui/document.py:96 msgid "Paste Clipboard (Replace Layer)" msgstr "クリップボードから貼り付け(レイヤーの置き換え)" -#: ../gui/document.py:100 -#: ../gui/preferenceswindow.py:38 +#: ../gui/document.py:97 ../gui/preferenceswindow.py:38 msgid "Select Layer at Cursor" msgstr "カーソルでレイヤー選択" -#: ../gui/document.py:101 +#: ../gui/document.py:98 msgid "Next (above current)" msgstr "上のレイヤーを選択" -#: ../gui/document.py:102 +#: ../gui/document.py:99 msgid "Next (below current)" msgstr "下のレイヤーを選択" -#: ../gui/document.py:103 +#: ../gui/document.py:100 msgid "New (above current)" -msgstr "レイヤーの追加 (現在より上に)" +msgstr "新規レイヤー(現在のレイヤーの上に追加)" -#: ../gui/document.py:104 +#: ../gui/document.py:101 msgid "New (below current)" -msgstr "レイヤーの追加 (現在より下に)" +msgstr "新規レイヤー(現在のレイヤーの下に追加)" #. XXX need a batter one, but stay consistent with layerswindow for now -#: ../gui/document.py:106 -#: ../gui/layerswindow.py:115 +#: ../gui/document.py:103 ../gui/layerswindow.py:115 msgid "Merge Down" msgstr "下のレイヤーと統合" -#: ../gui/document.py:107 +#: ../gui/document.py:104 msgid "Remove" msgstr "削除" -#: ../gui/document.py:108 +#: ../gui/document.py:105 msgid "Increase Layer Opacity" -msgstr "レイヤーの不透明度を上げる" +msgstr "レイヤーの不透明度を高くする" -#: ../gui/document.py:109 +#: ../gui/document.py:106 msgid "Decrease Layer Opacity" -msgstr "レイヤーの不透明度を下げる" +msgstr "レイヤーの不透明度を低くする" -#: ../gui/document.py:111 +#: ../gui/document.py:108 msgid "Shortcuts" msgstr "ショートカット" -#: ../gui/document.py:113 +#: ../gui/document.py:110 msgid "Reset and Center" msgstr "画像を中心にリセット" -#: ../gui/document.py:114 +#: ../gui/document.py:111 msgid "Reset Zoom, Rotation and Mirroring, and recenter the document" -msgstr "画像を中心にリセット。拡大・縮小、回転、反転" +msgstr "拡大率、回転を初期化し、ドキュメントの表示位置を中央に戻す。" -#: ../gui/document.py:116 +#: ../gui/document.py:113 +msgid "Fit" +msgstr "" + +#: ../gui/document.py:114 msgid "Reset" -msgstr "リセット" +msgstr "初期化" -#: ../gui/document.py:117 -#: ../gui/preferenceswindow.py:40 +#: ../gui/document.py:115 ../gui/preferenceswindow.py:40 msgid "Zoom" msgstr "拡大・縮小" -#: ../gui/document.py:118 +#: ../gui/document.py:116 msgid "Rotation" msgstr "回転" -#: ../gui/document.py:119 +#: ../gui/document.py:117 msgid "Mirror" msgstr "反転" -#: ../gui/document.py:120 +#: ../gui/document.py:118 msgid "Zoom In" msgstr "拡大" -#: ../gui/document.py:121 +#: ../gui/document.py:119 msgid "Increase magnification" msgstr "拡大" -#: ../gui/document.py:122 +#: ../gui/document.py:120 msgid "Zoom Out" msgstr "縮小" -#: ../gui/document.py:123 +#: ../gui/document.py:121 msgid "Decrease magnification" msgstr "縮小" -#: ../gui/document.py:125 +#: ../gui/document.py:123 msgid "Rotate the view left" msgstr "反時計回りに回転" -#: ../gui/document.py:128 +#: ../gui/document.py:126 msgid "Rotate the view right" msgstr "時計回りに回転" -#: ../gui/document.py:131 +#: ../gui/document.py:129 msgid "Mirror: flip the view left to right" msgstr "左右反転" -#: ../gui/document.py:134 +#: ../gui/document.py:132 msgid "Flip the view upside-down" msgstr "上下反転" -#: ../gui/document.py:136 +#: ../gui/document.py:134 msgid "Layer Solo" -msgstr "単独レイヤー" +msgstr "現在のレイヤーのみ" #. TODO: make toggle action -#: ../gui/document.py:137 +#: ../gui/document.py:135 msgid "Hide Layers Above Current" -msgstr "現在のレイヤーより上を非表示" +msgstr "現在のレイヤーより前面のレイヤーを非表示" -#: ../gui/document.py:150 +#: ../gui/document.py:148 msgid "Print Brush Input Values to Console" -msgstr "コンソールへブラシの入力値を表示します。" +msgstr "ブラシの入力値をコンソールに表示" -#: ../gui/document.py:151 +#: ../gui/document.py:149 msgid "Visualize Rendering" msgstr "描画を視覚的に表示" -#: ../gui/document.py:152 +#: ../gui/document.py:150 msgid "Disable GTK Double Buffering" -msgstr "GTKダブルバッファリングを無効にします。" +msgstr "GTKのダブルバッファリング機能を無効化" -#: ../gui/document.py:161 +#: ../gui/document.py:159 #, python-format msgid "Restore Brush %d" -msgstr "ブラシ %d を復元します。" +msgstr "ブラシ %d を復元" -#: ../gui/document.py:163 +#: ../gui/document.py:161 #, python-format msgid "Save to Brush %d" -msgstr "ブラシ %d を保存します" +msgstr "ブラシ %d を保存" -#: ../gui/document.py:644 +#: ../gui/document.py:647 #, python-format msgid "Undo %s" -msgstr "%s を元に戻す" +msgstr "「%s」を元に戻す" -#: ../gui/document.py:646 +#: ../gui/document.py:649 msgid "Undo: nothing to undo" -msgstr "元に戻す: 元に戻すには何もありません" +msgstr "これ以上元に戻せません" -#: ../gui/document.py:653 +#: ../gui/document.py:656 #, python-format msgid "Redo %s" -msgstr "%s をやり直す" +msgstr "「%s」をやり直す" -#: ../gui/document.py:655 +#: ../gui/document.py:658 msgid "Redo: nothing to redo" -msgstr "やり直し: やり直しは何もありません" +msgstr "これ以上やり直しできません" #. name, stock id, label, accelerator, tooltip, callback -#: ../gui/drawwindow.py:214 +#: ../gui/drawwindow.py:224 msgid "File" msgstr "ファイル" #. FIXME: should do this periodically, not only on quit -#: ../gui/drawwindow.py:215 -#: ../gui/drawwindow.py:907 +#: ../gui/drawwindow.py:225 ../gui/drawwindow.py:959 msgid "Quit" msgstr "終了" -#: ../gui/drawwindow.py:216 +#: ../gui/drawwindow.py:226 msgid "Toggle Document Frame" -msgstr "画像フレーム表示切り替え" +msgstr "画像フレームの表示/非表示の切り替え" -#: ../gui/drawwindow.py:221 -#: ../gui/preferenceswindow.py:36 +#: ../gui/drawwindow.py:231 ../gui/preferenceswindow.py:36 msgid "Pick Color" -msgstr "色の抽出" +msgstr "色の採取" -#: ../gui/drawwindow.py:222 -#: ../gui/preferenceswindow.py:46 +#: ../gui/drawwindow.py:232 ../gui/preferenceswindow.py:47 msgid "Color History" msgstr "色の履歴" -#: ../gui/drawwindow.py:223 +#: ../gui/drawwindow.py:233 msgid "Color Changer (crossed bowl)" msgstr "カラーチェンジャー (クロスボール)" -#: ../gui/drawwindow.py:224 +#: ../gui/drawwindow.py:234 msgid "Color Changer (washed)" msgstr "カラーチェンジャー (カラーウォッシュ)" -#: ../gui/drawwindow.py:225 -#: ../gui/preferenceswindow.py:45 +#: ../gui/drawwindow.py:235 ../gui/preferenceswindow.py:46 msgid "Color Ring" msgstr "カラーホイール" -#: ../gui/drawwindow.py:226 +#: ../gui/drawwindow.py:236 msgid "Color Details" msgstr "色の詳細" -#: ../gui/drawwindow.py:228 +#: ../gui/drawwindow.py:238 msgid "Brushkeys" msgstr "ブラシキー" -#: ../gui/drawwindow.py:229 +#: ../gui/drawwindow.py:239 msgid "Help!" msgstr "ヘルプ!" -#: ../gui/drawwindow.py:231 -#: ../gui/stock.py:43 +#: ../gui/drawwindow.py:241 ../gui/stock.py:44 msgid "Layers" msgstr "レイヤー" #. Scratchpad menu items -#: ../gui/drawwindow.py:234 -#: ../gui/scratchwindow.py:36 -#: ../gui/stock.py:42 +#: ../gui/drawwindow.py:244 ../gui/scratchwindow.py:36 ../gui/stock.py:43 msgid "Scratchpad" -msgstr "スクラッチパッド" +msgstr "作業パレット" -#: ../gui/drawwindow.py:235 -#: ../gui/scratchwindow.py:55 +#: ../gui/drawwindow.py:245 ../gui/scratchwindow.py:55 msgid "New Scratchpad" -msgstr "新規スクラッチパッド" +msgstr "新規の作業パレット" -#: ../gui/drawwindow.py:236 +#: ../gui/drawwindow.py:246 msgid "Load Scratchpad..." -msgstr "スクラッチパッドを読み込む..." +msgstr "作業パレットを読み込み" -#: ../gui/drawwindow.py:237 +#: ../gui/drawwindow.py:247 msgid "Save Scratchpad Now" -msgstr "スクラッチパッドを保存" +msgstr "作業パレットを保存" -#: ../gui/drawwindow.py:238 +#: ../gui/drawwindow.py:248 msgid "Save Scratchpad As..." -msgstr "スクラッチパッドに名前を付けて保存" +msgstr "作業パレットに名前を付けて保存..." -#: ../gui/drawwindow.py:239 -#: ../gui/scratchwindow.py:53 +#: ../gui/drawwindow.py:249 ../gui/scratchwindow.py:53 msgid "Revert Scratchpad" -msgstr "スクラッチパッドを元に戻す" +msgstr "作業パレットを元に戻す" -#: ../gui/drawwindow.py:240 +#: ../gui/drawwindow.py:250 msgid "Save Scratchpad as Default" -msgstr "デフォルトのスクラッチパッドとして保存" +msgstr "デフォルトの作業パレットとして保存" -#: ../gui/drawwindow.py:241 +#: ../gui/drawwindow.py:251 msgid "Clear the Default Scratchpad" -msgstr "デフォルトのスクラッチパッドを消去" +msgstr "デフォルトの作業パレットを消去" -#: ../gui/drawwindow.py:242 +#: ../gui/drawwindow.py:252 msgid "Render a Palette" -msgstr "パレットを表示" +msgstr "パレットを描き出す" -#: ../gui/drawwindow.py:243 +#: ../gui/drawwindow.py:253 msgid "Load Palette File..." -msgstr "パレットファイルを読み込む..." +msgstr "パレットファイルの読み込み..." -#: ../gui/drawwindow.py:244 +#: ../gui/drawwindow.py:254 msgid "Different Saturations of the current Color" msgstr "選択色を彩度展開" -#: ../gui/drawwindow.py:245 +#: ../gui/drawwindow.py:255 msgid "Copy Background to Scratchpad" -msgstr "背景をスクラッチパッドにコピー" +msgstr "背景を作業パレットにコピー" -#: ../gui/drawwindow.py:247 +#: ../gui/drawwindow.py:257 msgid "Brush" msgstr "ブラシ" -#: ../gui/drawwindow.py:248 +#: ../gui/drawwindow.py:258 msgid "Change Brush..." msgstr "ブラシを変更..." -#: ../gui/drawwindow.py:249 +#: ../gui/drawwindow.py:259 msgid "Download more brushes (in web browser)" msgstr "他のブラシをダウンロード (ウェブブラウザから)" -#: ../gui/drawwindow.py:252 -#: ../gui/drawwindow.py:268 +#: ../gui/drawwindow.py:262 ../gui/drawwindow.py:279 msgid "Help" msgstr "ヘルプ" -#: ../gui/drawwindow.py:253 +#: ../gui/drawwindow.py:263 msgid "Where is the Documentation?" msgstr "説明書はどこにありますか?" -#: ../gui/drawwindow.py:254 +#: ../gui/drawwindow.py:264 msgid "Change the Keyboard Shortcuts?" msgstr "キーボードショートカットを変更しますか?" -#: ../gui/drawwindow.py:255 +#: ../gui/drawwindow.py:265 msgid "About MyPaint" msgstr "MyPaintについて" -#: ../gui/drawwindow.py:257 +#: ../gui/drawwindow.py:267 msgid "Debug" msgstr "デバッグ" -#: ../gui/drawwindow.py:258 +#: ../gui/drawwindow.py:268 msgid "Print Memory Leak Info to Console (Slow!)" msgstr "コンソールへメモリリーク情報を表示します(遅い!)" -#: ../gui/drawwindow.py:259 +#: ../gui/drawwindow.py:269 msgid "Run Garbage Collector Now" -msgstr "今すぐガベージコレクタを実行します。" +msgstr "ガベージコレクタを今すぐ実行" -#: ../gui/drawwindow.py:260 +#: ../gui/drawwindow.py:270 msgid "Start/Stop Python Profiling (cProfile)" -msgstr "スタート/ストップ Python Profiling (cProfile)" +msgstr "Pythonプロファイル(cProfile)取得の開始/停止" -#: ../gui/drawwindow.py:261 +#: ../gui/drawwindow.py:271 msgid "GTK input device dialog" -msgstr "GTK 入力デバイス ダイアログボックス" +msgstr "入力デバイスダイアログ(GTK)" -#: ../gui/drawwindow.py:264 -#: ../gui/preferenceswindow.py:225 +#: ../gui/drawwindow.py:274 ../gui/preferenceswindow.py:226 #: ../gui/toolbar.py:36 msgid "View" msgstr "表示" -#: ../gui/drawwindow.py:265 +#: ../gui/drawwindow.py:275 msgid "Toolbars" -msgstr "ツールバー" +msgstr "ツールバーを表示" + +#: ../gui/drawwindow.py:276 +msgid "Feedback" +msgstr "" -#: ../gui/drawwindow.py:266 +#: ../gui/drawwindow.py:277 msgid "Popup Menu" -msgstr "ポップアップ メニュー" +msgstr "ポップアップメニューを表示" -#: ../gui/drawwindow.py:278 -#: ../gui/preferenceswindow.py:70 +#: ../gui/drawwindow.py:289 ../gui/preferenceswindow.py:71 msgid "Preferences" msgstr "設定" -#: ../gui/drawwindow.py:280 +#: ../gui/drawwindow.py:291 msgid "Test input devices" msgstr "入力デバイスのテスト" -#: ../gui/drawwindow.py:282 +#: ../gui/drawwindow.py:293 msgid "Document Frame..." -msgstr "画像フレーム..." +msgstr "画像のフレーム..." -#: ../gui/drawwindow.py:284 +#: ../gui/drawwindow.py:295 msgid "Toggle the Layers list" -msgstr "レイヤーリスト表示切り替え" +msgstr "レイヤーリスト表示/非表示の切り替え" -#: ../gui/drawwindow.py:290 +#: ../gui/drawwindow.py:301 msgid "Edit and reorganise Brush Lists" msgstr "ブラシリストの編集と再編成" -#: ../gui/drawwindow.py:294 +#: ../gui/drawwindow.py:305 msgid "Change Brush Settings in detail" msgstr "詳細にブラシの設定を変更する" -#: ../gui/drawwindow.py:297 +#: ../gui/drawwindow.py:308 msgid "Toggle the Colour Triangle" -msgstr "カラートライアングル表示切り替え" +msgstr "カラートライアングルの表示/非表示の切り替え" -#: ../gui/drawwindow.py:300 +#: ../gui/drawwindow.py:311 msgid "Toggle the advanced Colour Sampler" -msgstr "カラーサンプラー表示切り替え" +msgstr "カラーサンプラーの表示/非表示の切り替え" -#: ../gui/drawwindow.py:303 +#: ../gui/drawwindow.py:314 msgid "Toggle the scratchpad" -msgstr "スクラッチパッド表示切り替え" +msgstr "作業パレットの表示/非表示の切り替え" -#: ../gui/drawwindow.py:326 -#: ../gui/toolbar.py:37 +#: ../gui/drawwindow.py:337 ../gui/toolbar.py:37 msgid "Subwindows" msgstr "サブウィンドウ" -#: ../gui/drawwindow.py:327 +#: ../gui/drawwindow.py:338 msgid "Show subwindows" msgstr "サブウィンドウを表示" -#: ../gui/drawwindow.py:334 +#: ../gui/drawwindow.py:340 +msgid "Zoom Level" +msgstr "" + +#: ../gui/drawwindow.py:341 +msgid "Reveal the scale % when zooming in or out" +msgstr "" + +#: ../gui/drawwindow.py:344 +msgid "Last Painting Position" +msgstr "" + +#: ../gui/drawwindow.py:345 +msgid "Reveal the last painting pos when a stroke ends" +msgstr "" + +#: ../gui/drawwindow.py:353 msgid "Menubar only" msgstr "メニューバーのみ" -#: ../gui/drawwindow.py:335 +#: ../gui/drawwindow.py:354 msgid "Show menu bar" msgstr "メニューバーを表示" -#: ../gui/drawwindow.py:337 +#: ../gui/drawwindow.py:356 msgid "Toolbar only" msgstr "ツールバーのみ" -#: ../gui/drawwindow.py:338 +#: ../gui/drawwindow.py:357 msgid "Show toolbar" msgstr "ツールバーを表示" -#: ../gui/drawwindow.py:340 +#: ../gui/drawwindow.py:359 msgid "Both" msgstr "両方" -#: ../gui/drawwindow.py:341 +#: ../gui/drawwindow.py:360 msgid "Show both the menu bar and the toolbar" msgstr "メニューバーとツールバーを両方表示" -#: ../gui/drawwindow.py:777 +#: ../gui/drawwindow.py:829 msgid "Leave Fullscreen Mode" msgstr "フルスクリーン モード解除" -#: ../gui/drawwindow.py:778 +#: ../gui/drawwindow.py:830 msgid "UnFullscreen" msgstr "フルスクリーン解除" -#: ../gui/drawwindow.py:781 +#: ../gui/drawwindow.py:833 msgid "Enter Fullscreen Mode" -msgstr "フルスクリーン モード" +msgstr "フルスクリーンモード" -#: ../gui/drawwindow.py:782 +#: ../gui/drawwindow.py:834 msgid "Fullscreen" msgstr "フルスクリーン" -#: ../gui/drawwindow.py:870 +#: ../gui/drawwindow.py:922 msgid "Gimp Palette Format" -msgstr "Gimp パレット形式" +msgstr "Gimpパレット形式" -#: ../gui/drawwindow.py:871 +#: ../gui/drawwindow.py:923 msgid "All Files" msgstr "すべてのファイル" -#: ../gui/drawwindow.py:907 +#: ../gui/drawwindow.py:959 msgid "Really Quit?" msgstr "終了しますか?" -#: ../gui/drawwindow.py:935 +#: ../gui/drawwindow.py:987 msgid "" "Copyright (C) 2005-2012\n" "Martin Renold and the MyPaint Development Team" @@ -1578,106 +1734,118 @@ "Copyright (C) 2005-2012\n" "Martin Renold and the MyPaint 開発チーム" -#: ../gui/drawwindow.py:939 +#: ../gui/drawwindow.py:991 msgid "" -"This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\n" +"This program is free software; you can redistribute it and/or modify it " +"under the terms of the GNU General Public License as published by the Free " +"Software Foundation; either version 2 of the License, or (at your option) " +"any later version.\n" "\n" -"This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. See the COPYING file for more details." +"This program is distributed in the hope that it will be useful, but WITHOUT " +"ANY WARRANTY. See the COPYING file for more details." msgstr "" -"このプログラムはフリーソフトウェアです。Free Software Foundationが公表したGNU General Public License 下でそれを再配布または変更することができます。ライセンスのいずれか2つのバージョン、または(任意で)それ以降のバージョン。\n" +"このプログラムはフリーソフトウェアです。Free Software Foundationが公表した" +"GNU General Public License 下でそれを再配布または変更することができます。ライ" +"センスのいずれか2つのバージョン、または(任意で)それ以降のバージョン。\n" "\n" -"このプログラムはユーザーの役に立つ事を願い配布されていますが、一切の保証はありません。詳細については、COPYINGファイルを参照してください。" +"このプログラムはユーザーの役に立つ事を願い配布されていますが、一切の保証はあ" +"りません。詳細については、COPYINGファイルを参照してください。" #. (in order of appearance) -#: ../gui/drawwindow.py:950 -#: ../gui/drawwindow.py:952 -#: ../gui/drawwindow.py:953 -#: ../gui/drawwindow.py:954 -#: ../gui/drawwindow.py:955 -#: ../gui/drawwindow.py:957 -#: ../gui/drawwindow.py:958 -#: ../gui/drawwindow.py:959 -#: ../gui/drawwindow.py:960 -#: ../gui/drawwindow.py:961 -#: ../gui/drawwindow.py:962 -#: ../gui/drawwindow.py:963 -#: ../gui/drawwindow.py:964 -#: ../gui/drawwindow.py:965 -#: ../gui/drawwindow.py:966 +#: ../gui/drawwindow.py:1002 ../gui/drawwindow.py:1004 +#: ../gui/drawwindow.py:1005 ../gui/drawwindow.py:1006 +#: ../gui/drawwindow.py:1007 ../gui/drawwindow.py:1009 +#: ../gui/drawwindow.py:1010 ../gui/drawwindow.py:1011 +#: ../gui/drawwindow.py:1012 ../gui/drawwindow.py:1013 +#: ../gui/drawwindow.py:1014 ../gui/drawwindow.py:1015 +#: ../gui/drawwindow.py:1016 ../gui/drawwindow.py:1017 +#: ../gui/drawwindow.py:1018 msgid "programming" msgstr "プログラミング" -#: ../gui/drawwindow.py:951 -#: ../gui/drawwindow.py:956 +#: ../gui/drawwindow.py:1003 ../gui/drawwindow.py:1008 msgid "portability" -msgstr "ポータビリティ" +msgstr "移植性" -#: ../gui/drawwindow.py:969 -#: ../gui/drawwindow.py:970 -#: ../gui/drawwindow.py:972 -#: ../gui/drawwindow.py:974 -#: ../gui/drawwindow.py:977 +#: ../gui/drawwindow.py:1021 ../gui/drawwindow.py:1022 +#: ../gui/drawwindow.py:1024 ../gui/drawwindow.py:1026 +#: ../gui/drawwindow.py:1029 msgid "brushes" msgstr "ブラシ" -#: ../gui/drawwindow.py:971 +#: ../gui/drawwindow.py:1023 msgid "patterns, brushes" msgstr "パターン、ブラシ" -#: ../gui/drawwindow.py:973 +#: ../gui/drawwindow.py:1025 msgid "brushes, patterns" msgstr "ブラシ、パターン" -#: ../gui/drawwindow.py:975 +#: ../gui/drawwindow.py:1027 msgid "desktop icon" msgstr "デスクトップアイコン" -#: ../gui/drawwindow.py:976 -#: ../gui/drawwindow.py:978 +#: ../gui/drawwindow.py:1028 ../gui/drawwindow.py:1030 msgid "patterns" msgstr "パターン" -#: ../gui/drawwindow.py:979 -#: ../gui/drawwindow.py:980 +#: ../gui/drawwindow.py:1031 ../gui/drawwindow.py:1032 msgid "tool icons" msgstr "ツールアイコン" -#: ../gui/drawwindow.py:1012 +#: ../gui/drawwindow.py:1065 msgid "Move your mouse over a menu entry, then press the key to assign." msgstr "メニュー項目の上にマウスを移動して、割り当てるキーを押してください。" -#: ../gui/drawwindow.py:1014 +#: ../gui/drawwindow.py:1067 msgid "" -"You can also drag the canvas with the mouse while holding the middle mouse button or spacebar. Or with the arrow keys.\n" +"You can also drag the canvas with the mouse while holding the middle mouse " +"button or spacebar. Or with the arrow keys.\n" "\n" -"In contrast to earlier versions, scrolling and zooming are harmless now and will not make you run out of memory. But you still require a lot of memory if you paint all over while fully zoomed out." +"In contrast to earlier versions, scrolling and zooming are harmless now and " +"will not make you run out of memory. But you still require a lot of memory " +"if you paint all over while fully zoomed out." msgstr "" -"マウスの中央のボタン、またはスペースバーを押しながら、キャンバスをドラッグすることができます。また矢印キーも使用することができます。\n" +"マウスの中央のボタン、またはスペースバーを押しながら、キャンバスをドラッグす" +"ることができます。また矢印キーも使用することができます。\n" "\n" -"以前のバージョンとは異なり、現在のスクロールやズームは無害で、メモリー不足になる事はありません。しかし完全にズームアウトした状態で描く場合、大量のメモリを必要とします。" - -#: ../gui/drawwindow.py:1021 -msgid "" -"Brushkeys are used to quickly save/restore brush settings using keyboard shortcuts. You can paint with one hand and change brushes with the other without interruption.\n" +"以前のバージョンとは異なり、現在のスクロールやズームは無害で、メモリー不足に" +"なる事はありません。しかし完全にズームアウトした状態で描く場合、大量のメモリ" +"を必要とします。" + +#: ../gui/drawwindow.py:1074 +msgid "" +"Brushkeys are used to quickly save/restore brush settings using keyboard " +"shortcuts. You can paint with one hand and change brushes with the other " +"without interruption.\n" "\n" "There are 10 memory slots to hold brush settings.\n" -"They are anonymous brushes, which are not visible in the brush selector list. But they are remembered even if you quit." +"They are anonymous brushes, which are not visible in the brush selector " +"list. But they are remembered even if you quit." msgstr "" -"ブラシキーは、キーボード・ショートカットを使い簡単にブラシの設定を復元/保存するのに使用されます。作業を中断することなく、ブラシを変更し描画することができます。\n" +"ブラシキーは、キーボード・ショートカットを使い簡単にブラシの設定を復元/保存す" +"るのに使用されます。作業を中断することなく、ブラシを変更し描画することができ" +"ます。\n" "\n" "ブラシ設定を保持するために 10個のメモリースロットがあります。\n" -"それらはブラシセレクタのリストに表示されていない名前の付いていないブラシです。終了してもそれらは保持されます。" +"それらはブラシセレクタのリストに表示されていない名前の付いていないブラシで" +"す。終了してもそれらは保持されます。" -#: ../gui/drawwindow.py:1030 +#: ../gui/drawwindow.py:1083 msgid "" -"There is a tutorial available on the MyPaint homepage. It explains some features which are hard to discover yourself.\n" +"There is a tutorial available on the MyPaint homepage. It explains some " +"features which are hard to discover yourself.\n" "\n" -"Comments about the brush settings (opaque, hardness, etc.) and inputs (pressure, speed, etc.) are available as tooltips. Put your mouse over a label to see them. \n" +"Comments about the brush settings (opaque, hardness, etc.) and inputs " +"(pressure, speed, etc.) are available as tooltips. Put your mouse over a " +"label to see them. \n" msgstr "" "MyPaintのホームページ上に利用可能なチュートリアルがあります。\n" "自分で見つけるには難しい様々な機能を説明しています。\n" "\n" -"ブラシの設定(不透明、硬さ、など)と入力(筆圧、速さ、等)についての解説は、ツールチップとして利用可能です。それらを見るにはラベルの上にマウスを置きます。\n" +"ブラシの設定(不透明、硬さ、など)と入力(筆圧、速さ、等)についての解説は、" +"ツールチップとして利用可能です。それらを見るにはラベルの上にマウスを置きま" +"す。\n" #: ../gui/filehandling.py:59 msgid "New" @@ -1687,19 +1855,18 @@ msgid "Start with a new blank canvas" msgstr "白紙でスタート" -#: ../gui/filehandling.py:60 -#: ../gui/filehandling.py:344 +#: ../gui/filehandling.py:60 ../gui/filehandling.py:344 #: ../gui/filehandling.py:361 msgid "Open..." msgstr "開く..." #: ../gui/filehandling.py:60 msgid "Open a file, replacing the current painting" -msgstr "ファイルを開く、現在の描画を置き換えます" +msgstr "ファイルを開いて現在の画像と置き換えます" #: ../gui/filehandling.py:61 msgid "Open Last" -msgstr "前の画像を開く" +msgstr "直前に編集した画像を開く" #: ../gui/filehandling.py:61 msgid "Open the last file you saved" @@ -1723,23 +1890,27 @@ #: ../gui/filehandling.py:64 msgid "Save to a file with a new name" -msgstr "別名で保存" +msgstr "名前をつけて保存" #: ../gui/filehandling.py:65 msgid "Export..." -msgstr "エクスポート..." +msgstr "画像をエクスポート..." #: ../gui/filehandling.py:65 msgid "Export to a file" -msgstr "ファイルにエクスポートします。" +msgstr "ファイルにエクスポートする" #: ../gui/filehandling.py:66 msgid "Save As Scrap" msgstr "スクラップで保存" #: ../gui/filehandling.py:67 -msgid "Saves to a new scrap file. If this drawing is currently saved as a scrap, this will write a new revision of it." -msgstr "新しいスクラップファイルに保存します。この描画が現在スクラップとして保存されている場合、新しいリビジョンとして書き込まれます。" +msgid "" +"Saves to a new scrap file. If this drawing is currently saved as a scrap, " +"this will write a new revision of it." +msgstr "" +"新しいスクラップファイルに保存します。この描画が現在スクラップとして保存され" +"ている場合、新しいリビジョンとして書き込まれます。" #: ../gui/filehandling.py:71 msgid "Open Previous Scrap" @@ -1747,7 +1918,7 @@ #: ../gui/filehandling.py:71 msgid "Load the previous scrap file, replacing the current drawing" -msgstr "前のスクラップファイルを読み込み、現在の画像と置き換えます。" +msgstr "前のスクラップファイルを読み込み、現在の画像と置き換える" #: ../gui/filehandling.py:72 msgid "Open Next Scrap" @@ -1755,7 +1926,7 @@ #: ../gui/filehandling.py:72 msgid "Load the next scrap file, replacing the current drawing" -msgstr "次のスクラップファイルを読み込み、現在の画像と置き換えます。" +msgstr "次のスクラップファイルを読み込み、現在の画像と置き換える" #: ../gui/filehandling.py:78 msgid "Open Recent" @@ -1771,8 +1942,7 @@ msgstr "利用可能なすべてのフォーマット" #. 0 -#: ../gui/filehandling.py:100 -#: ../gui/filehandling.py:106 +#: ../gui/filehandling.py:100 ../gui/filehandling.py:106 msgid "OpenRaster (*.ora)" msgstr "OpenRaster (*.ora)" @@ -1787,7 +1957,7 @@ #. (name, extension, options) #: ../gui/filehandling.py:105 msgid "By extension (prefer default format)" -msgstr "拡張子で (デフォルト形式を優先)" +msgstr "拡張子で判断 (デフォルト形式を優先)" #. 1 #: ../gui/filehandling.py:107 @@ -1823,7 +1993,7 @@ #: ../gui/filehandling.py:188 msgid "Really continue?" -msgstr "続行してもいいですか?" +msgstr "続行してもよろしいですか?" #: ../gui/filehandling.py:197 #, python-format @@ -1845,7 +2015,7 @@ #: ../gui/filehandling.py:393 msgid "Open Scratchpad..." -msgstr "スクラッチパッドを開く..." +msgstr "作業パレットを開く" #: ../gui/filehandling.py:698 #, python-format @@ -1885,15 +2055,18 @@ msgstr "プログラミングエラーが検出されました" #: ../gui/gtkexcepthook.py:132 -msgid "It probably isn't fatal, but the details should be reported to the developers nonetheless." -msgstr "おそらく致命的ではありませんが、それでも詳細を開発者に報告する必要があります。" +msgid "" +"It probably isn't fatal, but the details should be reported to the " +"developers nonetheless." +msgstr "" +"おそらく致命的ではありませんが、それでも詳細を開発者に報告する必要がありま" +"す。" #: ../gui/gtkexcepthook.py:155 msgid "Details..." msgstr "詳細..." -#: ../gui/gtkexcepthook.py:176 -#: ../gui/gtkexcepthook.py:179 +#: ../gui/gtkexcepthook.py:176 ../gui/gtkexcepthook.py:179 msgid "Exception while analyzing the exception." msgstr "例外を解析している間は、除外" @@ -1903,7 +2076,7 @@ #: ../gui/inputtestwindow.py:47 msgid "(no pressure)" -msgstr "(筆圧感知なし)" +msgstr "(筆圧なし)" #: ../gui/inputtestwindow.py:48 msgid "Pressure:" @@ -1911,11 +2084,11 @@ #: ../gui/inputtestwindow.py:50 msgid "(no tilt)" -msgstr "(傾き検知なし)" +msgstr "(傾きなし)" #: ../gui/inputtestwindow.py:51 msgid "Tilt:" -msgstr "傾き: " +msgstr "傾き:" #: ../gui/inputtestwindow.py:56 msgid "(no device)" @@ -1927,7 +2100,7 @@ #: ../gui/layerswindow.py:50 msgid "Visible" -msgstr "表示:可視" +msgstr "表示" #: ../gui/layerswindow.py:56 msgid "Locked" @@ -1935,14 +2108,13 @@ #: ../gui/layerswindow.py:72 msgid "Mode:" -msgstr "モード: " +msgstr "モード: " #: ../gui/layerswindow.py:83 msgid "Opacity:" msgstr "不透明度: " -#: ../gui/layerswindow.py:101 -#: ../lib/command.py:243 +#: ../gui/layerswindow.py:101 ../lib/command.py:268 msgid "Duplicate Layer" msgstr "レイヤーの複製" @@ -1959,7 +2131,7 @@ #: ../gui/layerswindow.py:326 #, python-format msgid "Untitled layer #%d" -msgstr "無題レイヤー #%d" +msgstr "名前なし #%d" #: ../gui/layout.py:591 msgid "Collapse" @@ -1967,27 +2139,32 @@ #: ../gui/layout.py:592 msgid "Expand" -msgstr "拡げる" +msgstr "展開する" #: ../gui/layout.py:666 msgid "Snap out" -msgstr "スナップを外す" +msgstr "別ウィンドウにする" #: ../gui/layout.py:668 msgid "Close" msgstr "閉じる" +#: ../gui/overlays.py:144 +#, python-format +msgid "Zoom: %.01f%%" +msgstr "" + #: ../gui/preferenceswindow.py:20 msgid "Disabled (no pressure sensitivity)" -msgstr "無効(筆圧感知がありません)" +msgstr "無効(筆圧感知なし)" #: ../gui/preferenceswindow.py:21 msgid "Screen (normal)" -msgstr "スクリーン (ノーマル)" +msgstr "スクリーン (通常)" #: ../gui/preferenceswindow.py:22 msgid "Window (not recommended)" -msgstr "ウィンドウ(推奨されません)" +msgstr "ウィンドウ(非推奨)" #. These can be names of actions within ActionGroups defined elsewhere, #. or names of actions the handler interprets itself. @@ -1996,7 +2173,7 @@ #. (action_or_whatever, label) #: ../gui/preferenceswindow.py:33 msgid "No action" -msgstr "未設定" +msgstr "未割り当て" #. [0] is the default for the comboboxes #: ../gui/preferenceswindow.py:34 @@ -2005,168 +2182,176 @@ #: ../gui/preferenceswindow.py:35 msgid "Toggle Subwindows" -msgstr "サブウィンドウの切り替え" +msgstr "サブウィンドウの表示/非表示の切り替え" #: ../gui/preferenceswindow.py:39 msgid "Pan" -msgstr "パン" +msgstr "表示領域の移動" #: ../gui/preferenceswindow.py:41 msgid "Rotate" -msgstr "回転" +msgstr "表示領域の回転" #: ../gui/preferenceswindow.py:42 -msgid "Straight Line" -msgstr "直線を描く" +msgid "Move Current Layer" +msgstr "現在のレイヤーを移動" #: ../gui/preferenceswindow.py:43 -msgid "Sequence of Straight Lines" -msgstr "連続して直線を描く" +msgid "Straight Line" +msgstr "直線を引く" #: ../gui/preferenceswindow.py:44 +msgid "Sequence of Straight Lines" +msgstr "連続して複数の直線を引く" + +#: ../gui/preferenceswindow.py:45 msgid "Color Changer" msgstr "カラー チェンジャー" -#: ../gui/preferenceswindow.py:47 +#: ../gui/preferenceswindow.py:48 msgid "Undo" -msgstr "アンドゥ" +msgstr "元に戻す" -#: ../gui/preferenceswindow.py:48 +#: ../gui/preferenceswindow.py:49 msgid "Redo" msgstr "やり直す" #. Used for creating the menus, #. (pref_name, label) -#: ../gui/preferenceswindow.py:53 +#: ../gui/preferenceswindow.py:54 msgid "Button 1 + Shift" msgstr "ボタン 1 + Shift" -#: ../gui/preferenceswindow.py:54 +#: ../gui/preferenceswindow.py:55 msgid "Button 1 + Ctrl (or Alt)" msgstr "ボタン 1 + Ctrl (or Alt)" -#: ../gui/preferenceswindow.py:55 +#: ../gui/preferenceswindow.py:56 msgid "Button 2" msgstr "ボタン 2" -#: ../gui/preferenceswindow.py:56 +#: ../gui/preferenceswindow.py:57 msgid "Button 2 + Shift" msgstr "ボタン 2 + Shift" -#: ../gui/preferenceswindow.py:57 +#: ../gui/preferenceswindow.py:58 msgid "Button 2 + Ctrl (or Alt)" msgstr "ボタン 2 + Ctrl (or Alt)" -#: ../gui/preferenceswindow.py:58 +#: ../gui/preferenceswindow.py:59 msgid "Button 3" msgstr "ボタン 3" -#: ../gui/preferenceswindow.py:59 +#: ../gui/preferenceswindow.py:60 msgid "Button 3 + Shift" msgstr "ボタン 3 + Shift" -#: ../gui/preferenceswindow.py:60 +#: ../gui/preferenceswindow.py:61 msgid "Button 3 + Ctrl (or Alt)" msgstr "ボタン 3 + Ctrl (or Alt)" #. TRANSLATORS: Tab label -#: ../gui/preferenceswindow.py:90 +#: ../gui/preferenceswindow.py:91 msgid "Pen Input" msgstr "ペン入力" -#: ../gui/preferenceswindow.py:96 +#: ../gui/preferenceswindow.py:97 msgid "Input Device" msgstr "入力デバイス" -#: ../gui/preferenceswindow.py:103 -msgid "Scale input pressure to brush pressure. This is applied to all input devices. The mouse button has an input pressure of 0.5 when pressed." -msgstr "出力筆圧への入力荷重スケールの設定。これはすべての入力デバイスに適用されます。マウスボタンが押された場合は 0.5 の入力荷重です。" +#: ../gui/preferenceswindow.py:104 +msgid "" +"Scale input pressure to brush pressure. This is applied to all input " +"devices. The mouse button has an input pressure of 0.5 when pressed." +msgstr "" +"出力筆圧への入力荷重スケールの設定。これはすべての入力デバイスに適用されま" +"す。マウスボタンが押された場合は 0.5 の入力荷重です。" #. TRANSLATORS: Graph y-axis label -#: ../gui/preferenceswindow.py:113 +#: ../gui/preferenceswindow.py:114 msgid "Brush Pressure" -msgstr "出力筆圧" +msgstr "ブラシの筆圧" #. TRANSLATORS: Graph x-axis label -#: ../gui/preferenceswindow.py:123 +#: ../gui/preferenceswindow.py:124 msgid "Input Pressure" -msgstr "入力荷重" +msgstr "入力デバイスの筆圧" -#: ../gui/preferenceswindow.py:132 +#: ../gui/preferenceswindow.py:133 msgid "Mode: " -msgstr "モード: " +msgstr "モード: " -#: ../gui/preferenceswindow.py:149 +#: ../gui/preferenceswindow.py:150 msgid "Buttons" msgstr "ボタン" -#: ../gui/preferenceswindow.py:155 +#: ../gui/preferenceswindow.py:156 msgid "Pen and mouse button mappings" msgstr "ペンとマウス ボタンの機能設定" -#: ../gui/preferenceswindow.py:181 +#: ../gui/preferenceswindow.py:182 msgid "Saving" -msgstr "保存設定" +msgstr "保存方式" -#: ../gui/preferenceswindow.py:187 +#: ../gui/preferenceswindow.py:188 msgid "Saving" -msgstr "保存設定" +msgstr "保存方式" -#: ../gui/preferenceswindow.py:191 +#: ../gui/preferenceswindow.py:192 msgid "Default file format:" msgstr "デフォルトのファイル形式" -#: ../gui/preferenceswindow.py:206 +#: ../gui/preferenceswindow.py:207 msgid "Save Next Scrap" msgstr "次のスクラップを保存" -#: ../gui/preferenceswindow.py:210 +#: ../gui/preferenceswindow.py:211 msgid "Path and filename prefix:" msgstr "パスとファイル名の接頭辞:" -#: ../gui/preferenceswindow.py:231 +#: ../gui/preferenceswindow.py:232 msgid "Default View" msgstr "デフォルトの表示" -#: ../gui/preferenceswindow.py:235 +#: ../gui/preferenceswindow.py:236 msgid "Default zoom:" -msgstr "デフォルトの倍率:" +msgstr "デフォルト倍率:" -#: ../gui/preferenceswindow.py:248 +#: ../gui/preferenceswindow.py:249 msgid "High quality zoom (may result in slow scrolling)" -msgstr "高品質の拡大縮小 (スクロールが遅くなるかもしれません)" +msgstr "高精度の拡大・縮小(スクロールが遅くなる可能性があります)" -#: ../gui/preferenceswindow.py:255 +#: ../gui/preferenceswindow.py:256 msgid "Fullscreen" msgstr "フルスクリーン" -#: ../gui/preferenceswindow.py:259 +#: ../gui/preferenceswindow.py:260 msgid "Hide menu bar" -msgstr "メニューバー 非表示" +msgstr "メニューバーを隠す" -#: ../gui/preferenceswindow.py:264 +#: ../gui/preferenceswindow.py:265 msgid "Hide toolbar" -msgstr "ツールバー 非表示" +msgstr "ツールバーを隠す" -#: ../gui/preferenceswindow.py:269 +#: ../gui/preferenceswindow.py:270 msgid "Hide tools" -msgstr "ツール 非表示" +msgstr "ツールを隠す" #: ../gui/scratchwindow.py:49 msgid "Load Scratchpad" -msgstr "スクラッチパッドを読み込む" +msgstr "作業パレットの読み込み" #: ../gui/scratchwindow.py:51 msgid "Save Scratchpad as..." -msgstr "スクラッチパッドに名前を付けて保存" +msgstr "作業パレットに名前を付けて保存" #: ../gui/spinbox.py:32 msgid "Previous item" -msgstr "前の項目" +msgstr "前" #: ../gui/spinbox.py:35 msgid "Next item" -msgstr "次の項目" +msgstr "次" #: ../gui/spinbox.py:97 msgid "(Nothing to show)" @@ -2175,53 +2360,52 @@ #. Tool windows. No trailing ellipses on these since none of them require #. further input before they can do anything: see section 4.3.2.1 of the the #. GNOME Human Interface Guidelines version 3.0. -#: ../gui/stock.py:39 +#: ../gui/stock.py:40 msgid "Brush List Editor" msgstr "ブラシリストエディタ" -#: ../gui/stock.py:40 +#: ../gui/stock.py:41 msgid "Color Triangle" msgstr "カラートライアングル" -#: ../gui/stock.py:41 +#: ../gui/stock.py:42 msgid "Color Sampler" -msgstr "カラーサンプラー" +msgstr "カラーサンプラー..." -#: ../gui/stock.py:44 +#: ../gui/stock.py:45 msgid "Rotate Counterclockwise" msgstr "反時計回りに回転" -#: ../gui/stock.py:46 +#: ../gui/stock.py:47 msgid "Rotate Clockwise" msgstr "時計回りに回転" -#: ../gui/stock.py:48 +#: ../gui/stock.py:49 msgid "Mirror Horizontal" msgstr "左右反転" -#: ../gui/stock.py:49 +#: ../gui/stock.py:50 msgid "Mirror Vertical" msgstr "上下反転" -#: ../gui/stock.py:50 +#: ../gui/stock.py:51 msgid "Blend Mode" -msgstr "ブレンドモード" +msgstr "描画モード" #. (internal-name, display-name) -#: ../gui/stock.py:51 -#: ../lib/layer.py:17 +#: ../gui/stock.py:52 ../lib/layer.py:17 msgid "Normal" msgstr "標準" -#: ../gui/stock.py:53 +#: ../gui/stock.py:54 msgid "Lock Alpha Channel" -msgstr "アルファチャンネルを固定" +msgstr "アルファ値を保護" -#: ../gui/stock.py:55 +#: ../gui/stock.py:57 msgid "Brush Modifiers Active" msgstr "ブラシの変更は有効です。" -#: ../gui/stock.py:56 +#: ../gui/stock.py:58 msgid "Brush Modifiers Inactive" msgstr "ブラシの変更は無効です。" @@ -2235,11 +2419,11 @@ #: ../gui/toolbar.py:34 msgid "Undo and Redo" -msgstr "元に戻す/やり直し" +msgstr "元に戻す/やり直す" #: ../gui/toolbar.py:35 msgid "Blend Modes" -msgstr "ブレンドモード" +msgstr "描画モード" #: ../gui/toolbar.py:66 msgid "MyPaint" @@ -2247,7 +2431,7 @@ #: ../gui/toolbar.py:81 msgid "Current Color" -msgstr "選択色" +msgstr "現在の色" #: ../gui/toolbar.py:83 msgid "Current Brush" @@ -2259,7 +2443,7 @@ #: ../gui/toolbar.py:151 msgid "Color History and other tools" -msgstr "色の履歴と他のツール" +msgstr "色履歴ほか" #. Colour changing #: ../gui/toolbar.py:174 @@ -2268,19 +2452,18 @@ #. History #. Brush history -#: ../gui/toolbar.py:217 -#: ../gui/toolbar.py:322 +#: ../gui/toolbar.py:217 ../gui/toolbar.py:322 msgid "Recently Used" -msgstr "最近使用された" +msgstr "最近使用されたもの" #: ../gui/toolbar.py:280 msgid "Brush history etc." -msgstr "ブラシの履歴 ・他" +msgstr "ブラシ履歴 他" #. A limited subset of the abailable brush settings. #: ../gui/toolbar.py:406 msgid "Quick Brush Settings" -msgstr "簡単なブラシ設定" +msgstr "簡易ブラシ設定" #: ../gui/toolbar.py:432 #, python-format @@ -2308,7 +2491,7 @@ #: ../gui/toolbar.py:484 msgid "Brush Blend Mode" -msgstr "ブラシのブレンドモード" +msgstr "ブラシの描画モード" #: ../lib/command.py:74 msgid "Unknown Action" @@ -2343,77 +2526,80 @@ msgstr "レイヤーの選択" #: ../lib/command.py:217 -msgid "Move Layer" +msgid "Move Layer on Canvas" msgstr "レイヤーを移動" -#: ../lib/command.py:263 -msgid "Reorder Layer" +#: ../lib/command.py:242 +msgid "Reorder Layer in Stack" msgstr "レイヤーの並び替え" -#: ../lib/command.py:300 +#: ../lib/command.py:288 +msgid "Reorder Layer Stack" +msgstr "レイヤースタックの並び替え" + +#: ../lib/command.py:325 msgid "Make Layer Visible" -msgstr "レイヤーを表示:可視" +msgstr "レイヤーを表示する" -#: ../lib/command.py:302 +#: ../lib/command.py:327 msgid "Make Layer Invisible" -msgstr "レイヤーを非表示" +msgstr "レイヤーを非表示にする" -#: ../lib/command.py:321 +#: ../lib/command.py:346 msgid "Lock Layer" -msgstr "レイヤーを固定" +msgstr "レイヤーを保護" -#: ../lib/command.py:323 +#: ../lib/command.py:348 msgid "Unlock Layer" -msgstr "レイヤーの固定解除" +msgstr "レイヤー保護の解除" -#: ../lib/command.py:326 +#: ../lib/command.py:351 msgid "Change Layer Visibility" -msgstr "可視レイヤーの変更" +msgstr "レイヤーの表示/非表示の切り替え" -#: ../lib/command.py:350 +#: ../lib/command.py:375 msgid "Change Layer Blending Mode" -msgstr "レイヤー ブレンドモード変更" +msgstr "レイヤーの合成モードの変更" #. add a hint due to a very consfusing error message when there is no space left on device -#: ../lib/document.py:372 +#: ../lib/document.py:380 #, python-format msgid "" "Unable to save: %s\n" "Do you have enough space left on the device?" msgstr "" -"保存することができません: %s\n" -"ディスクスペースは十分ありますか?" +"%sを保存することができませんでした\n" +"十分なディスクの空き容量が残されていますか?" -#: ../lib/document.py:374 -#: ../lib/document.py:377 +#: ../lib/document.py:382 ../lib/document.py:385 #, python-format msgid "Unable to save: %s" -msgstr "保存することができません: %s" +msgstr "%sを保存することができませんでした" -#: ../lib/document.py:382 +#: ../lib/document.py:390 #, python-format msgid "File does not exist: %s" -msgstr "ファイルがありません: %s" +msgstr "%sというファイルが見付かりませんでした" -#: ../lib/document.py:384 +#: ../lib/document.py:392 #, python-format msgid "You do not have the necessary permissions to open file: %s" -msgstr "ファイルの読み込み権限がありません: %s" +msgstr "%sというファイルの読み込み権限がありません" -#: ../lib/document.py:392 +#: ../lib/document.py:400 #, python-format msgid "Error while loading: GError %s" -msgstr "読み込み時のエラー: GError %s" +msgstr "読み込み時にエラーが発生しました: エラー内容=「%s」" -#: ../lib/document.py:395 +#: ../lib/document.py:403 #, python-format msgid "Error while loading: IOError %s" -msgstr "読み込み時のエラー: IOError %s" +msgstr "読み込み時にI/Oエラーが発生しました: エラー内容=「%s」" -#: ../lib/document.py:401 +#: ../lib/document.py:409 #, python-format msgid "Unknown file format extension: %s" -msgstr "不明なファイル拡張子: %s" +msgstr "%sという拡張子を取り扱うことはできません" #: ../lib/layer.py:18 msgid "Multiply" @@ -2430,4 +2616,3 @@ #: ../lib/layer.py:21 msgid "Screen" msgstr "スクリーン" - diff -Nru mypaint-1.0.0+git20111209.545d6f8/po/zh_TW.po mypaint-1.0.0+git20120121.b8338d5/po/zh_TW.po --- mypaint-1.0.0+git20111209.545d6f8/po/zh_TW.po 2011-12-09 18:42:06.000000000 +0000 +++ mypaint-1.0.0+git20120121.b8338d5/po/zh_TW.po 2012-01-21 01:24:50.000000000 +0000 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: mypaint\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-11-10 22:58+0100\n" +"POT-Creation-Date: 2011-11-30 15:54+0800\n" "PO-Revision-Date: 2010-03-09 18:43+0800\n" "Last-Translator: Dong-Jun Wu \n" "Language-Team: Chinese Traditional \n" @@ -89,9 +89,8 @@ "筆畫的角度,單位為度。此數值會在 0.0 到 180.0 之間,有效地忽略 180 度轉彎。" #: ../brushlib/brushsettings.py:32 -#, fuzzy msgid "Declination" -msgstr "方向" +msgstr "上傾" #: ../brushlib/brushsettings.py:32 msgid "" @@ -101,7 +100,7 @@ #: ../brushlib/brushsettings.py:33 msgid "Ascension" -msgstr "" +msgstr "上升" #: ../brushlib/brushsettings.py:33 msgid "" @@ -122,12 +121,10 @@ #. internal name, displayed name, constant, minimum, default, maximum, tooltip #: ../brushlib/brushsettings.py:44 ../gui/brushsettingswindow.py:102 -#, fuzzy msgid "Opacity" -msgstr "不透明度:" +msgstr "不透明度" #: ../brushlib/brushsettings.py:44 -#, fuzzy msgid "" "0 means brush is transparent, 1 fully visible\n" "(also known as alpha or opacity)" @@ -136,7 +133,6 @@ "(亦稱為 alpha 或 不透明度)" #: ../brushlib/brushsettings.py:45 -#, fuzzy msgid "Opacity multiply" msgstr "不透明相乘" @@ -149,7 +145,6 @@ msgstr "" #: ../brushlib/brushsettings.py:46 -#, fuzzy msgid "Opacity linearize" msgstr "不透明線性化" @@ -173,12 +168,10 @@ "筆觸數量*2) 筆刷筆觸數量" #: ../brushlib/brushsettings.py:47 -#, fuzzy msgid "Radius" msgstr "半徑" #: ../brushlib/brushsettings.py:47 -#, fuzzy msgid "" "Basic brush radius (logarithmic)\n" " 0.7 means 2 pixels\n" @@ -189,12 +182,10 @@ " 3.0 代表 20 像素" #: ../brushlib/brushsettings.py:48 -#, fuzzy msgid "Hardness" msgstr "硬度" #: ../brushlib/brushsettings.py:48 -#, fuzzy msgid "" "Hard brush-circle borders (setting to zero will draw nothing). To reach the " "maximum hardness, you need to disable Anti-aliasing." @@ -202,7 +193,7 @@ #: ../brushlib/brushsettings.py:49 msgid "Anti-aliasing" -msgstr "" +msgstr "反鋸齒" #: ../brushlib/brushsettings.py:49 msgid "" @@ -214,41 +205,34 @@ msgstr "" #: ../brushlib/brushsettings.py:50 -#, fuzzy msgid "Dabs per basic radius" msgstr "每基本半徑的筆觸數量" #: ../brushlib/brushsettings.py:50 -#, fuzzy msgid "" "How many dabs to draw while the pointer moves a distance of one brush radius " "(more precise: the base value of the radius)" msgstr "當游標移動一段筆刷半徑的距離時繪製的筆觸數量 (更加精確:半徑的基本值)" #: ../brushlib/brushsettings.py:51 -#, fuzzy msgid "Dabs per actual radius" msgstr "每實際半徑的筆觸數量" #: ../brushlib/brushsettings.py:51 -#, fuzzy msgid "" "Same as above, but the radius actually drawn is used, which can change " "dynamically" msgstr "與上面相同,但使用實際半徑繪製,實際半徑可以動態變化" #: ../brushlib/brushsettings.py:52 -#, fuzzy msgid "Dabs per second" msgstr "每秒的筆觸數量" #: ../brushlib/brushsettings.py:52 -#, fuzzy msgid "Dabs to draw each second, no matter how far the pointer moves" msgstr "每秒繪製的筆觸數量,與游標移動距離無關" #: ../brushlib/brushsettings.py:53 -#, fuzzy msgid "Radius by random" msgstr "隨機半徑" @@ -266,12 +250,10 @@ "2) 看起來不會受「每實際半徑的筆觸數量」影響而改變實際半徑" #: ../brushlib/brushsettings.py:54 -#, fuzzy msgid "Fine speed filter" msgstr "精細速度濾鏡" #: ../brushlib/brushsettings.py:54 -#, fuzzy msgid "" "How slow the input fine speed is following the real speed\n" "0.0 change immediately as your speed changes (not recommended, but try it)" @@ -280,17 +262,14 @@ "0.0 您的速度改變時會立即跟著改變 (不推薦,但可以試試)" #: ../brushlib/brushsettings.py:55 -#, fuzzy msgid "Gross speed filter" msgstr "總速度濾鏡" #: ../brushlib/brushsettings.py:55 -#, fuzzy msgid "Same as 'fine speed filter', but note that the range is different" msgstr "和「精細速度濾鏡」相同,但注意兩者的範圍是不一樣的" #: ../brushlib/brushsettings.py:56 -#, fuzzy msgid "Fine speed gamma" msgstr "精細速度伽瑪值" @@ -310,22 +289,18 @@ "若速度非常慢則為相反情況。" #: ../brushlib/brushsettings.py:57 -#, fuzzy msgid "Gross speed gamma" msgstr "總速度伽瑪值" #: ../brushlib/brushsettings.py:57 -#, fuzzy msgid "Same as 'fine speed gamma' for gross speed" msgstr "同於總速度的「精細速度伽瑪值」" #: ../brushlib/brushsettings.py:58 -#, fuzzy msgid "Jitter" msgstr "抖動" #: ../brushlib/brushsettings.py:58 -#, fuzzy msgid "" "Add a random offset to the position where each dab is drawn\n" " 0.0 disabled\n" @@ -338,12 +313,10 @@ "<0.0 數值為負則不會產生抖動" #: ../brushlib/brushsettings.py:59 -#, fuzzy msgid "Offset by speed" msgstr "速度偏移" #: ../brushlib/brushsettings.py:59 -#, fuzzy msgid "" "Change position depending on pointer speed\n" "= 0 disable\n" @@ -356,17 +329,14 @@ "< 0 繪製游標過來的地方" #: ../brushlib/brushsettings.py:60 -#, fuzzy msgid "Offset by speed filter" msgstr "速度偏移濾鏡" #: ../brushlib/brushsettings.py:60 -#, fuzzy msgid "How slow the offset goes back to zero when the cursor stops moving" msgstr "當游標停止移動時偏移回到零有多慢" #: ../brushlib/brushsettings.py:61 -#, fuzzy msgid "Slow position tracking" msgstr "減慢位置描繪" @@ -379,7 +349,6 @@ "滑、類似漫畫輪廓時很有用。" #: ../brushlib/brushsettings.py:62 -#, fuzzy msgid "Slow tracking per dab" msgstr "每個筆觸緩慢描繪" @@ -392,12 +361,10 @@ "時間)" #: ../brushlib/brushsettings.py:63 -#, fuzzy msgid "Tracking noise" msgstr "軌跡雜點" #: ../brushlib/brushsettings.py:63 -#, fuzzy msgid "" "Add randomness to the mouse pointer; this usually generates many small lines " "in random directions; maybe try this together with 'slow tracking'" @@ -406,29 +373,24 @@ "描繪」一起使用" #: ../brushlib/brushsettings.py:65 -#, fuzzy msgid "Color hue" msgstr "色相" #: ../brushlib/brushsettings.py:66 -#, fuzzy msgid "Color saturation" msgstr "飽和度" #: ../brushlib/brushsettings.py:67 -#, fuzzy msgid "Color value" msgstr "明度" #: ../brushlib/brushsettings.py:67 -#, fuzzy msgid "Color value (brightness, intensity)" msgstr "明度 (亮度,光強度)" #: ../brushlib/brushsettings.py:68 -#, fuzzy msgid "Save color" -msgstr "改變色相" +msgstr "儲存顏色" #: ../brushlib/brushsettings.py:68 msgid "" @@ -440,7 +402,6 @@ msgstr "" #: ../brushlib/brushsettings.py:69 -#, fuzzy msgid "Change color hue" msgstr "改變色相" @@ -457,7 +418,6 @@ " 0.5 以 180 度逆時針位移色相" #: ../brushlib/brushsettings.py:70 -#, fuzzy msgid "Change color lightness (HSL)" msgstr "改變亮度 (HSL)" @@ -474,7 +434,6 @@ " 1.0 較白" #: ../brushlib/brushsettings.py:71 -#, fuzzy msgid "Change color satur. (HSL)" msgstr "改變飽和度 (HSL)" @@ -491,7 +450,6 @@ " 1.0 更飽和" #: ../brushlib/brushsettings.py:72 -#, fuzzy msgid "Change color value (HSV)" msgstr "改變明度 (HSV)" @@ -509,7 +467,6 @@ " 1.0 更亮" #: ../brushlib/brushsettings.py:73 -#, fuzzy msgid "Change color satur. (HSV)" msgstr "改變飽和度 (HSV)" @@ -527,7 +484,6 @@ " 1.0 更飽和" #: ../brushlib/brushsettings.py:74 ../gui/brushsettingswindow.py:104 -#, fuzzy msgid "Smudge" msgstr "塗抹" @@ -545,12 +501,10 @@ " 1.0 只使用塗抹顏色" #: ../brushlib/brushsettings.py:75 -#, fuzzy msgid "Smudge length" msgstr "塗抹長度" #: ../brushlib/brushsettings.py:75 -#, fuzzy msgid "" "This controls how fast the smudge color becomes the color you are painting " "on.\n" @@ -564,7 +518,6 @@ "1.0 永不改變塗抹顏色" #: ../brushlib/brushsettings.py:76 -#, fuzzy msgid "Smudge radius" msgstr "半徑" @@ -579,7 +532,6 @@ msgstr "" #: ../brushlib/brushsettings.py:77 ../gui/stock.py:52 -#, fuzzy msgid "Eraser" msgstr "橡皮擦" @@ -596,7 +548,6 @@ " 0.5 像素變為 50 % 透明" #: ../brushlib/brushsettings.py:79 -#, fuzzy msgid "Stroke threshold" msgstr "筆畫臨界值" @@ -609,7 +560,6 @@ "壓力值。" #: ../brushlib/brushsettings.py:80 -#, fuzzy msgid "Stroke duration" msgstr "筆畫持續時間" @@ -621,7 +571,6 @@ "您必須移動多遠直到筆畫輸入達到 1.0。這項數值為對數 (數值為負不會反向處理)。" #: ../brushlib/brushsettings.py:81 -#, fuzzy msgid "Stroke hold time" msgstr "筆畫維持時間" @@ -639,7 +588,6 @@ "9.9 和更大的數值代表無窮大" #: ../brushlib/brushsettings.py:82 -#, fuzzy msgid "Custom input" msgstr "自訂輸入" @@ -659,7 +607,6 @@ "如果您讓它「隨機」改變,就可以產生一種緩慢 (平滑) 隨機輸入。" #: ../brushlib/brushsettings.py:83 -#, fuzzy msgid "Custom input filter" msgstr "自訂輸入濾鏡" @@ -675,12 +622,10 @@ "0.0 不減速 (立即套用變更)" #: ../brushlib/brushsettings.py:85 -#, fuzzy msgid "Elliptical dab: ratio" msgstr "橢圓筆觸:比例" #: ../brushlib/brushsettings.py:85 -#, fuzzy msgid "" "Aspect ratio of the dabs; must be >= 1.0, where 1.0 means a perfectly round " "dab. TODO: linearize? start at 0.0 maybe, or log?" @@ -689,12 +634,10 @@ "化?可能從 0.0 開始,或者對數?" #: ../brushlib/brushsettings.py:86 -#, fuzzy msgid "Elliptical dab: angle" msgstr "橢圓筆觸:角度" #: ../brushlib/brushsettings.py:86 -#, fuzzy msgid "" "Angle by which elliptical dabs are tilted\n" " 0.0 horizontal dabs\n" @@ -707,12 +650,10 @@ " 180.0 再次水平" #: ../brushlib/brushsettings.py:87 -#, fuzzy msgid "Direction filter" msgstr "方向濾鏡" #: ../brushlib/brushsettings.py:87 -#, fuzzy msgid "" "A low value will make the direction input adapt more quickly, a high value " "will make it smoother" @@ -720,7 +661,7 @@ #: ../brushlib/brushsettings.py:89 msgid "Lock alpha" -msgstr "" +msgstr "鎖定 alpha" #: ../brushlib/brushsettings.py:89 msgid "" @@ -732,11 +673,10 @@ msgstr "" #: ../gui/backgroundwindow.py:23 -#, fuzzy msgid "Save as Default" msgstr "儲存為預設值" -#: ../gui/backgroundwindow.py:25 ../gui/drawwindow.py:279 +#: ../gui/backgroundwindow.py:25 ../gui/drawwindow.py:287 msgid "Background" msgstr "背景" @@ -745,12 +685,11 @@ msgstr "圖案" #: ../gui/backgroundwindow.py:45 ../gui/brushsettingswindow.py:108 -#: ../gui/drawwindow.py:212 +#: ../gui/drawwindow.py:220 msgid "Color" msgstr "顏色" #: ../gui/backgroundwindow.py:51 -#, fuzzy msgid "Add color to Patterns" msgstr "加入顏色到圖案" @@ -762,71 +701,65 @@ msgstr "因為含有 alpha 色版,所以忽略背景 %s。請移除它。" #: ../gui/backgroundwindow.py:127 -#, fuzzy, python-format +#, python-format msgid "" "The background %s was ignored because it is the wrong size. Only (N*%d)x(M*" "%d) is supported." msgstr "因為含有錯誤尺寸,所以忽略背景 %s。只支援 (N*%d)x(M*%d)。" #: ../gui/brushcreationwidget.py:46 ../gui/brushcreationwidget.py:66 -#, fuzzy msgid "(unnamed brush)" -msgstr "重新命名筆刷" +msgstr "(未命名的筆刷)" #: ../gui/brushcreationwidget.py:50 -#, fuzzy msgid "Save Settings" msgstr "儲存設定值" #: ../gui/brushcreationwidget.py:51 msgid "Add As New" -msgstr "" +msgstr "新增為新筆刷" #: ../gui/brushcreationwidget.py:52 -#, fuzzy msgid "Edit Brush Icon" -msgstr "筆刷選擇" +msgstr "編輯筆刷圖示" #: ../gui/brushcreationwidget.py:53 -#, fuzzy msgid "Rename..." msgstr "重新命名..." #: ../gui/brushcreationwidget.py:54 -#, fuzzy msgid "Remove..." msgstr "移除..." -#: ../gui/brushcreationwidget.py:102 ../gui/brushcreationwidget.py:152 +#: ../gui/brushcreationwidget.py:101 ../gui/brushcreationwidget.py:150 msgid "No brush selected!" msgstr "沒有選擇筆刷!" -#: ../gui/brushcreationwidget.py:105 +#: ../gui/brushcreationwidget.py:104 msgid "Rename Brush" msgstr "重新命名筆刷" -#: ../gui/brushcreationwidget.py:117 +#: ../gui/brushcreationwidget.py:116 msgid "A brush with this name already exists!" msgstr "已經存在相同名稱的筆刷!" -#: ../gui/brushcreationwidget.py:144 ../gui/brushcreationwidget.py:244 -#, fuzzy +#: ../gui/brushcreationwidget.py:142 ../gui/brushcreationwidget.py:242 msgid "No brush selected, please use \"Add As New\" instead." msgstr "沒有選擇筆刷,請改用「加入新筆刷」。" -#: ../gui/brushcreationwidget.py:154 +#: ../gui/brushcreationwidget.py:152 msgid "Really delete brush from disk?" msgstr "確定要從磁碟中刪除筆刷?" -#: ../gui/brushcreationwidget.py:205 ../gui/drawwindow.py:210 +#: ../gui/brushcreationwidget.py:203 ../gui/drawwindow.py:218 msgid "Edit" msgstr "編輯" -#: ../gui/brushcreationwidget.py:209 ../gui/document.py:97 +#: ../gui/brushcreationwidget.py:207 ../gui/document.py:97 msgid "Clear" msgstr "清除" -#: ../gui/brushcreationwidget.py:215 ../gui/filehandling.py:63 +#: ../gui/brushcreationwidget.py:213 ../gui/filehandling.py:63 msgid "Save" msgstr "儲存" @@ -835,69 +768,64 @@ msgstr "" #: ../gui/brushmanager.py:72 -#, fuzzy msgid "Deleted" msgstr "刪除的" #: ../gui/brushmanager.py:73 -#, fuzzy msgid "Favorites" msgstr "收藏" #: ../gui/brushmanager.py:74 -#, fuzzy msgid "Ink" msgstr "墨水" #: ../gui/brushmanager.py:75 -#, fuzzy msgid "Classic" msgstr "經典" #: ../gui/brushmanager.py:76 msgid "Set#1" -msgstr "" +msgstr "組合 #1" #: ../gui/brushmanager.py:77 msgid "Set#2" -msgstr "" +msgstr "組合 #2" #: ../gui/brushmanager.py:78 msgid "Set#3" -msgstr "" +msgstr "組合 #3" #: ../gui/brushmanager.py:79 msgid "Set#4" -msgstr "" +msgstr "組合 #4" #: ../gui/brushmanager.py:80 msgid "Set#5" -msgstr "" +msgstr "組合 #5" #: ../gui/brushmanager.py:81 -#, fuzzy msgid "Experimental" msgstr "實驗性" -#: ../gui/brushmanager.py:719 +#: ../gui/brushmanager.py:714 msgid "Unknown Brush" -msgstr "" +msgstr "未知的筆刷" #: ../gui/brushmodifier.py:56 msgid "Paint normally" -msgstr "" +msgstr "正常塗色" #: ../gui/brushmodifier.py:59 msgid "Eraser Mode: remove strokes using the current brush" -msgstr "" +msgstr "橡皮擦模式: 以目前筆刷消除筆劃" #: ../gui/brushmodifier.py:62 msgid "Lock Alpha: paint over existing strokes only, using the current brush" -msgstr "" +msgstr "鎖定 Alpha 值: 僅利用目前筆刷蓋過已存在的筆劃" #: ../gui/brushselectionwindow.py:233 msgid "Try right click, middle click or Ctrl click" -msgstr "" +msgstr "試著按滑鼠右鍵、中鍵或 ctrl + 左鍵" #: ../gui/brushselectionwindow.py:401 msgid "New group..." @@ -913,16 +841,16 @@ #: ../gui/brushselectionwindow.py:405 msgid "Export group as brush package..." -msgstr "" +msgstr "匯出筆刷群組並另存成套件..." #: ../gui/brushselectionwindow.py:407 msgid "Download brushes (in web browser)" -msgstr "" +msgstr "下載筆刷 (開啟瀏覽器)" -#: ../gui/brushselectionwindow.py:408 ../gui/drawwindow.py:242 -#: ../gui/drawwindow.py:914 +#: ../gui/brushselectionwindow.py:408 ../gui/drawwindow.py:250 +#: ../gui/drawwindow.py:923 msgid "Import brush package..." -msgstr "" +msgstr "匯入筆刷套件..." #: ../gui/brushselectionwindow.py:422 msgid "Create group" @@ -938,11 +866,11 @@ #: ../gui/brushselectionwindow.py:436 msgid "Export brush pack..." -msgstr "" +msgstr "匯出筆刷套件..." -#: ../gui/brushselectionwindow.py:437 ../gui/drawwindow.py:915 +#: ../gui/brushselectionwindow.py:437 ../gui/drawwindow.py:924 msgid "MyPaint brush package (*.zip)" -msgstr "" +msgstr "MyPaint 筆刷套件 (*.zip)" #: ../gui/brushselectionwindow.py:443 #, python-format @@ -950,64 +878,57 @@ msgstr "確定要刪除群組 %s?" #: ../gui/brushselectionwindow.py:446 -#, fuzzy msgid "This group can not be deleted (try to empty it first)." msgstr "這個群組無法刪除 (先試著清空這個群組)。" -#: ../gui/brushsettingswindow.py:32 ../gui/drawwindow.py:285 -#, fuzzy +#: ../gui/brushsettingswindow.py:32 ../gui/drawwindow.py:293 msgid "Brush Settings Editor" -msgstr "筆刷設定值" +msgstr "筆刷設定編輯器" #: ../gui/brushsettingswindow.py:56 -#, fuzzy msgid "Back to settings" -msgstr "筆刷設定值" +msgstr "回到設定頁面" #. Live update (goes to the end) #: ../gui/brushsettingswindow.py:64 -#, fuzzy msgid "Update the last canvas stroke in realtime" msgstr "即時更新最後畫布筆畫" #: ../gui/brushsettingswindow.py:101 msgid "Basic" -msgstr "" +msgstr "基本" #: ../gui/brushsettingswindow.py:103 msgid "Dabs" -msgstr "" +msgstr "筆觸" #: ../gui/brushsettingswindow.py:105 msgid "Speed" -msgstr "" +msgstr "速度" #: ../gui/brushsettingswindow.py:106 -#, fuzzy msgid "Tracking" -msgstr "軌跡雜點" +msgstr "軌跡" #: ../gui/brushsettingswindow.py:138 msgid "Reset to default value" -msgstr "" +msgstr "重設至預設值" #: ../gui/brushsettingswindow.py:143 msgid "No additional configuration" msgstr "沒有附加的組態設定" #: ../gui/brushsettingswindow.py:148 ../gui/brushsettingswindow.py:191 -#, fuzzy msgid "Add input value mapping" msgstr "加入輸入值對應" #: ../gui/brushsettingswindow.py:193 -#, fuzzy msgid "Modify input value mapping" msgstr "修改輸入值對應" #: ../gui/colorsamplerwindow.py:166 msgid "Recently used colors" -msgstr "" +msgstr "最近使用過的顏色" #. : Background neutral mid grey, intended to permit colour comparisons without theme colours distracting and imposing themselves #. : Slightly distinct outlinefor colour pots, intended to reduce "1+1=3 (or more)" effects @@ -1019,36 +940,32 @@ #. : The picker icon's circle #. : Blank outer area, outer space #: ../gui/colorsamplerwindow.py:197 -#, fuzzy msgid "Change Saturation and Value" -msgstr "改變明度/飽和度" +msgstr "變更飽和度和明度" #: ../gui/colorsamplerwindow.py:199 msgid "Harmony color switcher" msgstr "" #: ../gui/colorsamplerwindow.py:200 -#, fuzzy msgid "Change Hue" -msgstr "改變色相" +msgstr "變更色相" #: ../gui/colorsamplerwindow.py:201 msgid "Current color vs. Last Used" -msgstr "" +msgstr "目前顏色 vs. 上次使用的" #: ../gui/colorsamplerwindow.py:202 -#, fuzzy msgid "Pick a screen color" -msgstr "點取顏色" +msgstr "從畫面上選取顏色" #: ../gui/colorsamplerwindow.py:929 -#, fuzzy msgid "Change Hue, Saturation and Value" -msgstr "改變明度/飽和度" +msgstr "變更色相、飽和度和明度" #: ../gui/colorsamplerwindow.py:1000 msgid "Change Red, Green and Blue components" -msgstr "" +msgstr "變更紅色、綠色和藍色成份" #: ../gui/colorsamplerwindow.py:1062 msgid "RGB" @@ -1060,7 +977,6 @@ #. Colour history #: ../gui/colorsamplerwindow.py:1066 -#, fuzzy msgid "Color history" msgstr "顏色記錄" @@ -1084,7 +1000,6 @@ msgstr "" #: ../gui/colorsamplerwindow.py:1092 -#, fuzzy msgid "Complementary" msgstr "互補色" @@ -1095,9 +1010,8 @@ msgstr "" #: ../gui/colorsamplerwindow.py:1093 -#, fuzzy msgid "Split complementary" -msgstr "鄰接補色" +msgstr "分裂補色" #: ../gui/colorsamplerwindow.py:1093 msgid "" @@ -1106,7 +1020,6 @@ msgstr "" #: ../gui/colorsamplerwindow.py:1094 -#, fuzzy msgid "Double complementary" msgstr "雙補色" @@ -1116,7 +1029,7 @@ #: ../gui/colorsamplerwindow.py:1095 msgid "Square" -msgstr "二元" +msgstr "四等分" #: ../gui/colorsamplerwindow.py:1095 msgid "Four equally-spaced hues" @@ -1124,7 +1037,7 @@ #: ../gui/colorsamplerwindow.py:1096 msgid "Triadic" -msgstr "三元" +msgstr "三等分" #: ../gui/colorsamplerwindow.py:1096 msgid "" @@ -1154,33 +1067,31 @@ #: ../gui/dialogs.py:89 msgid "Overwrite brush?" -msgstr "" +msgstr "取代筆刷?" #: ../gui/dialogs.py:98 ../gui/dialogs.py:156 msgid "Replace" -msgstr "" +msgstr "取代" #: ../gui/dialogs.py:101 ../gui/dialogs.py:159 -#, fuzzy msgid "Rename" -msgstr "重新命名筆刷" +msgstr "重新命名" #: ../gui/dialogs.py:104 msgid "Replace all" -msgstr "" +msgstr "取代全部" #: ../gui/dialogs.py:106 -#, fuzzy msgid "Rename all" -msgstr "重新命名筆刷" +msgstr "全部重新命名" #: ../gui/dialogs.py:121 msgid "Imported brush" -msgstr "" +msgstr "已匯入的筆刷" #: ../gui/dialogs.py:122 msgid "Existing brush" -msgstr "" +msgstr "已存在的筆刷" #: ../gui/dialogs.py:124 #, python-format @@ -1191,7 +1102,7 @@ #: ../gui/dialogs.py:147 msgid "Overwrite brush group?" -msgstr "" +msgstr "取代筆刷群組?" #: ../gui/dialogs.py:169 #, python-format @@ -1203,7 +1114,7 @@ #: ../gui/dialogs.py:257 msgid "Import brush package?" -msgstr "" +msgstr "要匯入筆刷套件?" #: ../gui/dialogs.py:269 #, python-format @@ -1211,15 +1122,13 @@ msgstr "" #: ../gui/dialogs.py:285 -#, fuzzy msgid "Color details" -msgstr "明度" +msgstr "顏色詳細資訊" #. Quick brush changer -#: ../gui/dialogs.py:384 ../gui/toolbar.py:303 -#, fuzzy +#: ../gui/dialogs.py:382 ../gui/toolbar.py:300 msgid "Change Brush" -msgstr "改變色相" +msgstr "變更筆刷" #: ../gui/document.py:81 msgid "Brighter" @@ -1231,11 +1140,11 @@ #: ../gui/document.py:83 msgid "More Opaque" -msgstr "增加不透明" +msgstr "增加不透明度" #: ../gui/document.py:84 msgid "Less Opaque" -msgstr "減少不透明" +msgstr "減少不透明度" #: ../gui/document.py:85 ../gui/preferenceswindow.py:37 msgid "Pick Context (layer, brush and color)" @@ -1246,23 +1155,20 @@ msgstr "變暗" #: ../gui/document.py:88 -#, fuzzy msgid "Change Color Hue (counter-clockwise)" -msgstr "逆時針旋轉" +msgstr "變更色相 (逆時針)" #: ../gui/document.py:89 -#, fuzzy msgid "Change Color Hue (clockwise)" -msgstr "改變明度 (HSV)" +msgstr "變更色相 (順時針)" #: ../gui/document.py:90 msgid "Purer" -msgstr "" +msgstr "純化" #: ../gui/document.py:91 -#, fuzzy msgid "Grayer" -msgstr "圖層" +msgstr "灰化" #: ../gui/document.py:92 msgid "Bigger" @@ -1324,34 +1230,31 @@ #: ../gui/document.py:113 msgid "Reset and Center" -msgstr "" +msgstr "重置並置中" #: ../gui/document.py:114 msgid "Reset Zoom, Rotation and Mirroring, and recenter the document" -msgstr "" +msgstr "重置縮放、旋轉與鏡射,並且重新置中" #: ../gui/document.py:116 msgid "Reset" -msgstr "" +msgstr "重置" #: ../gui/document.py:117 ../gui/preferenceswindow.py:40 -#, fuzzy msgid "Zoom" -msgstr "縮小" +msgstr "縮放" #: ../gui/document.py:118 msgid "Rotation" -msgstr "" +msgstr "旋轉" #: ../gui/document.py:119 -#, fuzzy msgid "Mirror" -msgstr "鏡射圖像" +msgstr "鏡射" #: ../gui/document.py:120 -#, fuzzy msgid "Zoom In" -msgstr "縮小" +msgstr "放大" #: ../gui/document.py:121 msgid "Increase magnification" @@ -1391,17 +1294,16 @@ msgstr "隱藏目前之上的圖層" #: ../gui/document.py:150 -#, fuzzy msgid "Print Brush Input Values to Console" msgstr "列印筆刷輸入值到標準輸出" #: ../gui/document.py:151 msgid "Visualize Rendering" -msgstr "視覺化演算" +msgstr "視覺化描繪演算" #: ../gui/document.py:152 msgid "Disable GTK Double Buffering" -msgstr "停用 GTK 雙倍緩衝" +msgstr "停用 GTK 雙重緩衝" #: ../gui/document.py:161 #, python-format @@ -1414,308 +1316,288 @@ msgstr "儲存到筆刷 %d" #: ../gui/document.py:644 -#, fuzzy, python-format +#, python-format msgid "Undo %s" -msgstr "復原" +msgstr "復原 %s" #: ../gui/document.py:646 msgid "Undo: nothing to undo" -msgstr "" +msgstr "復原: 無上一步" #: ../gui/document.py:653 -#, fuzzy, python-format +#, python-format msgid "Redo %s" -msgstr "取消復原" +msgstr "取消復原 %s" #: ../gui/document.py:655 msgid "Redo: nothing to redo" -msgstr "" +msgstr "取消復原: 無下一步" #. name, stock id, label, accelerator, tooltip, callback -#: ../gui/drawwindow.py:206 +#: ../gui/drawwindow.py:214 msgid "File" msgstr "檔案" #. FIXME: should do this periodically, not only on quit -#: ../gui/drawwindow.py:207 ../gui/drawwindow.py:898 +#: ../gui/drawwindow.py:215 ../gui/drawwindow.py:907 msgid "Quit" msgstr "離開" -#: ../gui/drawwindow.py:208 +#: ../gui/drawwindow.py:216 msgid "Toggle Document Frame" -msgstr "" +msgstr "切換顯示文件邊框" -#: ../gui/drawwindow.py:213 ../gui/preferenceswindow.py:36 +#: ../gui/drawwindow.py:221 ../gui/preferenceswindow.py:36 msgid "Pick Color" msgstr "點取顏色" -#: ../gui/drawwindow.py:214 ../gui/preferenceswindow.py:46 +#: ../gui/drawwindow.py:222 ../gui/preferenceswindow.py:46 msgid "Color History" msgstr "顏色記錄" -#: ../gui/drawwindow.py:215 -#, fuzzy +#: ../gui/drawwindow.py:223 msgid "Color Changer (crossed bowl)" -msgstr "換色器" +msgstr "換色器 (crossed bowl)" -#: ../gui/drawwindow.py:216 -#, fuzzy +#: ../gui/drawwindow.py:224 msgid "Color Changer (washed)" -msgstr "換色器" +msgstr "換色器 (washed)" -#: ../gui/drawwindow.py:217 ../gui/preferenceswindow.py:45 +#: ../gui/drawwindow.py:225 ../gui/preferenceswindow.py:45 msgid "Color Ring" msgstr "色圈" -#: ../gui/drawwindow.py:218 -#, fuzzy +#: ../gui/drawwindow.py:226 msgid "Color Details" msgstr "詳細資訊" -#: ../gui/drawwindow.py:220 +#: ../gui/drawwindow.py:228 msgid "Brushkeys" msgstr "筆刷按鍵" -#: ../gui/drawwindow.py:221 +#: ../gui/drawwindow.py:229 msgid "Help!" msgstr "說明!" -#: ../gui/drawwindow.py:223 ../gui/stock.py:43 +#: ../gui/drawwindow.py:231 ../gui/stock.py:43 msgid "Layers" msgstr "圖層" #. Scratchpad menu items -#: ../gui/drawwindow.py:226 ../gui/scratchwindow.py:36 ../gui/stock.py:42 +#: ../gui/drawwindow.py:234 ../gui/scratchwindow.py:36 ../gui/stock.py:42 msgid "Scratchpad" -msgstr "" +msgstr "便條紙" -#: ../gui/drawwindow.py:227 ../gui/scratchwindow.py:55 +#: ../gui/drawwindow.py:235 ../gui/scratchwindow.py:55 msgid "New Scratchpad" -msgstr "" +msgstr "新增便條紙" -#: ../gui/drawwindow.py:228 +#: ../gui/drawwindow.py:236 msgid "Load Scratchpad..." -msgstr "" +msgstr "載入便條紙" -#: ../gui/drawwindow.py:229 -#, fuzzy +#: ../gui/drawwindow.py:237 msgid "Save Scratchpad Now" -msgstr "另存為廢料" +msgstr "立即儲存便條紙" -#: ../gui/drawwindow.py:230 -#, fuzzy +#: ../gui/drawwindow.py:238 msgid "Save Scratchpad As..." -msgstr "另存新檔..." +msgstr "另存便條紙..." -#: ../gui/drawwindow.py:231 ../gui/scratchwindow.py:53 +#: ../gui/drawwindow.py:239 ../gui/scratchwindow.py:53 msgid "Revert Scratchpad" -msgstr "" +msgstr "復原便條紙" -#: ../gui/drawwindow.py:232 -#, fuzzy +#: ../gui/drawwindow.py:240 msgid "Save Scratchpad as Default" -msgstr "儲存為預設值" +msgstr "儲存便條紙為預設值" -#: ../gui/drawwindow.py:233 +#: ../gui/drawwindow.py:241 msgid "Clear the Default Scratchpad" -msgstr "" +msgstr "清除預設的便條紙" -#: ../gui/drawwindow.py:234 +#: ../gui/drawwindow.py:242 msgid "Render a Palette" -msgstr "" +msgstr "繪製調色盤" -#: ../gui/drawwindow.py:235 +#: ../gui/drawwindow.py:243 msgid "Load Palette File..." -msgstr "" +msgstr "載入調色盤..." -#: ../gui/drawwindow.py:236 +#: ../gui/drawwindow.py:244 msgid "Different Saturations of the current Color" -msgstr "" +msgstr "以目前顏色畫出飽和度變化" -#: ../gui/drawwindow.py:237 +#: ../gui/drawwindow.py:245 msgid "Copy Background to Scratchpad" -msgstr "" +msgstr "將背景複製到便條紙" -#: ../gui/drawwindow.py:239 +#: ../gui/drawwindow.py:247 msgid "Brush" msgstr "筆刷" -#: ../gui/drawwindow.py:240 -#, fuzzy +#: ../gui/drawwindow.py:248 msgid "Change Brush..." -msgstr "改變色相" +msgstr "變更筆刷..." -#: ../gui/drawwindow.py:241 +#: ../gui/drawwindow.py:249 msgid "Download more brushes (in web browser)" -msgstr "" +msgstr "下載更多筆刷 (開啟瀏覽器)" -#: ../gui/drawwindow.py:244 ../gui/drawwindow.py:260 +#: ../gui/drawwindow.py:252 ../gui/drawwindow.py:268 msgid "Help" msgstr "說明" -#: ../gui/drawwindow.py:245 +#: ../gui/drawwindow.py:253 msgid "Where is the Documentation?" msgstr "說明文件?" -#: ../gui/drawwindow.py:246 +#: ../gui/drawwindow.py:254 msgid "Change the Keyboard Shortcuts?" msgstr "變更鍵盤快捷鍵?" -#: ../gui/drawwindow.py:247 +#: ../gui/drawwindow.py:255 msgid "About MyPaint" msgstr "關於 MyPaint" -#: ../gui/drawwindow.py:249 +#: ../gui/drawwindow.py:257 msgid "Debug" msgstr "除錯" -#: ../gui/drawwindow.py:250 -#, fuzzy +#: ../gui/drawwindow.py:258 msgid "Print Memory Leak Info to Console (Slow!)" msgstr "列印記憶體溢出資訊到標準輸出 (慢!)" -#: ../gui/drawwindow.py:251 +#: ../gui/drawwindow.py:259 msgid "Run Garbage Collector Now" msgstr "立刻執行垃圾收集器" -#: ../gui/drawwindow.py:252 +#: ../gui/drawwindow.py:260 msgid "Start/Stop Python Profiling (cProfile)" -msgstr "" +msgstr "開始/停止 Python Profiling (cProfile)" -#: ../gui/drawwindow.py:253 -#, fuzzy +#: ../gui/drawwindow.py:261 msgid "GTK input device dialog" -msgstr "輸入裝置的模式:" +msgstr "GTK 輸入裝置對話視窗" -#: ../gui/drawwindow.py:256 ../gui/preferenceswindow.py:225 +#: ../gui/drawwindow.py:264 ../gui/preferenceswindow.py:225 #: ../gui/toolbar.py:36 msgid "View" msgstr "檢視" -#: ../gui/drawwindow.py:257 +#: ../gui/drawwindow.py:265 msgid "Toolbars" -msgstr "" +msgstr "工具列" -#: ../gui/drawwindow.py:258 -#, fuzzy +#: ../gui/drawwindow.py:266 msgid "Popup Menu" msgstr "顯示選單" -#: ../gui/drawwindow.py:270 ../gui/preferenceswindow.py:70 +#: ../gui/drawwindow.py:278 ../gui/preferenceswindow.py:70 msgid "Preferences" msgstr "偏好設定" -#: ../gui/drawwindow.py:272 -#, fuzzy +#: ../gui/drawwindow.py:280 msgid "Test input devices" -msgstr "輸入裝置的模式:" +msgstr "測試輸入裝置" -#: ../gui/drawwindow.py:274 -#, fuzzy +#: ../gui/drawwindow.py:282 msgid "Document Frame..." -msgstr "重新命名..." +msgstr "文件邊框..." -#: ../gui/drawwindow.py:276 +#: ../gui/drawwindow.py:284 msgid "Toggle the Layers list" -msgstr "" +msgstr "切換顯示圖層清單" -#: ../gui/drawwindow.py:282 +#: ../gui/drawwindow.py:290 msgid "Edit and reorganise Brush Lists" -msgstr "" +msgstr "編輯並重新組織筆刷清單" -#: ../gui/drawwindow.py:286 -#, fuzzy +#: ../gui/drawwindow.py:294 msgid "Change Brush Settings in detail" -msgstr "改變明度/飽和度" +msgstr "變更筆刷的詳細設定" -#: ../gui/drawwindow.py:289 -#, fuzzy +#: ../gui/drawwindow.py:297 msgid "Toggle the Colour Triangle" -msgstr "顏色三角..." +msgstr "切換顯示顏色三角..." -#: ../gui/drawwindow.py:292 +#: ../gui/drawwindow.py:300 msgid "Toggle the advanced Colour Sampler" -msgstr "" +msgstr "切換顯示進階顏色取樣器" -#: ../gui/drawwindow.py:295 +#: ../gui/drawwindow.py:303 msgid "Toggle the scratchpad" -msgstr "" +msgstr "切換顯示便條紙" -#: ../gui/drawwindow.py:318 ../gui/toolbar.py:37 -#, fuzzy +#: ../gui/drawwindow.py:326 ../gui/toolbar.py:37 msgid "Subwindows" -msgstr "切換子視窗" +msgstr "顯示子視窗" -#: ../gui/drawwindow.py:319 -#, fuzzy +#: ../gui/drawwindow.py:327 msgid "Show subwindows" -msgstr "切換子視窗" +msgstr "顯示子視窗" -#: ../gui/drawwindow.py:326 +#: ../gui/drawwindow.py:334 msgid "Menubar only" -msgstr "" +msgstr "只有選單列" -#: ../gui/drawwindow.py:327 +#: ../gui/drawwindow.py:335 msgid "Show menu bar" -msgstr "" +msgstr "顯示選單列" -#: ../gui/drawwindow.py:329 +#: ../gui/drawwindow.py:337 msgid "Toolbar only" -msgstr "" +msgstr "只有工具列" -#: ../gui/drawwindow.py:330 +#: ../gui/drawwindow.py:338 msgid "Show toolbar" -msgstr "" +msgstr "顯示工具列" -#: ../gui/drawwindow.py:332 +#: ../gui/drawwindow.py:340 msgid "Both" -msgstr "" +msgstr "顯示兩者" -#: ../gui/drawwindow.py:333 +#: ../gui/drawwindow.py:341 msgid "Show both the menu bar and the toolbar" -msgstr "" +msgstr "同時顯示選單列與工具列" -#: ../gui/drawwindow.py:768 -#, fuzzy +#: ../gui/drawwindow.py:777 msgid "Leave Fullscreen Mode" -msgstr "全螢幕" +msgstr "離開全螢幕模式" -#: ../gui/drawwindow.py:769 -#, fuzzy +#: ../gui/drawwindow.py:778 msgid "UnFullscreen" -msgstr "全螢幕" +msgstr "離開全螢幕" -#: ../gui/drawwindow.py:772 -#, fuzzy +#: ../gui/drawwindow.py:781 msgid "Enter Fullscreen Mode" -msgstr "全螢幕" +msgstr "進入全螢幕模式" -#: ../gui/drawwindow.py:773 +#: ../gui/drawwindow.py:782 msgid "Fullscreen" msgstr "全螢幕" -#: ../gui/drawwindow.py:861 +#: ../gui/drawwindow.py:870 msgid "Gimp Palette Format" -msgstr "" +msgstr "Gimp 調色盤格式" -#: ../gui/drawwindow.py:862 -#, fuzzy +#: ../gui/drawwindow.py:871 msgid "All Files" -msgstr "檔案" +msgstr "所有檔案" -#: ../gui/drawwindow.py:898 +#: ../gui/drawwindow.py:907 msgid "Really Quit?" msgstr "確定要離開?" -#: ../gui/drawwindow.py:926 +#: ../gui/drawwindow.py:935 msgid "" -"Copyright (C) 2005-2010\n" +"Copyright (C) 2005-2012\n" "Martin Renold and the MyPaint Development Team" msgstr "" "著作權 (C) 2005-2010\n" "Martin Renold 和 MyPaint 開發團隊" -#: ../gui/drawwindow.py:930 +#: ../gui/drawwindow.py:939 msgid "" "This program is free software; you can redistribute it and/or modify it " "under the terms of the GNU General Public License as published by the Free " @@ -1733,51 +1615,48 @@ "得更多詳細資訊。" #. (in order of appearance) -#: ../gui/drawwindow.py:941 ../gui/drawwindow.py:943 ../gui/drawwindow.py:944 -#: ../gui/drawwindow.py:945 ../gui/drawwindow.py:946 ../gui/drawwindow.py:948 -#: ../gui/drawwindow.py:949 ../gui/drawwindow.py:950 ../gui/drawwindow.py:951 -#: ../gui/drawwindow.py:952 ../gui/drawwindow.py:953 ../gui/drawwindow.py:954 -#: ../gui/drawwindow.py:955 ../gui/drawwindow.py:956 ../gui/drawwindow.py:957 +#: ../gui/drawwindow.py:950 ../gui/drawwindow.py:952 ../gui/drawwindow.py:953 +#: ../gui/drawwindow.py:954 ../gui/drawwindow.py:955 ../gui/drawwindow.py:957 +#: ../gui/drawwindow.py:958 ../gui/drawwindow.py:959 ../gui/drawwindow.py:960 +#: ../gui/drawwindow.py:961 ../gui/drawwindow.py:962 ../gui/drawwindow.py:963 +#: ../gui/drawwindow.py:964 ../gui/drawwindow.py:965 ../gui/drawwindow.py:966 msgid "programming" msgstr "程式" -#: ../gui/drawwindow.py:942 ../gui/drawwindow.py:947 +#: ../gui/drawwindow.py:951 ../gui/drawwindow.py:956 msgid "portability" msgstr "可移植性" -#: ../gui/drawwindow.py:960 ../gui/drawwindow.py:961 ../gui/drawwindow.py:963 -#: ../gui/drawwindow.py:965 ../gui/drawwindow.py:968 +#: ../gui/drawwindow.py:969 ../gui/drawwindow.py:970 ../gui/drawwindow.py:972 +#: ../gui/drawwindow.py:974 ../gui/drawwindow.py:977 msgid "brushes" msgstr "筆刷" -#: ../gui/drawwindow.py:962 +#: ../gui/drawwindow.py:971 msgid "patterns, brushes" msgstr "圖案、筆刷" -#: ../gui/drawwindow.py:964 -#, fuzzy +#: ../gui/drawwindow.py:973 msgid "brushes, patterns" -msgstr "筆刷、程式" +msgstr "筆刷、圖案" -#: ../gui/drawwindow.py:966 +#: ../gui/drawwindow.py:975 msgid "desktop icon" msgstr "桌面圖示" -#: ../gui/drawwindow.py:967 ../gui/drawwindow.py:969 -#, fuzzy +#: ../gui/drawwindow.py:976 ../gui/drawwindow.py:978 msgid "patterns" msgstr "圖案" -#: ../gui/drawwindow.py:970 ../gui/drawwindow.py:971 -#, fuzzy +#: ../gui/drawwindow.py:979 ../gui/drawwindow.py:980 msgid "tool icons" -msgstr "桌面圖示" +msgstr "工具圖示" -#: ../gui/drawwindow.py:1003 +#: ../gui/drawwindow.py:1012 msgid "Move your mouse over a menu entry, then press the key to assign." msgstr "將您的滑鼠移動到選單項目上方,然後按滑鼠鍵來指定。" -#: ../gui/drawwindow.py:1005 +#: ../gui/drawwindow.py:1014 msgid "" "You can also drag the canvas with the mouse while holding the middle mouse " "button or spacebar. Or with the arrow keys.\n" @@ -1791,8 +1670,7 @@ "相對於早期版本,現在畫面滾動和縮放更為順暢且不會讓您用完記憶體。但如果在畫面" "縮到相當小時您到處塗繪,仍然需要大量的記憶體。" -#: ../gui/drawwindow.py:1012 -#, fuzzy +#: ../gui/drawwindow.py:1021 msgid "" "Brushkeys are used to quickly save/restore brush settings using keyboard " "shortcuts. You can paint with one hand and change brushes with the other " @@ -1809,7 +1687,7 @@ "這些不具名稱的筆刷不會顯示在筆刷選擇器清單。但這些筆刷會被留下來,即使您離開" "程式。這些筆刷也會記住選擇的顏色。相反的,選擇普通筆刷則不會改變顏色。" -#: ../gui/drawwindow.py:1021 +#: ../gui/drawwindow.py:1030 msgid "" "There is a tutorial available on the MyPaint homepage. It explains some " "features which are hard to discover yourself.\n" @@ -1842,7 +1720,7 @@ #: ../gui/filehandling.py:61 msgid "Open Last" -msgstr "最後開啟" +msgstr "開啟上次編輯的檔案" #: ../gui/filehandling.py:61 msgid "Open the last file you saved" @@ -1853,14 +1731,12 @@ msgstr "重新載入" #: ../gui/filehandling.py:62 -#, fuzzy msgid "Reload the current file" -msgstr "開啟最近的檔案" +msgstr "重新載入目前的檔案" #: ../gui/filehandling.py:63 -#, fuzzy msgid "Save to a file" -msgstr "儲存為預設值" +msgstr "儲存至檔案" #: ../gui/filehandling.py:64 msgid "Save As..." @@ -1871,13 +1747,12 @@ msgstr "" #: ../gui/filehandling.py:65 -#, fuzzy msgid "Export..." -msgstr "回報..." +msgstr "匯出..." #: ../gui/filehandling.py:65 msgid "Export to a file" -msgstr "" +msgstr "匯出至檔案" #: ../gui/filehandling.py:66 msgid "Save As Scrap" @@ -1907,11 +1782,11 @@ #: ../gui/filehandling.py:78 msgid "Open Recent" -msgstr "開啟最近的" +msgstr "開啟最近使用的檔案" #: ../gui/filehandling.py:78 msgid "Open Recent files" -msgstr "開啟最近的檔案" +msgstr "開啟最近使用的檔案" #. (name, patterns) #: ../gui/filehandling.py:99 @@ -1934,7 +1809,7 @@ #. (name, extension, options) #: ../gui/filehandling.py:105 msgid "By extension (prefer default format)" -msgstr "" +msgstr "依附檔名決定 (偏好預設格式)" #. 1 #: ../gui/filehandling.py:107 @@ -1961,39 +1836,36 @@ msgstr "儲存..." #: ../gui/filehandling.py:162 -#, fuzzy msgid "Format to save as:" -msgstr "無法儲存:%s" +msgstr "另存格式:" #: ../gui/filehandling.py:188 msgid "Confirm" msgstr "" #: ../gui/filehandling.py:188 -#, fuzzy msgid "Really continue?" -msgstr "確定要離開?" +msgstr "確定要繼續?" #: ../gui/filehandling.py:197 -#, fuzzy, python-format +#, python-format msgid "This will discard %d minute of unsaved painting." msgid_plural "This will discard %d minutes of unsaved painting." -msgstr[0] "這將會丟棄未儲存圖畫的 %d 分鐘。" +msgstr[0] "這將會丟棄 %d 分鐘以來尚未儲存的圖畫。" #: ../gui/filehandling.py:202 -#, fuzzy, python-format +#, python-format msgid "This will discard %d second of unsaved painting." msgid_plural "This will discard %d seconds of unsaved painting." -msgstr[0] "這將會丟棄未儲存圖畫的 %d 秒。" +msgstr[0] "這將會丟棄 %d 秒以來尚未儲存的圖畫。" #: ../gui/filehandling.py:210 msgid "_Save as Scrap" msgstr "另存為廢料(_S)" #: ../gui/filehandling.py:393 -#, fuzzy msgid "Open Scratchpad..." -msgstr "開啟下一個廢料" +msgstr "開啟便條紙..." #: ../gui/filehandling.py:698 #, python-format @@ -2002,23 +1874,23 @@ #: ../gui/framewindow.py:34 msgid "Height" -msgstr "" +msgstr "高度" #: ../gui/framewindow.py:35 msgid "Width" -msgstr "" +msgstr "寬度" #: ../gui/framewindow.py:46 msgid "Crop to active layer bounds" -msgstr "" +msgstr "裁剪到啟用圖層的邊界" #: ../gui/framewindow.py:47 msgid "Crop to document bounds" -msgstr "" +msgstr "裁剪到文件的邊界" #: ../gui/framewindow.py:51 msgid "Enabled" -msgstr "" +msgstr "啟用" #: ../gui/functionwindow.py:38 msgid "Base Value" @@ -2048,91 +1920,94 @@ #: ../gui/inputtestwindow.py:20 msgid "Input Device Test" -msgstr "" +msgstr "輸入裝置測試" #: ../gui/inputtestwindow.py:47 -#, fuzzy msgid "(no pressure)" -msgstr "壓力" +msgstr "(無壓感)" #: ../gui/inputtestwindow.py:48 -#, fuzzy msgid "Pressure:" -msgstr "壓力" +msgstr "壓力:" #: ../gui/inputtestwindow.py:50 msgid "(no tilt)" -msgstr "" +msgstr "(無傾斜)" #: ../gui/inputtestwindow.py:51 msgid "Tilt:" -msgstr "" +msgstr "傾斜:" #: ../gui/inputtestwindow.py:56 -#, fuzzy msgid "(no device)" -msgstr "(未命名)" +msgstr "(無裝置)" #: ../gui/inputtestwindow.py:57 msgid "Device:" -msgstr "" +msgstr "裝置:" #: ../gui/layerswindow.py:50 msgid "Visible" -msgstr "" +msgstr "可見" #: ../gui/layerswindow.py:56 msgid "Locked" -msgstr "" +msgstr "已鎖定" #: ../gui/layerswindow.py:72 msgid "Mode:" -msgstr "" +msgstr "模式:" #: ../gui/layerswindow.py:83 msgid "Opacity:" msgstr "不透明度:" -#: ../gui/layerswindow.py:101 -msgid "Create a duplicate of this channel and add it to the image" -msgstr "" +#: ../gui/layerswindow.py:101 ../lib/command.py:243 +msgid "Duplicate Layer" +msgstr "複製圖層" -#: ../gui/layerswindow.py:279 -msgid "Copy of " -msgstr "" +#: ../gui/layerswindow.py:280 +#, python-format +msgid "Copy of %s" +msgstr "%s 的複本" -#: ../gui/layerswindow.py:284 ../gui/layerswindow.py:327 +#: ../gui/layerswindow.py:283 +#, python-format +msgid "Copy of Untitled layer #%d" +msgstr "未命名的圖層 #%d 的複本" + +#: ../gui/layerswindow.py:326 #, python-format msgid "Untitled layer #%d" -msgstr "" +msgstr "未命名的圖層 #%d" #: ../gui/layout.py:591 msgid "Collapse" -msgstr "" +msgstr "收合" #: ../gui/layout.py:592 msgid "Expand" -msgstr "" +msgstr "展開" #: ../gui/layout.py:666 msgid "Snap out" -msgstr "" +msgstr "脫離" #: ../gui/layout.py:668 msgid "Close" -msgstr "" +msgstr "關閉" #: ../gui/preferenceswindow.py:20 msgid "Disabled (no pressure sensitivity)" -msgstr "" +msgstr "停用 (無壓感)" #: ../gui/preferenceswindow.py:21 msgid "Screen (normal)" -msgstr "" +msgstr "螢幕 (標準)" #: ../gui/preferenceswindow.py:22 msgid "Window (not recommended)" -msgstr "" +msgstr "視窗 (不建議)" #. These can be names of actions within ActionGroups defined elsewhere, #. or names of actions the handler interprets itself. @@ -2141,34 +2016,32 @@ #. (action_or_whatever, label) #: ../gui/preferenceswindow.py:33 msgid "No action" -msgstr "" +msgstr "無動作" #. [0] is the default for the comboboxes #: ../gui/preferenceswindow.py:34 -#, fuzzy msgid "Menu" -msgstr "顯示選單" +msgstr "選單" #: ../gui/preferenceswindow.py:35 msgid "Toggle Subwindows" -msgstr "切換子視窗" +msgstr "切換顯示子視窗" #: ../gui/preferenceswindow.py:39 -#, fuzzy msgid "Pan" -msgstr "圖案" +msgstr "平移" #: ../gui/preferenceswindow.py:41 msgid "Rotate" -msgstr "" +msgstr "旋轉" #: ../gui/preferenceswindow.py:42 msgid "Straight Line" -msgstr "" +msgstr "直線" #: ../gui/preferenceswindow.py:43 msgid "Sequence of Straight Lines" -msgstr "" +msgstr "連續直線" #: ../gui/preferenceswindow.py:44 msgid "Color Changer" @@ -2186,164 +2059,157 @@ #. (pref_name, label) #: ../gui/preferenceswindow.py:53 msgid "Button 1 + Shift" -msgstr "" +msgstr "按鈕 1 + Shift" #: ../gui/preferenceswindow.py:54 msgid "Button 1 + Ctrl (or Alt)" -msgstr "" +msgstr "按鈕 1 + Ctrl (或 Alt)" #: ../gui/preferenceswindow.py:55 msgid "Button 2" -msgstr "" +msgstr "按鈕 2" #: ../gui/preferenceswindow.py:56 msgid "Button 2 + Shift" -msgstr "" +msgstr "按鈕 2 + Shift" #: ../gui/preferenceswindow.py:57 msgid "Button 2 + Ctrl (or Alt)" -msgstr "" +msgstr "按鈕 2 + Ctrl (或 Alt)" #: ../gui/preferenceswindow.py:58 msgid "Button 3" -msgstr "" +msgstr "按鈕 3" #: ../gui/preferenceswindow.py:59 msgid "Button 3 + Shift" -msgstr "" +msgstr "按鈕 3 + Shift" #: ../gui/preferenceswindow.py:60 msgid "Button 3 + Ctrl (or Alt)" -msgstr "" +msgstr "按鈕 3 + Ctrl (或 Alt)" #. TRANSLATORS: Tab label #: ../gui/preferenceswindow.py:90 msgid "Pen Input" -msgstr "" +msgstr "壓感筆輸入" #: ../gui/preferenceswindow.py:96 msgid "Input Device" -msgstr "" +msgstr "輸入裝置" #: ../gui/preferenceswindow.py:103 msgid "" "Scale input pressure to brush pressure. This is applied to all input " "devices. The mouse button has an input pressure of 0.5 when pressed." msgstr "" +"調整輸入壓力與筆刷壓力的對應值。這會套用到所有的輸入裝置。滑鼠按鈕按下時的輸" +"入壓力值為 0.5。" #. TRANSLATORS: Graph y-axis label #: ../gui/preferenceswindow.py:113 -#, fuzzy msgid "Brush Pressure" -msgstr "壓力" +msgstr "筆刷壓力" #. TRANSLATORS: Graph x-axis label #: ../gui/preferenceswindow.py:123 -#, fuzzy msgid "Input Pressure" -msgstr "壓力" +msgstr "輸入壓力" #: ../gui/preferenceswindow.py:132 msgid "Mode: " -msgstr "" +msgstr "模式: " #: ../gui/preferenceswindow.py:149 msgid "Buttons" -msgstr "" +msgstr "按鈕" #: ../gui/preferenceswindow.py:155 msgid "Pen and mouse button mappings" -msgstr "" +msgstr "壓感筆和滑鼠按鈕的對應" #: ../gui/preferenceswindow.py:181 msgid "Saving" -msgstr "" +msgstr "存檔" #: ../gui/preferenceswindow.py:187 msgid "Saving" -msgstr "" +msgstr "存檔" #: ../gui/preferenceswindow.py:191 msgid "Default file format:" -msgstr "" +msgstr "預設檔案格式:" #: ../gui/preferenceswindow.py:206 -#, fuzzy msgid "Save Next Scrap" -msgstr "開啟下一個廢料" +msgstr "儲存下一個廢料" #: ../gui/preferenceswindow.py:210 -#, fuzzy msgid "Path and filename prefix:" -msgstr "「儲存下一個廢料」的路徑和檔名字首" +msgstr "路徑和檔名字首" #: ../gui/preferenceswindow.py:231 msgid "Default View" -msgstr "" +msgstr "預設檢視" #: ../gui/preferenceswindow.py:235 -#, fuzzy msgid "Default zoom:" -msgstr "預設" +msgstr "預設縮放:" #: ../gui/preferenceswindow.py:248 msgid "High quality zoom (may result in slow scrolling)" -msgstr "" +msgstr "高品質縮放 (可能會造成捲動緩慢)" #: ../gui/preferenceswindow.py:255 -#, fuzzy msgid "Fullscreen" -msgstr "全螢幕" +msgstr "全螢幕" #: ../gui/preferenceswindow.py:259 msgid "Hide menu bar" -msgstr "" +msgstr "隱藏選單列" #: ../gui/preferenceswindow.py:264 msgid "Hide toolbar" -msgstr "" +msgstr "隱藏工具列" #: ../gui/preferenceswindow.py:269 msgid "Hide tools" -msgstr "" +msgstr "隱藏工具視窗" #: ../gui/scratchwindow.py:49 msgid "Load Scratchpad" -msgstr "" +msgstr "載入便條紙" #: ../gui/scratchwindow.py:51 msgid "Save Scratchpad as..." -msgstr "" +msgstr "另存便條紙..." #: ../gui/spinbox.py:32 msgid "Previous item" -msgstr "" +msgstr "上一項" #: ../gui/spinbox.py:35 msgid "Next item" -msgstr "" +msgstr "下一項" #: ../gui/spinbox.py:97 msgid "(Nothing to show)" -msgstr "" +msgstr "(無)" #. Tool windows. No trailing ellipses on these since none of them require #. further input before they can do anything: see section 4.3.2.1 of the the #. GNOME Human Interface Guidelines version 3.0. #: ../gui/stock.py:39 -#, fuzzy msgid "Brush List Editor" -msgstr "筆刷清單..." +msgstr "筆刷清單編輯器" #: ../gui/stock.py:40 -#, fuzzy msgid "Color Triangle" msgstr "顏色三角..." #: ../gui/stock.py:41 -#, fuzzy msgid "Color Sampler" -msgstr "顏色取樣器..." +msgstr "顏色取樣器" #: ../gui/stock.py:44 msgid "Rotate Counterclockwise" @@ -2355,24 +2221,24 @@ #: ../gui/stock.py:48 msgid "Mirror Horizontal" -msgstr "" +msgstr "水平鏡射" #: ../gui/stock.py:49 msgid "Mirror Vertical" -msgstr "" +msgstr "垂直鏡射" #: ../gui/stock.py:50 msgid "Blend Mode" -msgstr "" +msgstr "混合模式" #. (internal-name, display-name) #: ../gui/stock.py:51 ../lib/layer.py:17 msgid "Normal" -msgstr "" +msgstr "標準" #: ../gui/stock.py:53 msgid "Lock Alpha Channel" -msgstr "" +msgstr "鎖定 Alpha 通道" #: ../gui/stock.py:55 msgid "Brush Modifiers Active" @@ -2384,178 +2250,154 @@ #: ../gui/toolbar.py:32 msgid "File handling" -msgstr "" +msgstr "檔案處理" #: ../gui/toolbar.py:33 msgid "Scraps switcher" -msgstr "" +msgstr "廢料切換器" #: ../gui/toolbar.py:34 msgid "Undo and Redo" -msgstr "" +msgstr "復原與取消復原" #: ../gui/toolbar.py:35 msgid "Blend Modes" -msgstr "" +msgstr "混色模式" -#: ../gui/toolbar.py:65 -#, fuzzy +#: ../gui/toolbar.py:66 msgid "MyPaint" -msgstr "關於 MyPaint" +msgstr "" -#: ../gui/toolbar.py:78 +#: ../gui/toolbar.py:81 msgid "Current Color" -msgstr "" +msgstr "目前顏色" -#: ../gui/toolbar.py:80 -#, fuzzy +#: ../gui/toolbar.py:83 msgid "Current Brush" -msgstr "重新命名筆刷" +msgstr "目前筆刷" -#: ../gui/toolbar.py:82 -#, fuzzy +#: ../gui/toolbar.py:85 msgid "Brush Settings" msgstr "筆刷設定值" -#: ../gui/toolbar.py:154 -#, fuzzy +#: ../gui/toolbar.py:151 msgid "Color History and other tools" -msgstr "顏色記錄" +msgstr "顏色記錄和其他工具" #. Colour changing -#: ../gui/toolbar.py:177 -#, fuzzy +#: ../gui/toolbar.py:174 msgid "Change Color" -msgstr "改變色相" +msgstr "變更顏色" #. History #. Brush history -#: ../gui/toolbar.py:220 ../gui/toolbar.py:325 +#: ../gui/toolbar.py:217 ../gui/toolbar.py:322 msgid "Recently Used" -msgstr "" +msgstr "最近使用過的" -#: ../gui/toolbar.py:283 -#, fuzzy +#: ../gui/toolbar.py:280 msgid "Brush history etc." -msgstr "筆刷清單..." +msgstr "筆刷紀錄" #. A limited subset of the abailable brush settings. -#: ../gui/toolbar.py:409 -#, fuzzy +#: ../gui/toolbar.py:406 msgid "Quick Brush Settings" -msgstr "筆刷設定值" +msgstr "快速筆刷設定" -#: ../gui/toolbar.py:435 +#: ../gui/toolbar.py:432 #, python-format msgid "%s:" msgstr "" -#: ../gui/toolbar.py:442 +#: ../gui/toolbar.py:439 #, python-format msgid "Restore '%s' to this brush's saved value" -msgstr "" +msgstr "將 '%s' 還原到該筆刷儲存的值" #. Access to the brush settings window, and a big reset-all button #. aligned with the settings above. -#: ../gui/toolbar.py:460 -#, fuzzy +#: ../gui/toolbar.py:457 msgid "Detailed Brush Settings" -msgstr "筆刷設定值" +msgstr "詳細的筆刷設定" -#: ../gui/toolbar.py:475 -#, fuzzy +#: ../gui/toolbar.py:472 msgid "Restore Saved Settings" -msgstr "儲存設定值" +msgstr "還原儲存的設定值" -#: ../gui/toolbar.py:477 +#: ../gui/toolbar.py:474 msgid "Reset all brush settings to the current brush's saved values" -msgstr "" +msgstr "重置所有筆刷的設定值為目前筆刷儲存的值" -#: ../gui/toolbar.py:487 +#: ../gui/toolbar.py:484 msgid "Brush Blend Mode" -msgstr "" +msgstr "筆刷混色模式" #: ../lib/command.py:74 msgid "Unknown Action" -msgstr "" +msgstr "未知的動作" #: ../lib/command.py:94 msgid "Painting" -msgstr "" +msgstr "塗色" #: ../lib/command.py:110 -#, fuzzy msgid "Clear Layer" -msgstr "清除" +msgstr "清除圖層" #: ../lib/command.py:123 -#, fuzzy msgid "Load Layer" -msgstr "圖層" +msgstr "載入圖層" -#: ../lib/command.py:138 -#, fuzzy +#: ../lib/command.py:137 msgid "Merge Layers" -msgstr "圖層" +msgstr "合併圖層" -#: ../lib/command.py:160 -#, fuzzy +#: ../lib/command.py:159 msgid "Add Layer" -msgstr "圖層" +msgstr "新增圖層" -#: ../lib/command.py:180 -#, fuzzy +#: ../lib/command.py:179 msgid "Remove Layer" -msgstr "移除" +msgstr "移除圖層" -#: ../lib/command.py:203 -#, fuzzy +#: ../lib/command.py:202 msgid "Select Layer" -msgstr "選擇游標下的圖層" +msgstr "選擇圖層" -#: ../lib/command.py:218 -#, fuzzy +#: ../lib/command.py:217 msgid "Move Layer" -msgstr "圖層" - -#: ../lib/command.py:244 -msgid "Duplicate Layer" -msgstr "" +msgstr "移動圖層" -#: ../lib/command.py:264 +#: ../lib/command.py:263 msgid "Reorder Layer" -msgstr "" +msgstr "重新排列圖層" -#: ../lib/command.py:301 -#, fuzzy +#: ../lib/command.py:300 msgid "Make Layer Visible" -msgstr "圖層可見度" +msgstr "圖層可見" -#: ../lib/command.py:303 -#, fuzzy +#: ../lib/command.py:302 msgid "Make Layer Invisible" -msgstr "圖層可見度" +msgstr "圖層不可見" -#: ../lib/command.py:322 -#, fuzzy +#: ../lib/command.py:321 msgid "Lock Layer" -msgstr "圖層" +msgstr "鎖定圖層" -#: ../lib/command.py:324 +#: ../lib/command.py:323 msgid "Unlock Layer" -msgstr "" +msgstr "解除圖層鎖定" -#: ../lib/command.py:327 -#, fuzzy +#: ../lib/command.py:326 msgid "Change Layer Visibility" -msgstr "圖層可見度" +msgstr "變更圖層可見度" -#: ../lib/command.py:351 +#: ../lib/command.py:350 msgid "Change Layer Blending Mode" -msgstr "" +msgstr "變更圖層混色模式" #. add a hint due to a very consfusing error message when there is no space left on device -#: ../lib/document.py:365 +#: ../lib/document.py:372 #, python-format msgid "" "Unable to save: %s\n" @@ -2564,52 +2406,51 @@ "無法儲存:%s\n" "裝置上是否剩餘足夠的空間?" -#: ../lib/document.py:367 ../lib/document.py:370 +#: ../lib/document.py:374 ../lib/document.py:377 #, python-format msgid "Unable to save: %s" msgstr "無法儲存:%s" -#: ../lib/document.py:375 +#: ../lib/document.py:382 #, python-format msgid "File does not exist: %s" msgstr "檔案不存在:%s" -#: ../lib/document.py:377 +#: ../lib/document.py:384 #, python-format msgid "You do not have the necessary permissions to open file: %s" msgstr "您沒有足夠的權限來開啟檔案:%s" -#: ../lib/document.py:385 +#: ../lib/document.py:392 #, python-format msgid "Error while loading: GError %s" msgstr "載入時發生錯誤:GError %s" -#: ../lib/document.py:388 +#: ../lib/document.py:395 #, python-format msgid "Error while loading: IOError %s" msgstr "載入時發生錯誤:IOError %s" -#: ../lib/document.py:394 +#: ../lib/document.py:401 #, python-format msgid "Unknown file format extension: %s" msgstr "未知的檔案格式副檔名:%s" #: ../lib/layer.py:18 msgid "Multiply" -msgstr "" +msgstr "相乘" #: ../lib/layer.py:19 msgid "Burn" -msgstr "" +msgstr "燃燒" #: ../lib/layer.py:20 msgid "Dodge" -msgstr "" +msgstr "躲避" #: ../lib/layer.py:21 -#, fuzzy msgid "Screen" -msgstr "全螢幕" +msgstr "螢幕" #, fuzzy #~ msgid "All settings" Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/svg/mypaint-brush-blend-mode-colorize.svgz and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/svg/mypaint-brush-blend-mode-colorize.svgz differ Binary files /tmp/QqyXXngjBy/mypaint-1.0.0+git20111209.545d6f8/svg/mypaint-tool-scratchpad.svgz and /tmp/D1bDEE_yz9/mypaint-1.0.0+git20120121.b8338d5/svg/mypaint-tool-scratchpad.svgz differ