Home
Phabricator
Search
Log In
Files
F16067950
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, May 4, 12:10 AM
Size
42 KB
Mime Type
text/x-python
Expires
Mon, May 6, 12:10 AM (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
8946578
Attached To
R98 Breeze for Gtk
View Options
diff --git a/Breeze-dark-gtk/assets/scrollbar-slider-horizontal-hover.png b/Breeze-dark-gtk/assets/scrollbar-slider-horizontal-hover.png
index 7c4efa7..9518d71 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-slider-horizontal-hover.png and b/Breeze-dark-gtk/assets/scrollbar-slider-horizontal-hover.png differ
diff --git a/Breeze-dark-gtk/assets/scrollbar-slider-horizontal-hover@2.png b/Breeze-dark-gtk/assets/scrollbar-slider-horizontal-hover@2.png
index 7a71e2c..cb735d6 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-slider-horizontal-hover@2.png and b/Breeze-dark-gtk/assets/scrollbar-slider-horizontal-hover@2.png differ
diff --git a/Breeze-dark-gtk/assets/scrollbar-slider-horizontal.png b/Breeze-dark-gtk/assets/scrollbar-slider-horizontal.png
index f6eba72..9518d71 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-slider-horizontal.png and b/Breeze-dark-gtk/assets/scrollbar-slider-horizontal.png differ
diff --git a/Breeze-dark-gtk/assets/scrollbar-slider-horizontal@2.png b/Breeze-dark-gtk/assets/scrollbar-slider-horizontal@2.png
index 0f70e4d..cb735d6 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-slider-horizontal@2.png and b/Breeze-dark-gtk/assets/scrollbar-slider-horizontal@2.png differ
diff --git a/Breeze-dark-gtk/assets/scrollbar-slider-vertical-hover.png b/Breeze-dark-gtk/assets/scrollbar-slider-vertical-hover.png
index 644f19b..ac9d768 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-slider-vertical-hover.png and b/Breeze-dark-gtk/assets/scrollbar-slider-vertical-hover.png differ
diff --git a/Breeze-dark-gtk/assets/scrollbar-slider-vertical-hover@2.png b/Breeze-dark-gtk/assets/scrollbar-slider-vertical-hover@2.png
index 68ee30f..37dcff9 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-slider-vertical-hover@2.png and b/Breeze-dark-gtk/assets/scrollbar-slider-vertical-hover@2.png differ
diff --git a/Breeze-dark-gtk/assets/scrollbar-slider-vertical.png b/Breeze-dark-gtk/assets/scrollbar-slider-vertical.png
index 9a0e607..ac9d768 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-slider-vertical.png and b/Breeze-dark-gtk/assets/scrollbar-slider-vertical.png differ
diff --git a/Breeze-dark-gtk/assets/scrollbar-slider-vertical@2.png b/Breeze-dark-gtk/assets/scrollbar-slider-vertical@2.png
index 7a71675..37dcff9 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-slider-vertical@2.png and b/Breeze-dark-gtk/assets/scrollbar-slider-vertical@2.png differ
diff --git a/Breeze-dark-gtk/assets/scrollbar-trough-horizontal.png b/Breeze-dark-gtk/assets/scrollbar-trough-horizontal.png
index 9660895..ceb5613 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-trough-horizontal.png and b/Breeze-dark-gtk/assets/scrollbar-trough-horizontal.png differ
diff --git a/Breeze-dark-gtk/assets/scrollbar-trough-horizontal@2.png b/Breeze-dark-gtk/assets/scrollbar-trough-horizontal@2.png
index d323b79..f9fed4a 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-trough-horizontal@2.png and b/Breeze-dark-gtk/assets/scrollbar-trough-horizontal@2.png differ
diff --git a/Breeze-dark-gtk/assets/scrollbar-trough-vertical.png b/Breeze-dark-gtk/assets/scrollbar-trough-vertical.png
index 51c4384..c177839 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-trough-vertical.png and b/Breeze-dark-gtk/assets/scrollbar-trough-vertical.png differ
diff --git a/Breeze-dark-gtk/assets/scrollbar-trough-vertical@2.png b/Breeze-dark-gtk/assets/scrollbar-trough-vertical@2.png
index 256a200..2aa4c4c 100644
Binary files a/Breeze-dark-gtk/assets/scrollbar-trough-vertical@2.png and b/Breeze-dark-gtk/assets/scrollbar-trough-vertical@2.png differ
diff --git a/Breeze-gtk/assets/scrollbar-slider-horizontal-hover.png b/Breeze-gtk/assets/scrollbar-slider-horizontal-hover.png
index 13916c3..eb9eda7 100644
Binary files a/Breeze-gtk/assets/scrollbar-slider-horizontal-hover.png and b/Breeze-gtk/assets/scrollbar-slider-horizontal-hover.png differ
diff --git a/Breeze-gtk/assets/scrollbar-slider-horizontal-hover@2.png b/Breeze-gtk/assets/scrollbar-slider-horizontal-hover@2.png
index fcd24f6..9967eba 100644
Binary files a/Breeze-gtk/assets/scrollbar-slider-horizontal-hover@2.png and b/Breeze-gtk/assets/scrollbar-slider-horizontal-hover@2.png differ
diff --git a/Breeze-gtk/assets/scrollbar-slider-horizontal.png b/Breeze-gtk/assets/scrollbar-slider-horizontal.png
index d32c4aa..9518d71 100644
Binary files a/Breeze-gtk/assets/scrollbar-slider-horizontal.png and b/Breeze-gtk/assets/scrollbar-slider-horizontal.png differ
diff --git a/Breeze-gtk/assets/scrollbar-slider-horizontal@2.png b/Breeze-gtk/assets/scrollbar-slider-horizontal@2.png
index 1c73bdd..cb735d6 100644
Binary files a/Breeze-gtk/assets/scrollbar-slider-horizontal@2.png and b/Breeze-gtk/assets/scrollbar-slider-horizontal@2.png differ
diff --git a/Breeze-gtk/assets/scrollbar-slider-vertical-hover.png b/Breeze-gtk/assets/scrollbar-slider-vertical-hover.png
index a7daf10..23c6c30 100644
Binary files a/Breeze-gtk/assets/scrollbar-slider-vertical-hover.png and b/Breeze-gtk/assets/scrollbar-slider-vertical-hover.png differ
diff --git a/Breeze-gtk/assets/scrollbar-slider-vertical-hover@2.png b/Breeze-gtk/assets/scrollbar-slider-vertical-hover@2.png
index 9417998..b695c7b 100644
Binary files a/Breeze-gtk/assets/scrollbar-slider-vertical-hover@2.png and b/Breeze-gtk/assets/scrollbar-slider-vertical-hover@2.png differ
diff --git a/Breeze-gtk/assets/scrollbar-slider-vertical.png b/Breeze-gtk/assets/scrollbar-slider-vertical.png
index 391b6c9..ac9d768 100644
Binary files a/Breeze-gtk/assets/scrollbar-slider-vertical.png and b/Breeze-gtk/assets/scrollbar-slider-vertical.png differ
diff --git a/Breeze-gtk/assets/scrollbar-slider-vertical@2.png b/Breeze-gtk/assets/scrollbar-slider-vertical@2.png
index 6df686b..37dcff9 100644
Binary files a/Breeze-gtk/assets/scrollbar-slider-vertical@2.png and b/Breeze-gtk/assets/scrollbar-slider-vertical@2.png differ
diff --git a/Breeze-gtk/assets/scrollbar-trough-horizontal.png b/Breeze-gtk/assets/scrollbar-trough-horizontal.png
index 9a720fb..b5a7494 100644
Binary files a/Breeze-gtk/assets/scrollbar-trough-horizontal.png and b/Breeze-gtk/assets/scrollbar-trough-horizontal.png differ
diff --git a/Breeze-gtk/assets/scrollbar-trough-horizontal@2.png b/Breeze-gtk/assets/scrollbar-trough-horizontal@2.png
index cede394..a9fe475 100644
Binary files a/Breeze-gtk/assets/scrollbar-trough-horizontal@2.png and b/Breeze-gtk/assets/scrollbar-trough-horizontal@2.png differ
diff --git a/Breeze-gtk/assets/scrollbar-trough-vertical.png b/Breeze-gtk/assets/scrollbar-trough-vertical.png
index 669cf13..c89315a 100644
Binary files a/Breeze-gtk/assets/scrollbar-trough-vertical.png and b/Breeze-gtk/assets/scrollbar-trough-vertical.png differ
diff --git a/Breeze-gtk/assets/scrollbar-trough-vertical@2.png b/Breeze-gtk/assets/scrollbar-trough-vertical@2.png
index c827b26..3930e06 100644
Binary files a/Breeze-gtk/assets/scrollbar-trough-vertical@2.png and b/Breeze-gtk/assets/scrollbar-trough-vertical@2.png differ
diff --git a/generate_theme.py b/generate_theme.py
index 420fd10..4a70a1f 100755
--- a/generate_theme.py
+++ b/generate_theme.py
@@ -1,744 +1,757 @@
# Usage:
#
# By default, this script will create assets based on the user's local color configuration
# When authoring the theme, you will want to render the assets with command line arguments to avoid this behavior
# Without quotes, 'light' will generate the Breeze assets while 'dark' will generate Breeze-Dark assets
#
# Example: python2 generate_theme.py light
import cairo
import colorsys
from math import pi
import os
import errno
import sys
import ast
def make_sure_path_exists(path):
try:
os.makedirs(path)
except OSError as exception:
if exception.errno != errno.EEXIST:
raise
class ReadKdeGlobals():
def __init__(self):
self._colors = {}
self._colors = self.read_globals(os.path.expanduser('~/.kde4/share/config/kdeglobals'))
def read_globals(self,filename):
with open(filename, 'r') as _kde:
for widget in ['Disabled', 'Inactive','Button', 'Selection', 'Tooltip', 'View', 'Window', 'WM']:
for line in _kde:
if line.strip().split(':')[-1].strip('[]') == widget:
break
for line in _kde:
if line == '\n':
break
self._colors['{0}{1}'.format(widget,line.strip().split('=')[0])] = line.strip().split('=')[1]
return self._colors
class Color(object):
def __init__(self, colordict,name,name2=None,amount=0):
color = colordict[name]
self.colordict = colordict
r = float(color.split(',')[0])
g = float(color.split(',')[1])
b = float(color.split(',')[2])
if not name2 == None:
color2 = colordict[name2]
r = r * amount + float(color2.split(',')[0]) * (1 - amount)
g = g * amount + float(color2.split(',')[1]) * (1 - amount)
b = b * amount + float(color2.split(',')[2]) * (1 - amount)
self.rgb255 = (r,g,b)
self.rgb = (r/255,g/255,b/255)
self.html = '#%02x%02x%02x' % self.rgb255
self.insensitive = self._color_effect(self._intensity_effect(self.rgb,'Disabled'),'Disabled')
self.insensitive_alpha = self._contrast_effect(self.rgb,'Disabled')
if self.colordict['InactiveEnable'] == 'false':
self.inactive = self.rgb
self.inactive_alpha = 1.0
else:
self.inactive = self._color_effect(self._intensity_effect(self.rgb,'Inactive'),'Inactive')
self.inactive_alpha = self._contrast_effect(self.rgb,'Inactive')
self.inactive_insensitive = self._color_effect(self._intensity_effect(self.inactive,'Disabled'),'Disabled')
self.inactive_insensitive_alpha = max(self.inactive_alpha - (1 - self.insensitive_alpha),0)
def _mix(self,color, mix_color, amount):
r = color[0] * amount + mix_color[0] * (1 - amount)
g = color[1] * amount + mix_color[1] * (1 - amount)
b = color[2] * amount + mix_color[2] * (1 - amount)
return (r,g,b)
def _lighter(self,color,amount):
h,s,v = colorsys.rgb_to_hsv(color[0],color[1],color[2])
v = min((1+amount)*v,1)
r,g,b = colorsys.hsv_to_rgb(h,s,v)
return (r,g,b)
def _darker(self,color,amount):
h,s,v = colorsys.rgb_to_hsv(color[0],color[1],color[2])
if amount == -1:
v = 1
else:
v = min(v/(1+amount),1)
r,g,b = colorsys.hsv_to_rgb(h,s,v)
return (r,g,b)
def _desaturate(self,color,amount):
h,s,v = colorsys.rgb_to_hsv(color[0],color[1],color[2])
s = min(s * (1 - amount),1)
r,g,b = colorsys.hsv_to_rgb(h,s,v)
return (r,g,b)
def _intensity_effect(self,color,state):
effect = int(self.colordict[state + 'IntensityEffect'])
amount = float(self.colordict[state + 'IntensityAmount'])
if effect == 0:
(r,g,b) = color
elif effect == 1:
if amount >= 0:
(r,g,b) = self._mix((1.0,1.0,1.0),color,amount)
else:
(r,g,b) = self._mix((0.0,0.0,0.0),color,amount)
elif effect == 2:
(r,g,b) = self._darker(color,amount)
elif effect == 3:
(r,g,b) = self._lighter(color,amount)
return (r,g,b)
def _color_effect(self,color,state):
effect = int(self.colordict[state + 'ColorEffect'])
amount = float(self.colordict[state + 'ColorAmount'])
effect_color = self.colordict[state + 'Color']
effect_color = (float(effect_color.split(',')[0])/255,float(effect_color.split(',')[1])/255,float(effect_color.split(',')[2])/255)
if effect == 0:
(r,g,b) = color
elif effect == 1:
(r,g,b) = self._desaturate(color,amount)
else:
(r,g,b) = self._mix(effect_color,color,amount)
return (r,g,b)
def _contrast_effect(self,color,state):
effect = int(self.colordict[state + 'ContrastEffect'])
amount = float(self.colordict[state + 'ContrastAmount'])
if effect == 0:
return 1.0
else:
return 1.0 - amount
def lighten_color(self,amount):
h,s,v = colorsys.rgb_to_hsv(self.rgb[0], self.rgb[1], self.rgb[2])
v = (1+amount)*v
r,g,b = colorsys.hsv_to_rgb(h,s,v)
self.rgb = (r,g,b)
self.rgb255 = (r*255,g*255,b*255)
def gradient(self,state='',alpha=1.0):
if state == 'active':
stop1 = self._lighter(self.rgb,0.03)
stop2 = self._darker(self.rgb,0.10)
linear = cairo.LinearGradient(1, 1, 1, 19)
linear.add_color_stop_rgba(0.0,stop1[0],stop1[1],stop1[2],alpha)
linear.add_color_stop_rgba(1.0,stop2[0],stop2[1],stop2[2],alpha)
else:
stop1 = self._lighter(self.rgb,0.01)
stop2 = self._darker(self.rgb,0.03)
linear = cairo.LinearGradient(1, 1, 1, 19)
linear.add_color_stop_rgba(0.0,stop1[0],stop1[1],stop1[2],alpha)
linear.add_color_stop_rgba(1.0,stop2[0],stop2[1],stop2[2],alpha)
return linear
class Assets(object):
def __init__(self,width,height,scl=1, rotation=0, filename='png'):
self.w = width; self.h = height
if filename == 'png':
self.surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, scl*width, scl*height)
else:
self.surface = cairo.SVGSurface('assets/' + filename, scl*width, scl*height)
cr = self.cr = cairo.Context(self.surface)
if rotation != 0:
cr.translate(scl*width/2,scl*height/2)
cr.rotate(rotation*pi/2)
cr.translate(-scl*width/2,-scl*height/2)
cr.scale(scl,scl)
def background(self,color):
self.cr.rectangle(0,0,self.w,self.h)
self.cr.set_source_rgb(color[0],color[1],color[2])
self.cr.fill()
def line(self,color,x,y,width,height):
self.cr.rectangle(x,y,width,height)
self.cr.set_source_rgb(color[0],color[1],color[2])
self.cr.fill()
def rounded_rectancle(self, color, width, height, x, y, radius, alpha=1.0, gradient=False):
self.cr.new_sub_path()
self.cr.arc(x + width - radius, y + radius, radius, -pi/2, 0)
self.cr.arc(x + width - radius, y + height - radius, radius, 0, pi/2)
self.cr.arc(x + radius, y + height - radius, radius, pi/2, pi)
self.cr.arc(x + radius, y + radius, radius, pi, 3*pi/2)
self.cr.close_path()
if gradient:
self.cr.set_source(color)
elif color == None:
self.cr.set_operator(cairo.OPERATOR_CLEAR)
elif color == 'shadow':
self.cr.set_source_rgba(0.0,0.0,0.0, 0.15)
else:
self.cr.set_source_rgba(color[0],color[1],color[2], alpha)
self.cr.fill()
def rounded_triangle(self, color, width, height, x, y, radius, alpha=1.0):
self.cr.new_sub_path()
self.cr.move_to(x + width, y)
self.cr.line_to(x + width, y + height - radius)
self.cr.arc(x + width - radius, y + height - radius,radius, 0, pi/2)
self.cr.line_to(x, y + height)
self.cr.close_path()
self.cr.set_source_rgba(color[0],color[1],color[2], alpha)
self.cr.fill()
def circle(self, color, x, y, radius, alpha=1.0, gradient=False):
self.cr.new_sub_path()
self.cr.arc(x, y, radius, 0, 2*pi)
self.cr.close_path()
if gradient:
self.cr.set_source(color)
elif color == None:
self.cr.set_operator(cairo.OPERATOR_CLEAR)
elif color == 'shadow':
self.cr.set_source_rgba(0.0,0.0,0.0, 0.15)
else:
self.cr.set_source_rgba(color[0],color[1],color[2], alpha)
self.cr.fill()
def half_circle(self, color, x, y, radius, alpha=1.0):
self.cr.new_sub_path()
self.cr.arc(x, y, radius, -pi/4, 3*pi/4)
self.cr.close_path()
self.cr.set_source_rgba(color[0],color[1],color[2],alpha)
self.cr.fill()
def arrow(self, color, alpha=1.0, shiftx=0, shifty=0):
self.cr.new_sub_path()
self.cr.move_to(shiftx + 1,shifty + 8)
self.cr.line_to(shiftx + 6,shifty + 3)
self.cr.line_to(shiftx + 11,shifty + 8)
self.cr.set_source_rgba(color[0],color[1],color[2],alpha)
self.cr.set_line_width(1.0)
self.cr.stroke()
def arrow_small(self, color,alpha=1.0):
self.cr.new_sub_path()
self.cr.move_to(1,6)
self.cr.line_to(4,3)
self.cr.line_to(7,6)
self.cr.set_source_rgba(color[0],color[1],color[2], alpha)
self.cr.set_line_width(1.0)
self.cr.stroke()
def tab(self, color, width, height, x, y, radius, alpha=1.0):
self.cr.move_to(width + x, y)
self.cr.line_to(width + x, height - radius + y)
self.cr.arc(width - radius + x, height - radius + y, radius, 0, pi/2)
self.cr.line_to(radius + x, height + y)
self.cr.arc(radius + x,height - radius + y,radius,pi/2,pi)
self.cr.line_to(x,y)
self.cr.close_path
if color == None:
self.cr.set_operator(cairo.OPERATOR_CLEAR)
else:
self.cr.set_source_rgba(color[0],color[1],color[2], alpha)
self.cr.fill()
def spinbutton(self, color, width, height, x, y, radius,alpha=1.0):
self.cr.move_to(width + x, y)
self.cr.line_to(width + x, height - radius + y)
self.cr.arc(width - radius + x, height - radius + y, radius, 0, pi/2)
self.cr.line_to(x, height + y)
self.cr.line_to(x,y)
self.cr.close_path()
if color == None:
self.cr.set_operator(cairo.OPERATOR_CLEAR)
else:
self.cr.set_source_rgba(color[0],color[1],color[2],alpha)
self.cr.fill()
def notebook(self, color, width, height, x, y, radius):
self.cr.move_to(x, y)
self.cr.line_to(x + width - radius, y)
self.cr.arc(x + width - radius, y + radius, radius, -pi/2, 0)
self.cr.line_to(x + width, y + height-radius)
self.cr.arc(x + width - radius, y + height - radius, radius, 0, pi/2)
self.cr.line_to(x + radius,y + height)
self.cr.arc(x + radius, y + height -radius, radius, pi/2, pi)
self.cr.close_path()
self.cr.set_source_rgb(color[0],color[1],color[2])
self.cr.fill()
def minimize(self,color=None):
self.cr.move_to(4,7)
self.cr.line_to(9,12)
self.cr.line_to(14,7)
if color == None:
self.cr.set_operator(cairo.OPERATOR_CLEAR)
else:
self.cr.set_source_rgb(color[0],color[1],color[2])
self.cr.set_line_width(1.0)
self.cr.stroke()
def maximize(self,color=None):
self.cr.move_to(4,11)
self.cr.line_to(9,6)
self.cr.line_to(14,11)
if color == None:
self.cr.set_operator(cairo.OPERATOR_CLEAR)
else:
self.cr.set_source_rgb(color[0],color[1],color[2])
self.cr.set_line_width(1.0)
self.cr.stroke()
def maximize_maximized(self,color=None):
self.cr.move_to(4.5,9)
self.cr.line_to(9,4.5)
self.cr.line_to(13.5,9)
self.cr.line_to(9,13.5)
self.cr.close_path()
if color == None:
self.cr.set_operator(cairo.OPERATOR_CLEAR)
else:
self.cr.set_source_rgb(color[0],color[1],color[2])
self.cr.set_line_width(1.0)
self.cr.stroke()
def close(self,color=None):
self.cr.move_to(5,5)
self.cr.line_to(13,13)
self.cr.move_to(13,5)
self.cr.line_to(5,13)
if color == None:
self.cr.set_operator(cairo.OPERATOR_CLEAR)
else:
self.cr.set_source_rgb(color[0],color[1],color[2])
self.cr.set_line_width(1.0)
self.cr.stroke()
def save(self, filename):
self.surface.write_to_png('assets/' + filename)
def check_items(color1,color2,state,alpha=1.0):
for scl in [1,2]:
if scl == 2:
ending = '@2.png'
else:
ending = '.png'
# checkboxes
box = Assets(20,20,scl)
box.rounded_rectancle('shadow',18,18,2,2,3)
box.rounded_rectancle(color2,18,18,1,1,3)
box.rounded_rectancle(color1,18,18,1,1,3,alpha=alpha)
box.rounded_rectancle(color2,16,16,2,2,2)
box.save('check-unchecked' + state + ending)
if state != '':
box.rounded_rectancle(color1,12,12,4,4,1,alpha=alpha)
box.save('check-checked' + state + ending)
box.rounded_triangle(color2,8,8,6,6,1,alpha=alpha)
box.save('check-mixed' + state + ending)
# radio
radio = Assets(20,20,scl)
radio.circle('shadow',11,11,9)
radio.circle(color2,10,10,9)
radio.circle(color1,10,10,9,alpha=alpha)
radio.circle(color2,10,10,8)
radio.save('radio-unchecked' + state + ending)
if state != '':
radio.circle(color1,10,10,6,alpha=alpha)
radio.save('radio-checked' + state + ending)
radio.half_circle(color2,10,10,4,alpha=alpha)
radio.save('radio-mixed' + state + ending)
# selectionmode
selectionmode = Assets(40,40,scl)
selectionmode.rounded_rectancle('shadow',18,18,12,12,3)
selectionmode.rounded_rectancle(color2,18,18,11,11,3)
selectionmode.rounded_rectancle(color1,18,18,11,11,3,alpha=alpha)
selectionmode.rounded_rectancle(color2,16,16,12,12,2)
selectionmode.save('check-selectionmode-unchecked' + state + ending)
if state != '':
selectionmode.rounded_rectancle(color1,12,12,14,14,1,alpha=alpha)
selectionmode.save('check-selectionmode-checked' + state + ending)
def buttons(color1,color2,color3,state,alpha=1.0):
button = Assets(20,20)
button.rounded_rectancle('shadow',18,18,2,2,3)
button.rounded_rectancle(color1,18,18,1,1,3)
button.rounded_rectancle(color2,18,18,1,1,3,alpha=alpha)
if state == '-active':
button.rounded_rectancle(color3,18,18,1,1,3, gradient=True)
else:
button.rounded_rectancle(color1,16,16,2,2,2)
button.rounded_rectancle(color3,16,16,2,2,2, gradient=True)
button.save('button' + state + '.png')
def togglebuttons(color1,color2,color3,state,alpha=1.0):
button = Assets(20,20)
button.rounded_rectancle(color1,18,18,1,1,3)
button.rounded_rectancle(color2,18,18,1,1,3,alpha=alpha)
if state == '-active':
button.rounded_rectancle(color3,18,18,1,1,3, gradient=True)
else:
button.rounded_rectancle(color1,16,16,2,2,2)
button.rounded_rectancle(color3,16,16,2,2,2, gradient=True)
button.save('togglebutton' + state + '.png')
def scale_slider(color1,color2,color3,state,alpha=1.0):
scale = Assets(20,20)
scale.circle(color1,10,10,10)
scale.circle(color2,10,10,10,alpha=alpha)
scale.circle(color1,10,10,9)
scale.circle(color3,10,10,9,gradient=True)
scale.save('scale-slider' + state + '.png')
def scale_trough(color):
trough_h = Assets(20,20)
trough_h.rounded_rectancle(color,20,6,0,7,3)
trough_h.save('scale-trough-horizontal.png')
trough_h = Assets(20,20)
trough_h.rounded_rectancle(color,6,20,7,0,3)
trough_h.save('scale-trough-vertical.png')
def tabs(color1,color2,state):
if state == '-inactive':
alpha = 0.2
else:
alpha = 1.0
direction = ['-bottom','-left','-top','-right']
for i in range(0,4):
tab = Assets(20,20,rotation=i)
tab.tab(color1,20,20,0,0,3,alpha)
if state == '-active':
tab.tab(color2,18,19,1,0,2)
tab.save('tab' + direction[i] + state + '.png')
def arrows(color,state,alpha=1.0):
direction = ['-up','-right','-down','-left']
for i in range(0,4):
arw = Assets(12,12,rotation=i)
arw.arrow(color,alpha)
arw.save('arrow' + direction[i] + state + '.png')
arw = Assets(8,8,rotation=i)
arw.arrow_small(color,alpha)
arw.save('arrow-small' + direction[i] + state + '.png')
def menu_arrow(color,state,alpha=1.0):
arrow = Assets(12,12,rotation=1)
arrow.arrow(color,alpha)
arrow.save('menu-arrow' + state + '.png')
-def scrollbar_slider(color,state,alpha=1):
+def scrollbar_slider(color1,color2,color3):
for scl in [1,2]:
if scl == 2:
ending = '@2.png'
else:
ending = '.png'
slider = Assets(30,20,scl)
- slider.rounded_rectancle(color,30,10,0,5,5,alpha)
- slider.save('scrollbar-slider-horizontal' + state + ending)
+ slider.rounded_rectancle(color1,30,10,0,5,5,1)
+ slider.save('scrollbar-slider-horizontal-active' + ending)
+
+ slider = Assets(30,20,scl)
+ slider.rounded_rectancle(color2,30,6,0,7,3,1)
+ slider.save('scrollbar-slider-horizontal-hover' + ending)
+
+ slider = Assets(30,20,scl)
+ slider.rounded_rectancle(color3,30,6,0,7,3,1)
+ slider.save('scrollbar-slider-horizontal' + ending)
slider = Assets(20,30,scl)
- slider.rounded_rectancle(color,10,30,5,0,5,alpha)
- slider.save('scrollbar-slider-vertical' + state + ending)
+ slider.rounded_rectancle(color1,10,30,5,0,5,1)
+ slider.save('scrollbar-slider-vertical-active' + ending)
+
+ slider = Assets(20,30,scl)
+ slider.rounded_rectancle(color2,6,30,7,0,3,1)
+ slider.save('scrollbar-slider-vertical-hover' + ending)
+
+ slider = Assets(20,30,scl)
+ slider.rounded_rectancle(color3,6,30,7,0,3,1)
+ slider.save('scrollbar-slider-vertical' + ending)
def scrollbar_trough(color):
for scl in [1,2]:
if scl == 2:
ending = '@2.png'
else:
ending = '.png'
trough = Assets(56,20,scl)
- trough.rounded_rectancle(color,26,10,15,5,5,0.3)
+ trough.rounded_rectancle(color,49,6,3.5,7,3,0.3)
trough.save('scrollbar-trough-horizontal' + ending)
trough = Assets(20,56,scl)
- trough.rounded_rectancle(color,10,26,5,15,5,0.3)
+ trough.rounded_rectancle(color,6,49,7,3.5,3,0.3)
trough.save('scrollbar-trough-vertical' + ending)
def titlebuttons(color1,color2,state):
for scl in [1,2]:
if scl == 2:
ending = '@2.png'
else:
ending = '.png'
title_minimize = Assets(18,18,scl)
title_maximize = Assets(18,18,scl)
title_maximized = Assets(18,18,scl)
if state == '' or state == '-backdrop':
title_minimize.minimize(color1)
title_maximize.maximize(color1)
title_maximized.maximize_maximized(color1)
else:
title_minimize.circle(color1,9,9,9)
title_maximize.circle(color1,9,9,9)
title_maximized.circle(color1,9,9,9)
title_minimize.minimize()
title_maximize.maximize()
title_maximized.maximize_maximized()
title_minimize.save('titlebutton-minimize' + state + ending)
title_maximize.save('titlebutton-maximize' + state + ending)
title_maximized.save('titlebutton-maximize-maximized' + state + ending)
title_close = Assets(18,18,scl)
title_close.circle(color2,9,9,9)
title_close.close()
title_close.save('titlebutton-close' + state + ending)
def entry(color1,color2,color3,state,alpha=1.0):
entry = Assets(20,20)
entry.background(color1)
entry.rounded_rectancle(color2,18,18,1,1,3,alpha=alpha)
entry.rounded_rectancle(color3,16,16,2,2,2)
entry.rounded_rectancle(color3,16,16,2,2,2)
entry.save('entry' + state + '.png')
entry = Assets(20,20,rotation=1)
entry.background(color1)
entry.tab(color2,18,19,1,0,3,alpha=alpha)
entry.tab(color3,16,18,2,0,2)
entry.save('combo-entry' + state + '.png')
entry_button = Assets(20,20,rotation=3)
entry_button.background(color1)
entry_button.tab(color2,18,19,1,0,3,alpha=alpha)
entry_button.tab(color3,16,18,2,0,2)
entry_button.save('combo-entry-button' + state + '.png')
if state != '-active':
direction = ['-down','-down-rtl','-up-rtl','-up']
for i in range(0,4):
spin = Assets(20,20,rotation=i)
spin.background(color1)
spin.spinbutton(color2,19,19,0,0,3,alpha=alpha)
spin.spinbutton(color3,18,18,0,0,2)
spin.save('spinbutton' + direction[i] + state + '.png')
def mixed(color1, color2,color3):
nll = Assets(20,20)
nll.save('null.png')
# Frame
frame = Assets(20,20)
frame.rounded_rectancle(color1,20,20,0,0,3)
frame.rounded_rectancle(color2,18,18,1,1,2)
frame.save('frame.png')
# Tree header
header = Assets(20,20)
header.background(color2)
header.line(color1,0,19,20,1)
header.line(color1,19,0,1,20)
header.save('tree-header.png')
# Notebook gap
notebook_gap = Assets(4,2)
notebook_gap.line(color2,1,0,2,2)
notebook_gap.save('notebook-gap-horizontal.png')
notebook_gap = Assets(2,4)
notebook_gap.line(color2,0,1,2,2)
notebook_gap.save('notebook-gap-vertical.png')
# Notebook frame
direction = ['-top','-right','-bottom','-bottom']
for i in range(0,4):
notebook_frame = Assets(20,20,rotation=i)
notebook_frame.notebook(color1,20,20,0,0,3)
notebook_frame.notebook(color2,18,18,1,1,2)
notebook_frame.save('notebook-frame' + direction[i] + '.png')
# Frame gap
frame_gap = Assets(2,1)
frame_gap.line(color1,1,0,1,1)
frame_gap.save('frame-gap-start.png')
frame_gap = Assets(2,1)
frame_gap.line(color1,0,0,1,1)
frame_gap.save('frame-gap-end.png')
# Lines
lines = Assets(20,1)
lines.line(color1,0,0,20,1)
lines.save('line-h.png')
lines = Assets(1,20)
lines.line(color1,0,0,1,20)
lines.save('line-v.png')
lines = Assets(20,1)
lines.line(color2,0,0,20,1)
lines.save('handle-h.png')
lines = Assets(1,20)
lines.line(color2,0,0,1,20)
lines.save('handle-v.png')
menubar = Assets(20,20)
menubar.line(color3,1,1,18,18)
menubar.save('menubar-button.png')
def toolbar(color1, color2, color3):
# Toolbar background
bar = Assets(20,20)
bar.background(color2)
bar.save('toolbar-background.png')
# Toolbutton toggled
toolbutton = Assets(20,20)
toolbutton.rounded_rectancle(color1,18,18,1,1,3)
toolbutton.save('toolbutton-toggled.png')
# Toolbutton hover
toolbutton = Assets(20,20)
toolbutton.rounded_rectancle(color3,18,18,1,1,3)
toolbutton.rounded_rectancle(color2,16,16,2,2,2)
toolbutton.save('toolbutton-hover.png')
# Toolbutton active
toolbutton = Assets(20,20)
toolbutton.rounded_rectancle(color3,18,18,1,1,3)
toolbutton.save('toolbutton-active.png')
def progressbar(color1, color2, state=''):
bar = Assets(10,10)
bar.rounded_rectancle(color1,10,10,0,0,3)
bar.save('progressbar-bar' + state + '.png')
trough = Assets(10,10)
trough.rounded_rectancle(color2,10,10,0,0,3)
trough.save('progressbar-trough' + state + '.png')
def html(color):
return '#%02x%02x%02x' % (color[0]*255,color[1]*255,color[2]*255)
def mix(color, mix_color, amount):
r = color[0] * amount + mix_color[0] * (1 - amount)
g = color[1] * amount + mix_color[1] * (1 - amount)
b = color[2] * amount + mix_color[2] * (1 - amount)
return (r,g,b)
#___________________________________________________________________________________
breeze_light = ast.literal_eval("{'ViewForegroundInactive': '127,140,141', 'ViewForegroundNormal': '49,54,59', 'WindowBackgroundAlternate': '189,195,199', 'TooltipForegroundNeutral': '246,116,0', 'WMinactiveForeground': '189,195,199', 'ButtonDecorationHover': '147,206,233', 'ButtonBackgroundAlternate': '189,195,199', 'TooltipForegroundNormal': '239,240,241', 'TooltipForegroundNegative': '218,68,83', 'InactiveContrastAmount': '0.1', 'DisabledIntensityAmount': '0.1', 'DisabledContrastAmount': '0.65', 'ViewBackgroundNormal': '252,252,252', 'ButtonForegroundLink': '41,128,185', 'WindowForegroundInactive': '127,140,141', 'TooltipDecorationHover': '147,206,233', 'TooltipBackgroundAlternate': '77,77,77', 'InactiveColorEffect': '2', 'SelectionDecorationHover': '147,206,233', 'SelectionForegroundPositive': '39,174,96', 'WindowForegroundVisited': '127,140,141', 'TooltipBackgroundNormal': '49,54,59', 'ButtonForegroundNegative': '218,68,83', 'SelectionForegroundVisited': '189,195,199', 'DisabledColor': '56,56,56', 'TooltipForegroundLink': '41,128,185', 'WindowForegroundNormal': '49,54,59', 'SelectionForegroundActive': '252,252,252', 'TooltipForegroundVisited': '127,140,141', 'WindowDecorationFocus': '61,174,233', 'ViewForegroundActive': '61,174,233', 'DisabledIntensityEffect': '2', 'ViewDecorationFocus': '61,174,233', 'WMactiveBlend': '255,255,255', 'DisabledColorAmount': '0', 'DisabledContrastEffect': '1', 'SelectionForegroundInactive': '239,240,241', 'WindowForegroundNeutral': '246,116,0', 'ViewForegroundVisited': '127,140,141', 'InactiveEnable': 'false', 'WindowDecorationHover': '147,206,233', 'WindowForegroundActive': '61,174,233', 'WMactiveBackground': '71,80,87', 'ButtonBackgroundNormal': '239,240,241', 'InactiveChangeSelectionColor': 'true', 'SelectionForegroundNegative': '218,68,83', 'WindowForegroundNegative': '218,68,83', 'WindowForegroundLink': '41,128,185', 'ButtonForegroundNormal': '49,54,59', 'InactiveColor': '112,111,110', 'ViewForegroundPositive': '39,174,96', 'WMactiveForeground': '239,240,241', 'WindowForegroundPositive': '39,174,96', 'InactiveContrastEffect': '2', 'WMinactiveBackground': '239,240,241', 'InactiveColorAmount': '0.025', 'ViewBackgroundAlternate': '239,240,241', 'SelectionBackgroundNormal': '61,174,233', 'ViewForegroundNegative': '218,68,83', 'ButtonForegroundInactive': '127,140,141', 'SelectionDecorationFocus': '61,174,233', 'SelectionForegroundLink': '253,188,75', 'ButtonForegroundActive': '61,174,233', 'TooltipForegroundInactive': '189,195,199', 'ButtonForegroundPositive': '39,174,96', 'ViewDecorationHover': '147,206,233', 'TooltipDecorationFocus': '61,174,233', 'WMinactiveBlend': '75,71,67', 'InactiveIntensityAmount': '0', 'TooltipForegroundPositive': '39,174,96', 'TooltipForegroundActive': '61,174,233', 'ViewForegroundNeutral': '246,116,0', 'DisabledColorEffect': '0', 'InactiveIntensityEffect': '0', 'SelectionForegroundNormal': '239,240,241', 'ViewForegroundLink': '41,128,185', 'ButtonDecorationFocus': '61,174,233', 'ButtonForegroundVisited': '127,140,141', 'SelectionForegroundNeutral': '246,116,0', 'WindowBackgroundNormal': '239,240,241', 'SelectionBackgroundAlternate': '29,153,243', 'ButtonForegroundNeutral': '246,116,0'}")
breeze_dark = ast.literal_eval("{'ViewForegroundInactive': '189,195,199', 'ViewForegroundNormal': '239,240,241', 'WindowBackgroundAlternate': '77,77,77', 'TooltipForegroundNeutral': '246,116,0', 'WMinactiveForeground': '127,140,141', 'ButtonDecorationHover': '61,174,233', 'ButtonBackgroundAlternate': '77,77,77', 'TooltipForegroundNormal': '239,240,241', 'TooltipForegroundNegative': '218,68,83', 'InactiveContrastAmount': '0.1', 'DisabledIntensityAmount': '0.1', 'DisabledContrastAmount': '0.65', 'ViewBackgroundNormal': '35,38,41', 'ButtonForegroundLink': '41,128,185', 'WindowForegroundInactive': '189,195,199', 'TooltipDecorationHover': '61,174,233', 'TooltipBackgroundAlternate': '77,77,77', 'InactiveColorEffect': '2', 'SelectionDecorationHover': '61,174,233', 'SelectionForegroundPositive': '39,174,96', 'WindowForegroundVisited': '127,140,141', 'TooltipBackgroundNormal': '49,54,59', 'ButtonForegroundNegative': '218,68,83', 'SelectionForegroundVisited': '189,195,199', 'DisabledColor': '56,56,56', 'TooltipForegroundLink': '41,128,185', 'WindowForegroundNormal': '239,240,241', 'SelectionForegroundActive': '252,252,252', 'TooltipForegroundVisited': '127,140,141', 'WindowDecorationFocus': '61,174,233', 'ViewForegroundActive': '61,174,233', 'DisabledIntensityEffect': '2', 'ViewDecorationFocus': '61,174,233', 'WMactiveBlend': '255,255,255', 'DisabledColorAmount': '0', 'DisabledContrastEffect': '1', 'SelectionForegroundInactive': '239,240,241', 'WindowForegroundNeutral': '246,116,0', 'ViewForegroundVisited': '127,140,141', 'InactiveEnable': 'false', 'WindowDecorationHover': '61,174,233', 'WindowForegroundActive': '61,174,233', 'WMactiveBackground': '49,54,59', 'ButtonBackgroundNormal': '49,54,59', 'InactiveChangeSelectionColor': 'true', 'SelectionForegroundNegative': '218,68,83', 'WindowForegroundNegative': '218,68,83', 'WindowForegroundLink': '41,128,185', 'ButtonForegroundNormal': '239,240,241', 'InactiveColor': '112,111,110', 'ViewForegroundPositive': '39,174,96', 'WMactiveForeground': '239,240,241', 'WindowForegroundPositive': '39,174,96', 'InactiveContrastEffect': '2', 'WMinactiveBackground': '49,54,59', 'InactiveColorAmount': '0.025', 'ViewBackgroundAlternate': '49,54,59', 'SelectionBackgroundNormal': '61,174,233', 'ViewForegroundNegative': '218,68,83', 'ButtonForegroundInactive': '189,195,199', 'SelectionDecorationFocus': '61,174,233', 'SelectionForegroundLink': '253,188,75', 'ButtonForegroundActive': '61,174,233', 'TooltipForegroundInactive': '189,195,199', 'ButtonForegroundPositive': '39,174,96', 'ViewDecorationHover': '61,174,233', 'TooltipDecorationFocus': '61,174,233', 'WMinactiveBlend': '75,71,67', 'InactiveIntensityAmount': '0', 'TooltipForegroundPositive': '39,174,96', 'TooltipForegroundActive': '61,174,233', 'ViewForegroundNeutral': '246,116,0', 'DisabledColorEffect': '0', 'InactiveIntensityEffect': '0', 'SelectionForegroundNormal': '239,240,241', 'ViewForegroundLink': '41,128,185', 'ButtonDecorationFocus': '61,174,233', 'ButtonForegroundVisited': '127,140,141', 'SelectionForegroundNeutral': '246,116,0', 'WindowBackgroundNormal': '49,54,59', 'SelectionBackgroundAlternate': '29,153,243', 'ButtonForegroundNeutral': '246,116,0'}")
#___________________________________________________________________________________
filename = os.path.expanduser('~/.kde4/share/config/kdeglobals')
make_sure_path_exists('assets')
def readargs():
if len(sys.argv) == 2:
if sys.argv[1] == 'light':
return breeze_light
elif sys.argv[1] == 'dark':
return breeze_dark
else:
return ReadKdeGlobals().read_globals(filename)
_colors = readargs()
border_color = Color(_colors,'WindowBackgroundNormal','WindowForegroundNormal', 0.75)
window_bg = Color(_colors,'WindowBackgroundNormal')
window_fg = Color(_colors,'WindowForegroundNormal')
check_color = Color(_colors,'WindowBackgroundNormal','WindowForegroundNormal',0.5)
button_bg = Color(_colors,'ButtonBackgroundNormal')
button_fg = Color(_colors,'ButtonForegroundNormal')
button_hover = Color(_colors,'ButtonDecorationHover')
button_active = Color(_colors,'ButtonDecorationFocus')
selection_bg = Color(_colors,'SelectionBackgroundNormal')
selection_fg = Color(_colors,'SelectionForegroundNormal')
view_bg = Color(_colors,'ViewBackgroundNormal')
view_fg = Color(_colors,'ViewForegroundNormal')
view_hover = Color(_colors,'ViewDecorationHover')
view_active = Color(_colors,'ViewDecorationFocus')
titlebutton = Color(_colors,'WMactiveForeground')
titlebutton_active = Color(_colors,'WMactiveBackground','WMactiveForeground',0.3)
closebutton_hover = Color(_colors,'ViewForegroundNegative');closebutton_hover.lighten_color(0.5)
closebutton_active = Color(_colors,'ViewForegroundNegative')
titlebutton_inactive = Color(_colors,'WMinactiveForeground')
titlebutton_inactive_active = Color(_colors,'WMinactiveBackground','WMinactiveForeground',0.3)
tooltip_fg = Color(_colors,'TooltipForegroundNormal')
tooltip_bg = Color(_colors,'TooltipBackgroundNormal')
check_items(check_color.rgb,window_bg.rgb,'')
check_items(button_hover.rgb,window_bg.rgb,'-hover')
check_items(button_active.rgb,window_bg.rgb,'-active')
check_items(check_color.insensitive,window_bg.rgb,'-insensitive',border_color.insensitive_alpha)
check_items(check_color.inactive,window_bg.rgb,'-backdrop',border_color.inactive_alpha)
check_items(check_color.inactive_insensitive,window_bg.rgb,'-backdrop-insensitive',border_color.inactive_insensitive_alpha)
buttons(window_bg.rgb,border_color.rgb,button_bg.gradient(),'')
buttons(window_bg.rgb,button_hover.rgb,button_bg.gradient(),'-hover')
buttons(window_bg.rgb,button_hover.rgb,button_hover.gradient('active'),'-active')
buttons(window_bg.rgb,border_color.rgb,button_bg.gradient(alpha=button_bg.insensitive_alpha),'-insensitive',border_color.insensitive_alpha)
togglebuttons(window_bg.rgb,border_color.rgb,button_bg.gradient(),'')
togglebuttons(window_bg.rgb,button_hover.rgb,button_bg.gradient(),'-hover')
togglebuttons(window_bg.rgb,button_hover.rgb,button_hover.gradient('active'),'-active')
togglebuttons(window_bg.rgb,border_color.rgb,button_bg.gradient(alpha=button_bg.insensitive_alpha),'-insensitive',border_color.insensitive_alpha)
scale_slider(window_bg.rgb,border_color.rgb,button_bg.gradient(),'')
scale_slider(window_bg.rgb,button_hover.rgb,button_bg.gradient(),'-hover')
scale_slider(window_bg.rgb,button_active.rgb,button_bg.gradient(),'-active')
scale_slider(window_bg.rgb,border_color.rgb,button_bg.gradient(alpha=button_bg.insensitive_alpha),'-insensitive',border_color.insensitive_alpha)
scale_trough(border_color.rgb)
tabs(border_color.rgb,window_bg.rgb,'-active')
tabs(window_fg.rgb,window_bg.rgb,'-inactive')
arrows(button_fg.rgb,'')
arrows(button_hover.rgb,'-hover')
arrows(button_active.rgb,'-active')
arrows(button_fg.insensitive,'-insensitive',button_fg.insensitive_alpha)
menu_arrow(window_fg.rgb,'')
menu_arrow(selection_fg.rgb,'-selected')
menu_arrow(window_fg.insensitive,'-insensitive',window_fg.insensitive_alpha)
-scrollbar_slider(window_fg.rgb,'',alpha=0.5)
-scrollbar_slider(button_hover.rgb,'-hover')
-scrollbar_slider(button_active.rgb,'-active')
-
+scrollbar_slider(button_active.rgb,button_hover.rgb,button_active.rgb)
scrollbar_trough(window_fg.rgb)
titlebuttons(titlebutton.rgb,titlebutton.rgb,'')
titlebuttons(titlebutton.rgb,closebutton_hover.rgb,'-hover')
titlebuttons(titlebutton_active.rgb,closebutton_active.rgb,'-active')
titlebuttons(titlebutton_inactive.rgb,titlebutton_inactive.rgb,'-backdrop')
titlebuttons(titlebutton_inactive.rgb,closebutton_hover.rgb,'-hover-backdrop')
titlebuttons(titlebutton_inactive_active.rgb,closebutton_active.rgb,'-active-backdrop')
entry(window_bg.rgb,border_color.rgb,view_bg.rgb,'')
entry(window_bg.rgb,view_active.rgb,view_bg.rgb,'-active')
entry(window_bg.rgb,border_color.insensitive,None,'-insensitive',border_color.insensitive_alpha)
progressbar(selection_bg.rgb,mix(window_fg.rgb,window_bg.rgb,0.3))
mixed(border_color.rgb,window_bg.rgb,button_active.rgb)
toolbar(border_color.rgb,window_bg.rgb,button_hover.rgb)
Log In to Comment