summaryrefslogtreecommitdiffstats
path: root/plug-ins/pygimp/plug-ins/gradients-save-as-css.py
diff options
context:
space:
mode:
Diffstat (limited to 'plug-ins/pygimp/plug-ins/gradients-save-as-css.py')
-rwxr-xr-xplug-ins/pygimp/plug-ins/gradients-save-as-css.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/plug-ins/pygimp/plug-ins/gradients-save-as-css.py b/plug-ins/pygimp/plug-ins/gradients-save-as-css.py
new file mode 100755
index 0000000..44179e4
--- /dev/null
+++ b/plug-ins/pygimp/plug-ins/gradients-save-as-css.py
@@ -0,0 +1,104 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Allows saving (TODO: and loading) CSS gradient files
+# Copyright (C) 2011 João S. O. Bueno <gwidion@gmail.com>
+#
+# 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+
+# Currently this exports all color segments as RGB linear centered segments.
+# TODO: Respect gradient alpha, off-center segments, different blending
+# functions and HSV colors
+
+from gimpfu import *
+
+gettext.install("gimp20-python", gimp.locale_directory, unicode=True)
+
+w3c_template = """background-image: linear-gradient(top, %s);\n"""
+moz_template = """background-image: -moz-linear-gradient(center top, %s);\n"""
+webkit_template = """background-image: -webkit-gradient(linear, """ \
+ """left top, left bottom, %s);\n"""
+
+color_to_html = lambda c: "rgb(%d,%d,%d)" % tuple(c)[:3]
+
+def format_text(text):
+ counter = 0
+ new_text = []
+ for token in text.split(","):
+ if counter + len(token) > 77:
+ token = "\n " + token
+ counter = 4
+ new_text.append(token)
+ if "\n" in token:
+ counter = len(token.rsplit("\n")[-1]) + 1
+ else:
+ counter += len(token) + 1
+
+ return ",".join(new_text)
+
+def gradient_css_save(gradient, file_name):
+ stops = []
+ wk_stops = []
+ n_segments = pdb.gimp_gradient_get_number_of_segments(gradient)
+ last_stop = None
+ for index in xrange(n_segments):
+ lcolor, lopacity = pdb.gimp_gradient_segment_get_left_color(
+ gradient,
+ index)
+ rcolor, ropacity = pdb.gimp_gradient_segment_get_right_color(
+ gradient,
+ index)
+ lpos = pdb.gimp_gradient_segment_get_left_pos(gradient, index)
+ rpos = pdb.gimp_gradient_segment_get_right_pos(gradient, index)
+
+ lstop = color_to_html(lcolor) + " %d%%" % int(100 * lpos)
+ wk_lstop = "color-stop(%.03f, %s)" %(lpos, color_to_html(lcolor))
+ if lstop != last_stop:
+ stops.append(lstop)
+ wk_stops.append(wk_lstop)
+
+ rstop = color_to_html(rcolor) + " %d%%" % int(100 * rpos)
+ wk_rstop = "color-stop(%.03f, %s)" %(rpos, color_to_html(rcolor))
+
+ stops.append(rstop)
+ wk_stops.append(wk_rstop)
+ last_stop = rstop
+
+ final_text = w3c_template % ", ".join(stops)
+ final_text += moz_template % ",".join(stops)
+ final_text += webkit_template % ",".join(wk_stops)
+
+ with open(file_name, "wt") as file_:
+ file_.write(format_text(final_text))
+
+register(
+ "gradient-save-as-css",
+ "Creates a new palette from a given gradient",
+ "palette_from_gradient (gradient, number, segment_colors) -> None",
+ "Joao S. O. Bueno",
+ "(c) GPL V3.0 or later",
+ "2011",
+ "Save as CSS...",
+ "",
+ [
+ (PF_GRADIENT, "gradient", N_("Gradient to use"),""),
+ (PF_FILENAME, "file_name", N_("File Name"), ""),
+ ],
+ [],
+ gradient_css_save,
+ menu="<Gradients>",
+ domain=("gimp20-python", gimp.locale_directory)
+ )
+main() \ No newline at end of file