Spoolman support close #1060

Refactor post_requrest
Switching to TreeView
More spool info
redesign toggle buttons
Allow spoolman while printing
Styling checkbox as switch
render Toggle switch-like
Fixed wrong timezones
Filtering spools
Removed translations of Spoolman
Spool image can be overided in theme
Added switch-on/off symbols to toggle
rename iter to i to avoid shadowing built-in function
remove redundant parenthesis
convert spoolcompare to static
merge check and treeview shared props
reduce spacing of buttons very useful for vertical/portrait
fix issue with remainings
add spoolman shortcut to extrude
Using backports.zoneinfo for python < 3.9
use decorators for properties
extract format_date function
change top row
last used sort
rebase on upstream
Fix for never used spools


Co-authored-by: alfrix <alfredomonclus@gmail.com>
This commit is contained in:
Blonďák 2023-08-19 23:43:45 +02:00 committed by GitHub
parent 65c4b172e8
commit af1de12f28
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 1356 additions and 26 deletions

View File

@ -35,18 +35,19 @@ class KlippyRest:
def get_thumbnail_stream(self, thumbnail):
return self.send_request(f"server/files/gcodes/{thumbnail}", json=False)
def send_request(self, method, json=True):
def _do_request(self, method, request_method, data=None, json=None, json_response=True):
url = f"{self.endpoint}/{method}"
headers = {} if self.api_key is False else {"x-api-key": self.api_key}
data = False
response_data = False
try:
response = requests.get(url, headers=headers, timeout=3)
callee = getattr(requests, request_method)
response = callee(url, json=json, data=data, headers=headers, timeout=3)
response.raise_for_status()
if json:
if json_response:
logging.debug(f"Sending request to {url}")
data = response.json()
response_data = response.json()
else:
data = response.content
response_data = response.content
except requests.exceptions.HTTPError as h:
self.status = self.format_status(h)
except requests.exceptions.ConnectionError as c:
@ -59,11 +60,17 @@ class KlippyRest:
self.status = self.format_status(r)
except Exception as e:
self.status = self.format_status(e)
if data:
if response_data:
self.status = ''
else:
logging.error(self.status.replace('\n', '>>'))
return data
return response_data
def post_request(self, method, data=None, json=None, json_response=True):
return self._do_request(method, "post", data, json, json_response)
def send_request(self, method, json=True):
return self._do_request(method, "get", json_response=json)
@staticmethod
def format_status(status):

View File

@ -173,7 +173,7 @@ class KlipperScreenConfig:
strs = (
'moonraker_api_key', 'moonraker_host', 'titlebar_name_type',
'screw_positions', 'power_devices', 'titlebar_items', 'z_babystep_values',
'extrude_distances', "extrude_speeds",
'extrude_distances', "extrude_speeds", "camera_url", "spoolman",
)
numbers = (
'moonraker_port', 'move_speed_xy', 'move_speed_z',
@ -188,7 +188,9 @@ class KlipperScreenConfig:
# This section may be deprecated in favor of moving this options under the printer section
numbers = ('rotation', '')
strs = ('screw_positions', '')
elif section.startswith('graph') or section.startswith('displayed_macros'):
elif section.startswith('graph')\
or section.startswith('displayed_macros')\
or section.startswith('spoolman'):
bools = [f'{option}' for option in config[section]]
elif section.startswith('z_calibrate_position'):
# This section may be deprecated in favor of moving this options under the printer section
@ -487,6 +489,7 @@ class KlipperScreenConfig:
extra_sections = [i for i in self.config.sections() if i.startswith("displayed_macros")]
extra_sections.extend([i for i in self.config.sections() if i.startswith("graph")])
extra_sections.extend([i for i in self.config.sections() if i.startswith("spoolman")])
for section in extra_sections:
for item in self.config.options(section):
value = self.config[section].getboolean(item, fallback=True)

View File

@ -281,3 +281,15 @@ enable: {{ moonraker_connected }}
name: KlipperScreen
icon: settings
panel: settings
[menu __main more spoolman]
name: Spoolman
icon: spoolman
panel: spoolman
enable: {{ printer.spoolman }}
[menu __print spoolman]
name: Spoolman
icon: spoolman
panel: spoolman
enable: {{ printer.spoolman }}

View File

@ -26,6 +26,7 @@ class Printer:
self.tempstore_size = 1200
self.cameras = []
self.available_commands = {}
self.spoolman = False
def reinit(self, printer_info, data):
self.config = data['configfile']['config']
@ -37,6 +38,7 @@ class Printer:
self.fancount = 0
self.output_pin_count = 0
self.tempstore = {}
self.spoolman = False
self.busy = False
if not self.store_timeout:
self.store_timeout = GLib.timeout_add_seconds(1, self._update_temp_store)
@ -236,6 +238,7 @@ class Printer:
"pause_resume": {"is_paused": self.state == "paused"},
"power_devices": {"count": len(self.get_power_devices())},
"cameras": {"count": len(self.cameras)},
"spoolman": self.spoolman
}
}
@ -364,3 +367,7 @@ class Printer:
temp = 0
self.tempstore[device][x].append(temp)
return True
def enable_spoolman(self):
logging.info("Enabling Spoolman")
self.spoolman = True

View File

@ -39,6 +39,7 @@ class Panel(ScreenPanel):
'unload': self._gtk.Button("arrow-up", _("Unload"), "color2"),
'retract': self._gtk.Button("retract", _("Retract"), "color1"),
'temperature': self._gtk.Button("heat-up", _("Temperature"), "color4"),
'spoolman': self._gtk.Button("spoolman", "Spoolman", "color3"),
}
self.buttons['extrude'].connect("clicked", self.extrude, "+")
self.buttons['load'].connect("clicked", self.load_unload, "+")
@ -48,7 +49,10 @@ class Panel(ScreenPanel):
"name": "Temperature",
"panel": "temperature"
})
self.buttons['spoolman'].connect("clicked", self.menu_item_clicked, {
"name": "Spoolman",
"panel": "spoolman"
})
extgrid = self._gtk.HomogeneousGrid()
limit = 5
i = 0
@ -66,6 +70,8 @@ class Panel(ScreenPanel):
i += 1
if i < (limit - 1):
extgrid.attach(self.buttons['temperature'], i + 1, 0, 1, 1)
if i < (limit - 2) and self._printer.spoolman:
extgrid.attach(self.buttons['spoolman'], i + 2, 0, 1, 1)
distgrid = Gtk.Grid()
for j, i in enumerate(self.distances):
@ -163,7 +169,7 @@ class Panel(ScreenPanel):
def enable_buttons(self, enable):
for button in self.buttons:
if button == "temperature":
if button in ("temperature", "spoolman"):
continue
self.buttons[button].set_sensitive(enable)

416
panels/spoolman.py Normal file
View File

@ -0,0 +1,416 @@
import os.path
import pathlib
import logging
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GdkPixbuf, GObject, Pango, Gdk
from ks_includes.screen_panel import ScreenPanel
from ks_includes.KlippyRest import KlippyRest
from datetime import datetime
try:
from zoneinfo import ZoneInfo
except ImportError:
from backports.zoneinfo import ZoneInfo
def format_date(date):
try:
return datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%f').replace(tzinfo=ZoneInfo('UTC'))
except ValueError:
try:
return datetime.strptime(date, '%Y-%m-%dT%H:%M:%S').replace(tzinfo=ZoneInfo('UTC'))
except ValueError:
return None
class SpoolmanVendor:
id: int
name: str
registered: datetime = None
def __init__(self, **entries):
self.__dict__.update(entries)
for date in ["registered"]:
if date in entries:
self.__setattr__(date, format_date(entries[date]))
class SpoolmanFilament:
article_number: str
color_hex: str
comment: str
density: float
diameter: float
id: int
material: str
name: str
price: float
registered: datetime = None
settings_bed_temp: int
settings_extruder_temp: int
spool_weight: float
vendor: SpoolmanVendor = None
weight: float
def __init__(self, **entries):
self.__dict__.update(entries)
if "vendor" in entries:
self.vendor = SpoolmanVendor(**(entries["vendor"]))
for date in ["registered"]:
if date in entries:
self.__setattr__(date, format_date(entries[date]))
class SpoolmanSpool(GObject.GObject):
archived: bool
id: int
remaining_length: float
remaining_weight: float
used_length: float
used_weight: float
lot_nr: str
filament: SpoolmanFilament = None
first_used: datetime = None
last_used: datetime = None
registered: datetime = None
_icon: Gtk.Image = None
theme_path: str = None
_spool_icon: str = None
def __init__(self, **entries):
GObject.GObject.__init__(self)
self.__dict__.update(entries)
if "filament" in entries:
self.filament = SpoolmanFilament(**(entries["filament"]))
for date in ["first_used", "last_used", "registered"]:
if date in entries:
self.__setattr__(date, format_date(entries[date]))
@property
def name(self):
result = self.filament.name
if self.filament.vendor:
result = " ".join([self.filament.vendor.name, "-", result])
return result
@property
def icon(self):
if self._icon is None:
if SpoolmanSpool._spool_icon is None:
klipperscreendir = pathlib.Path(__file__).parent.resolve().parent
_spool_icon_path = os.path.join(
klipperscreendir, "styles", SpoolmanSpool.theme_path, "images", "spool.svg"
)
if not os.path.isfile(_spool_icon_path):
_spool_icon_path = os.path.join(klipperscreendir, "styles", "spool.svg")
SpoolmanSpool._spool_icon = pathlib.Path(_spool_icon_path).read_text()
loader = GdkPixbuf.PixbufLoader()
loader.write(
SpoolmanSpool._spool_icon.replace('var(--filament-color)', f'#{self.filament.color_hex}').encode()
)
loader.close()
self._icon = loader.get_pixbuf()
return self._icon
class Panel(ScreenPanel):
apiClient: KlippyRest
_active_spool_id: int = None
@staticmethod
def spool_compare_id(model, row1, row2, user_data):
spool1 = model.get_value(row1, 0)
spool2 = model.get_value(row2, 0)
return spool1.id - spool2.id
@staticmethod
def spool_compare_date(model, row1, row2, user_data):
spool1 = model.get_value(row1, 0)
spool2 = model.get_value(row2, 0)
return 1 if (spool1.last_used or datetime.min).replace(tzinfo=None) > \
(spool2.last_used or datetime.min).replace(tzinfo=None) else -1
def _on_material_filter_changed(self, sender):
treeiter = sender.get_active_iter()
if treeiter is not None:
model = sender.get_model()
self._filters["material"] = model[treeiter][0]
self._filterable.refilter()
def __init__(self, screen, title):
super().__init__(screen, title)
self.apiClient = screen.apiclient
if self._config.get_main_config().getboolean("24htime", True):
self.timeFormat = '%Y-%m-%d %H:%M'
else:
self.timeFormat = '%Y-%m-%d %I:%M %p'
SpoolmanSpool.theme_path = screen.theme
GObject.type_register(SpoolmanSpool)
self._filters = {}
self._model = Gtk.TreeStore(SpoolmanSpool.__gtype__)
self._materials = Gtk.ListStore(str, str)
self._filterable = self._model.filter_new()
self._filterable.set_visible_func(self._filter_spools)
sortable = Gtk.TreeModelSort(self._filterable)
sortable.set_sort_func(0, self.spool_compare_id)
sortable.set_sort_func(1, self.spool_compare_date)
self.scroll = self._gtk.ScrolledWindow()
sbox = Gtk.Box(spacing=0)
sbox.set_vexpand(False)
clear_active_spool = self._gtk.Button("cancel", _("Clear"), "color2", self.bts, Gtk.PositionType.LEFT, 1)
clear_active_spool.get_style_context().add_class("buttons_slim")
clear_active_spool.connect('clicked', self.clear_active_spool)
refresh = self._gtk.Button("refresh", style="color1", scale=.66)
refresh.get_style_context().add_class("buttons_slim")
refresh.connect('clicked', self.load_spools)
sort_btn_id = self._gtk.Button(None, _("ID"), "color4", self.bts, Gtk.PositionType.RIGHT, 1)
sort_btn_id.connect("clicked", self.change_sort, "id")
sort_btn_id.get_style_context().add_class("buttons_slim")
sort_btn_used = self._gtk.Button(None, _("Last Used"), "color3", self.bts, Gtk.PositionType.RIGHT, 1)
sort_btn_used.connect("clicked", self.change_sort, "last_used")
sort_btn_used.get_style_context().add_class("buttons_slim")
switch = Gtk.Switch()
switch.set_hexpand(False)
switch.set_vexpand(False)
switch.set_active(self._config.get_config().getboolean("spoolman", "hide_archived", fallback=True))
switch.connect("notify::active", self.switch_config_option, "spoolman", "hide_archived", self.load_spools)
name = Gtk.Label()
name.set_markup(_("Archived"))
name.set_halign(Gtk.Align.START)
name.set_valign(Gtk.Align.CENTER)
name.set_line_wrap(True)
name.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR)
archived = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
archived.set_valign(Gtk.Align.CENTER)
archived.add(name)
archived.add(switch)
sbox.pack_start(sort_btn_id, True, True, 0)
sbox.pack_start(sort_btn_used, True, True, 0)
sbox.pack_start(clear_active_spool, True, True, 0)
sbox.pack_start(refresh, True, True, 0)
sbox.pack_start(archived, False, False, 5)
sbox.set_hexpand(True)
sbox.set_vexpand(False)
filter_box = Gtk.ListBox()
filter_box.set_selection_mode(Gtk.SelectionMode.NONE)
_filter = Gtk.Expander(label=_("Filter"))
_filter.add(filter_box)
row = Gtk.ListBoxRow()
hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
row.add(hbox)
label = Gtk.Label(_("Material"))
_material_filter = Gtk.ComboBox()
_material_filter.set_model(self._materials)
_material_filter.connect("changed", self._on_material_filter_changed)
cellrenderertext = Gtk.CellRendererText()
_material_filter.pack_start(cellrenderertext, True)
_material_filter.add_attribute(cellrenderertext, "text", 1)
hbox.pack_start(label, False, True, 0)
hbox.pack_start(_material_filter, True, True, 0)
filter_box.add(row)
self.main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
self.main.set_vexpand(True)
self.main.pack_start(sbox, False, False, 0)
self.main.pack_start(_filter, False, True, 0)
self.main.pack_start(self.scroll, True, True, 0)
self.load_spools()
self.get_active_spool()
self._treeview = Gtk.TreeView(model=sortable)
self._treeview.set_headers_visible(False)
self._treeview.set_show_expanders(False)
text_renderer = Gtk.CellRendererText()
pixbuf_renderer = Gtk.CellRendererPixbuf()
pixbuf_renderer.set_padding(5, 5)
checkbox_renderer = Gtk.CellRendererToggle()
column_id = Gtk.TreeViewColumn(cell_renderer=text_renderer)
column_id.set_cell_data_func(
text_renderer,
lambda column, cell, model, it, data:
self._set_cell_background(cell, model.get_value(it, 0)) and
cell.set_property('text', f'{model.get_value(it, 0).id}')
)
column_id.set_sort_column_id(0)
column_icon = Gtk.TreeViewColumn(cell_renderer=pixbuf_renderer)
column_icon.set_cell_data_func(
pixbuf_renderer,
lambda column, cell, model, it, data:
self._set_cell_background(cell, model.get_value(it, 0)) and
cell.set_property('pixbuf', model.get_value(it, 0).icon)
)
column_spool = Gtk.TreeViewColumn(cell_renderer=text_renderer)
column_spool.set_expand(True)
column_spool.set_cell_data_func(
text_renderer,
lambda column, cell, model, it, data:
self._set_cell_background(cell, model.get_value(it, 0)) and
cell.set_property('markup', self._get_filament_formated(model.get_value(it, 0)))
)
column_last_used = Gtk.TreeViewColumn(cell_renderer=text_renderer)
column_last_used.set_visible(False)
column_last_used.set_sort_column_id(1)
column_material = Gtk.TreeViewColumn(cell_renderer=text_renderer)
column_material.set_cell_data_func(
text_renderer,
lambda column, cell, model, it, data:
self._set_cell_background(cell, model.get_value(it, 0)) and
cell.set_property('text', model.get_value(it, 0).filament.material)
)
checkbox_renderer.connect("toggled", self._set_active_spool)
column_toggle_active_spool = Gtk.TreeViewColumn(cell_renderer=checkbox_renderer)
column_toggle_active_spool.set_cell_data_func(
checkbox_renderer,
lambda column, cell, model, it, data:
self._set_cell_background(cell, model.get_value(it, 0)) and
cell.set_property('active', model.get_value(it, 0).id == self._active_spool_id)
)
self._treeview.append_column(column_id)
self._treeview.append_column(column_icon)
self._treeview.append_column(column_spool)
self._treeview.append_column(column_last_used)
self._treeview.append_column(column_material)
self._treeview.append_column(column_toggle_active_spool)
self.current_sort_widget = sort_btn_id
sort_btn_used.clicked()
self.scroll.add(self._treeview)
self.content.add(self.main)
def _filter_spools(self, model, i, data):
spool: SpoolmanSpool = model[i][0]
matches = True
if ("material" in self._filters) and (self._filters["material"] is not None):
matches &= spool.filament.material == self._filters["material"]
return matches
def _set_cell_background(self, cell, spool: SpoolmanSpool):
cell.set_property('cell-background-rgba', Gdk.RGBA(1, 1, 1, .1) if spool.id == self._active_spool_id else None)
return True
def _get_filament_formated(self, spool: SpoolmanSpool):
if spool.id == self._active_spool_id:
result = f'<big><b>{spool.name}</b></big>\n'
else:
result = f'<big>{spool.name}</big>\n'
if spool.last_used:
result += f'{_("Last used")}:<b> {spool.last_used.astimezone():{self.timeFormat}}</b>\n'
if hasattr(spool, "remaining_weight"):
result += f'{_("Remaining weight")}: <b>{round(spool.remaining_weight, 2)} g</b>\n'
if hasattr(spool, "remaining_length"):
result += f'{_("Remaining length")}: <b>{round(spool.remaining_length / 1000, 2)} m</b>\n'
return result.strip()
def _set_active_spool(self, sender, path):
model = self._treeview.get_model()
it = model.get_iter(path)
spool = model.get_value(it, 0)
if spool.id == self._active_spool_id:
self.clear_active_spool()
else:
self.set_active_spool(spool)
def change_sort(self, widget, sort_type):
self.current_sort_widget.set_image(None)
self.current_sort_widget = widget
if sort_type == "id":
logging.info("Sorting by ID")
column = 0
elif sort_type == "last_used":
logging.info("Sorting by Last Used")
column = 1
else:
logging.error("Unknown sort type")
return
if self._treeview.get_column(column).get_sort_order() == Gtk.SortType.DESCENDING:
new_sort_order = Gtk.SortType.ASCENDING
else:
new_sort_order = Gtk.SortType.DESCENDING
self._treeview.get_column(column).set_sort_order(new_sort_order)
self._treeview.get_model().set_sort_column_id(column, new_sort_order)
icon = "arrow-down" if new_sort_order == Gtk.SortType.DESCENDING else "arrow-up"
widget.set_image(self._gtk.Image(icon, self._gtk.img_scale * self.bts))
def process_update(self, action, data):
if action == "notify_active_spool_set":
self._active_spool_id = data['spool_id']
self._treeview.get_model().foreach(lambda store, treepath, treeiter:
store.row_changed(treepath, treeiter)
)
self._treeview.queue_draw()
def load_spools(self, data=None):
hide_archived = self._config.get_config().getboolean("spoolman", "hide_archived", fallback=True)
self._model.clear()
self._materials.clear()
spools = self.apiClient.post_request("server/spoolman/proxy", json={
"request_method": "GET",
"path": f"/v1/spool?allow_archived={not hide_archived}",
})
if not spools or "result" not in spools:
self._screen.show_error_modal("Exception when trying to fetch spools")
return
materials = []
for spool in spools["result"]:
spoolObject = SpoolmanSpool(**spool)
self._model.append(None, [spoolObject])
if spoolObject.filament.material not in materials:
materials.append(spoolObject.filament.material)
materials.sort()
self._materials.append([None, _("All")])
for material in materials:
self._materials.append([material, material])
def clear_active_spool(self, sender: Gtk.Button = None):
result = self.apiClient.post_request("server/spoolman/spool_id", json={})
if not result:
self._screen.show_error_modal("Exception when setting active spool")
return
def set_active_spool(self, spool: SpoolmanSpool):
result = self.apiClient.post_request("server/spoolman/spool_id", json={
"spool_id": spool.id
})
if not result:
self._screen.show_error_modal("Exception when setting active spool")
return
def get_active_spool(self) -> SpoolmanSpool:
result = self.apiClient.send_request("server/spoolman/spool_id")
if not result:
self._screen.show_error_modal("Exception when getting active spool")
return
self._active_spool_id = result["result"]["spool_id"]
return self._active_spool_id

View File

@ -894,6 +894,8 @@ class KlipperScreen(Gtk.Window):
self.files.initialize()
self.files.refresh_files()
self.init_spoolman()
logging.info("Printer initialized")
self.initialized = True
self.reinit_count = 0
@ -919,6 +921,18 @@ class KlipperScreen(Gtk.Window):
logging.info(f"Temperature store size: {self.printer.tempstore_size}")
except KeyError:
logging.error("Couldn't get the temperature store size")
return False
def init_spoolman(self):
server_config = self.apiclient.send_request("server/config")
if server_config:
try:
server_config["result"]["config"]["spoolman"]
self.printer.enable_spoolman()
except KeyError:
logging.warning("Not using Spoolman")
return False
def show_keyboard(self, entry=None, event=None):
if self.keyboard is not None:

View File

@ -8,3 +8,4 @@ python-mpv==0.5.2;python_version<"3.10"
python-mpv==1.0.4;python_version>="3.10"
six==1.16.0
dbus-python==1.3.2
backports.zoneinfo;python_version<"3.9"

View File

@ -11,11 +11,41 @@ button:disabled {
opacity: .2;
}
list row,
treeview.view,
window {
background-color: #13181C;
-gtk-icon-shadow: none;
}
switch slider {
border: 0;
}
switch, treeview.view check {
margin: 0.75em;
min-width: 6em;
min-height: 3em;
border: 0;
border-radius: 3em;
}
treeview.view check {
background-color: rgb(32,41,47);
-gtk-icon-source: -gtk-icontheme("switch-off-symbolic");
background-repeat: no-repeat;
background-position: left center;
background-size : 3em 3em;
background-image: image(url("./styles/circle.svg"));
-gtk-icon-transform: translateX(1.5em);
}
treeview.view check:checked {
background-color : rgb(53,132,228);
background-position: right center;
-gtk-icon-source: -gtk-icontheme("switch-on-symbolic");
-gtk-icon-transform: translateX(-1.5em);
}
button {
background-image: none;
background-color: #13181C;
@ -110,18 +140,6 @@ combobox arrow {
min-width: 1em;
}
switch {
margin: 0.75em;
min-width: 6em;
min-height: 3em;
border: 0;
border-radius: 3em;
}
switch slider {
border: 0;
}
entry {
font-size: 1em;
background-color: #20292F;

10
styles/circle.svg Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<svg
width="120"
height="120"
viewBox="0 0 120 120"
>
<circle cx="60" cy="60" r="60" fill="#fff" />
</svg>

After

Width:  |  Height:  |  Size: 160 B

View File

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 235 500"
preserveAspectRatio="xMinYMin meet"
width="23.5"
height="50"
xml:space="preserve"
version="1.1"
id="svg29"
sodipodi:docname="spool.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs33">
<filter
id="a"
y="-0.0018966793"
height="1.0037934"
x="-0.0018966793"
width="1.1618461">
<feGaussianBlur
in="SourceAlpha"
stdDeviation="0.10000221"
id="feGaussianBlur8" />
<feOffset
dx="20"
result="oBlur"
id="feOffset10" />
<feFlood
flood-color="rgb(0,0,0)"
flood-opacity=".67"
id="feFlood12" />
<feComposite
in2="oBlur"
operator="in"
id="feComposite14" />
<feMerge
id="feMerge20">
<feMergeNode
id="feMergeNode16" />
<feMergeNode
in="SourceGraphic"
id="feMergeNode18" />
</feMerge>
</filter>
</defs><sodipodi:namedview
id="namedview31"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
showguides="false"
inkscape:zoom="4.8861079"
inkscape:cx="-43.183655"
inkscape:cy="-3.172259"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg29" />
<path
style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#586e75;fill-rule:nonzero;opacity:1;fill-opacity:1"
vector-effect="non-scaling-stroke"
d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"
id="path2"
transform="matrix(.58757 0 0 3.94769 197.135 250.047)" />
<path
id="path6"
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill:var(--filament-color)"
d="M 38.499405 -65.244196 C 38.492933 -65.244196 38.487037 -65.238439 38.480567 -65.238379 L -30.060214 -65.238379 C -24.441657 -52.676289 -20.575458 -28.328491 -20.575458 -0.0023639694 C -20.575458 28.325864 -24.440974 52.676521 -30.060214 65.239468 L 38.499405 65.239468 C 44.926102 65.239468 50.141071 36.010765 50.141071 -0.0023639694 C 50.141071 -36.015493 44.926102 -65.244196 38.499405 -65.244196 z "
transform="matrix(2.07364,0,0,3.3577,117.295,250.047)" /><path
id="path2-3-7"
style="fill:#586e75;fill-opacity:1;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="m 37.460938,0.2734375 c -20.52086,0 -37.1875005,111.8926925 -37.1875005,249.7656225 0,137.87293 16.6666405,249.78516 37.1875005,249.78516 h 13.955078 c 20.520859,0 37.167968,-111.91223 37.167968,-249.78516 0,-137.87293 -16.647109,-249.7656225 -37.167968,-249.7656225 z"
sodipodi:nodetypes="csccscc" /><path
id="path1437"
style="fill:#eee8d5;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="m 37.46094,0.2734375 c -20.52086,0 -37.1875,111.8926925 -37.1875,249.7656225 0,137.87293 16.66664,249.78516 37.1875,249.78516 20.52086,0 37.16797,-111.91223 37.16797,-249.78516 C 74.62891,112.16613 57.9818,0.2734375 37.46094,0.2734375 Z m 0,146.2304725 c 8.50631,0 15.41015,46.38406 15.41015,103.53515 0,57.1511 -6.90384,103.53516 -15.41015,103.53516 -8.50631,0 -15.41016,-46.38406 -15.41016,-103.53516 0,-57.15109 6.90385,-103.53515 15.41016,-103.53515 z" /></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="64"
height="64"
viewBox="0 0 64 64"
xml:space="preserve"
id="svg8"
sodipodi:docname="spoolman.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview8"
pagecolor="#002b36"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="1"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="6.0682618"
inkscape:cx="7.0860489"
inkscape:cy="35.183057"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g6874"
showgrid="false" />
<desc
id="desc1">Created with Fabric.js 5.3.0</desc>
<defs
id="defs1">
</defs>
<g
id="g6874"
transform="matrix(1.4222222,0,0,1.4222222,-13.51111,-13.51111)"><path
style="fill:#eee8d5;fill-opacity:0.98039216;opacity:1;fill-rule:nonzero;stroke:#598ec7;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
vector-effect="non-scaling-stroke"
d="M 0,-22.46181 C 12.39892,-22.46181 22.46181,-12.39892 22.46181,0 22.46181,12.39892 12.39892,22.46181 0,22.46181 -12.39892,22.46181 -22.46181,12.39892 -22.46181,0 -22.46181,-12.39892 -12.39892,-22.46181 0,-22.46181 Z"
stroke-linecap="round"
id="path2"
transform="matrix(0.84518453,0,0,0.84518453,32,32)" /><path
style="fill:#586e75;opacity:1;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
vector-effect="non-scaling-stroke"
d="m -33.16071,25.30347 c -2.10604,-0.58976 -3.86115,-2.04871 -4.82582,-4.01152 -0.96468,-1.96281 -1.04757,-4.24361 -0.22794,-6.27128 v 0 0 c 9.79269,-24.22569 29.00311,-43.43631 53.2287,-53.22926 l 0.03335,-0.01348 v 0 c 2.01944,-0.81634 4.29102,-0.73379 6.24588,0.22696 1.95487,0.96076 3.40792,2.70876 3.99529,4.80627 l 12.7099,45.38722 v 0 c 2.03963,7.28353 -0.008,15.10088 -5.35637,20.44924 -5.34836,5.34836 -13.16571,7.396 -20.44924,5.35637 z"
stroke-linecap="round"
id="path7"
transform="matrix(0.18910872,0.05067153,-0.05067153,0.18910872,25.816351,21.133363)" /><path
style="fill:#073642;opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
vector-effect="non-scaling-stroke"
transform="matrix(0.18910872,0.05067153,-0.05067153,0.18910872,27.045413,23.226732)"
d="m -29.98183,19.80196 0.80996,-2.70728 v 0 c 6.78179,-22.66818 24.70577,-40.28047 47.48943,-46.6636 l 1.56961,-0.43974 9.32685,33.48202 v 0 c 2.02905,7.28401 -0.03025,15.09606 -5.38634,20.4333 -5.35609,5.33724 -13.17535,7.36899 -20.45217,5.31427 z"
stroke-linecap="round"
id="path8" /><path
style="fill:#586e75;opacity:1;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
vector-effect="non-scaling-stroke"
d="m -33.16071,25.30347 c -2.10604,-0.58976 -3.86115,-2.04871 -4.82582,-4.01152 -0.96468,-1.96281 -1.04757,-4.24361 -0.22794,-6.27128 v 0 0 c 9.79269,-24.22569 29.00311,-43.43631 53.2287,-53.22926 l 0.03335,-0.01348 v 0 c 2.01944,-0.81634 4.29102,-0.73379 6.24588,0.22696 1.95487,0.96076 3.40792,2.70876 3.99529,4.80627 l 12.7099,45.38722 v 0 c 2.03963,7.28353 -0.008,15.10088 -5.35637,20.44924 -5.34836,5.34836 -13.16571,7.396 -20.44924,5.35637 z"
stroke-linecap="round"
id="path5"
transform="matrix(-0.05067153,-0.18910872,0.18910872,-0.05067153,25.903038,43.124789)" /><path
style="fill:#073642;opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
vector-effect="non-scaling-stroke"
transform="matrix(-0.05067153,-0.18910872,0.18910872,-0.05067153,27.101418,41.013706)"
d="m -29.98183,19.80196 0.80996,-2.70728 v 0 c 6.78179,-22.66818 24.70577,-40.28047 47.48943,-46.6636 l 1.56961,-0.43974 9.32685,33.48202 v 0 c 2.02905,7.28401 -0.03025,15.09606 -5.38634,20.4333 -5.35609,5.33724 -13.17535,7.36899 -20.45217,5.31427 z"
stroke-linecap="round"
id="path6" /><path
style="fill:#586e75;opacity:1;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
vector-effect="non-scaling-stroke"
d="m -33.16071,25.30347 c -2.10604,-0.58976 -3.86115,-2.04871 -4.82582,-4.01152 -0.96468,-1.96281 -1.04757,-4.24361 -0.22794,-6.27128 v 0 0 c 9.79269,-24.22569 29.00311,-43.43631 53.2287,-53.22926 l 0.03335,-0.01348 v 0 c 2.01944,-0.81634 4.29102,-0.73379 6.24588,0.22696 1.95487,0.96076 3.40792,2.70876 3.99529,4.80627 l 12.7099,45.38722 v 0 c 2.03963,7.28353 -0.008,15.10088 -5.35637,20.44924 -5.34836,5.34836 -13.16571,7.396 -20.44924,5.35637 z"
stroke-linecap="round"
id="path3"
transform="matrix(-0.13843719,0.13843719,-0.13843719,-0.13843719,44.656252,32)" /><path
style="fill:#073642;opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
vector-effect="non-scaling-stroke"
transform="matrix(-0.13843719,0.13843719,-0.13843719,-0.13843719,42.228811,32.017714)"
d="m -29.98183,19.80196 0.80996,-2.70728 v 0 c 6.78179,-22.66818 24.70577,-40.28047 47.48943,-46.6636 l 1.56961,-0.43974 9.32685,33.48202 v 0 c 2.02905,7.28401 -0.03025,15.09606 -5.38634,20.4333 -5.35609,5.33724 -13.17535,7.36899 -20.45217,5.31427 z"
stroke-linecap="round"
id="path4" /></g>
</svg>

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -5,6 +5,8 @@
color: #fdf6e3; /*base3*/
}
list row,
treeview.view,
window {
background-color: #002b36; /*base03*/
}
@ -78,10 +80,12 @@ combobox box button {
border-color: #002b36; /*base03*/
}
treeview.view check,
switch {
background-color: #073642; /* base02 */
}
treeview.view check:checked,
switch:checked {
background-color: #859900; /*solarized-green*/
}

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 235 500"
preserveAspectRatio="xMinYMin meet"
width="23.5"
height="50"
xml:space="preserve"
version="1.1"
id="svg29"
sodipodi:docname="spool.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs33">
<filter
id="a"
y="-0.0018966793"
height="1.0037934"
x="-0.0018966793"
width="1.1618461">
<feGaussianBlur
in="SourceAlpha"
stdDeviation="0.10000221"
id="feGaussianBlur8" />
<feOffset
dx="20"
result="oBlur"
id="feOffset10" />
<feFlood
flood-color="rgb(0,0,0)"
flood-opacity=".67"
id="feFlood12" />
<feComposite
in2="oBlur"
operator="in"
id="feComposite14" />
<feMerge
id="feMerge20">
<feMergeNode
id="feMergeNode16" />
<feMergeNode
in="SourceGraphic"
id="feMergeNode18" />
</feMerge>
</filter>
</defs><sodipodi:namedview
id="namedview31"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
showguides="false"
inkscape:zoom="9.7722158"
inkscape:cx="-26.299051"
inkscape:cy="22.256979"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg29" />
<path
style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#e2e2e2;fill-rule:nonzero;opacity:1;fill-opacity:1"
vector-effect="non-scaling-stroke"
d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"
id="path2"
transform="matrix(.58757 0 0 3.94769 197.135 250.047)" />
<path
id="path6"
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill:var(--filament-color)"
d="M 38.499405 -65.244196 C 38.492933 -65.244196 38.487037 -65.238439 38.480567 -65.238379 L -30.060214 -65.238379 C -24.441657 -52.676289 -20.575458 -28.328491 -20.575458 -0.0023639694 C -20.575458 28.325864 -24.440974 52.676521 -30.060214 65.239468 L 38.499405 65.239468 C 44.926102 65.239468 50.141071 36.010765 50.141071 -0.0023639694 C 50.141071 -36.015493 44.926102 -65.244196 38.499405 -65.244196 z "
transform="matrix(2.07364,0,0,3.3577,117.295,250.047)" /><path
id="path1437"
style="fill:#e2e2e2;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
d="m 37.46094,0.2734375 c -20.52086,0 -37.1875,111.8926925 -37.1875,249.7656225 0,137.87293 16.66664,249.78516 37.1875,249.78516 20.52086,0 37.16797,-111.91223 37.16797,-249.78516 C 74.62891,112.16613 57.9818,0.2734375 37.46094,0.2734375 Z m 0,146.2304725 c 8.50631,0 15.41015,46.38406 15.41015,103.53515 0,57.1511 -6.90384,103.53516 -15.41015,103.53516 -8.50631,0 -15.41016,-46.38406 -15.41016,-103.53516 0,-57.15109 6.90385,-103.53515 15.41016,-103.53515 z" /></svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg1152"
sodipodi:docname="spoolman.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<path
id="path2-9"
style="opacity:1;fill:#e2e2e2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="M 12,2 C 6.480016,2 2,6.480016 2,12 2,17.519984 6.480016,22 12,22 17.519984,22 22,17.519984 22,12 22,6.480016 17.519984,2 12,2 Z m 0.172164,2.920284 0.03545,3.584346 c 0.0077,0.779735 -0.405463,1.502942 -1.081453,1.891637 -0.675989,0.388696 -1.509524,0.382264 -2.179542,-0.01664 L 5.875148,8.550923 6.028505,8.302804 C 7.309093,6.225785 9.564436,4.949446 12.004344,4.921727 Z m 5.958478,3.458478 0.138166,0.256799 c 1.158459,2.147536 1.13591,4.73871 -0.06004,6.865597 l -0.08247,0.146846 -3.121383,-1.76143 c -0.679122,-0.383199 -1.098741,-1.103183 -1.097367,-1.882957 0.0014,-0.779774 0.423408,-1.498537 1.103877,-1.87934 z m -8.056279,5.066551 c 0.376542,-0.0015 0.753548,0.09526 1.090857,0.290798 0.674617,0.391078 1.086115,1.115548 1.075665,1.895255 l -0.04774,3.574219 -0.291522,-0.008 C 9.46257,19.127075 7.229788,17.811511 5.985825,15.712341 l -0.08608,-0.144676 3.08666,-1.822916 C 9.322117,13.54648 9.697827,13.446797 10.074368,13.44527 Z" />
<defs
id="defs1156"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath13">
<path
id="path13"
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:label="bean1_fg"
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
</clipPath>
<inkscape:path-effect
effect="powerclip"
id="path-effect13"
is_visible="true"
lpeversion="1"
inverse="true"
flatten="false"
hide_clip="false"
message="Use fill-rule evenodd on &lt;b&gt;fill and stroke&lt;/b&gt; dialog if no flatten result after convert clip to paths." />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath13-5">
<path
id="path13-3"
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:label="bean1_fg"
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
</clipPath>
</defs>
<sodipodi:namedview
id="namedview1154"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
showgrid="false"
inkscape:zoom="4.5961941"
inkscape:cx="-2.7196415"
inkscape:cy="-9.4643523"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1152"
inkscape:showpageshadow="0"
inkscape:deskcolor="#505050" />
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -4,6 +4,8 @@
color: #e2e2e2;
}
list row,
treeview.view,
window {
background-color: #121212;
}
@ -75,10 +77,12 @@ combobox box button {
border-color: #121212;
}
treeview.view check,
switch {
background-color: #1f1f1f;
}
treeview.view check:checked,
switch:checked {
background-color: #849900;
}

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 235 500"
preserveAspectRatio="xMinYMin meet"
width="23.5"
height="50"
xml:space="preserve"
version="1.1"
id="svg29"
sodipodi:docname="spool.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs33">
<filter
id="a"
y="-0.0018966793"
height="1.0037934"
x="-0.0018966793"
width="1.1618461">
<feGaussianBlur
in="SourceAlpha"
stdDeviation="0.10000221"
id="feGaussianBlur8" />
<feOffset
dx="20"
result="oBlur"
id="feOffset10" />
<feFlood
flood-color="rgb(0,0,0)"
flood-opacity=".67"
id="feFlood12" />
<feComposite
in2="oBlur"
operator="in"
id="feComposite14" />
<feMerge
id="feMerge20">
<feMergeNode
id="feMergeNode16" />
<feMergeNode
in="SourceGraphic"
id="feMergeNode18" />
</feMerge>
</filter>
</defs><sodipodi:namedview
id="namedview31"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
showguides="false"
inkscape:zoom="9.7722158"
inkscape:cx="-26.299051"
inkscape:cy="22.256979"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg29" />
<path
style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#e2e2e2;fill-rule:nonzero;opacity:1;fill-opacity:1"
vector-effect="non-scaling-stroke"
d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"
id="path2"
transform="matrix(.58757 0 0 3.94769 197.135 250.047)" />
<path
id="path6"
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill:var(--filament-color)"
d="M 38.499405 -65.244196 C 38.492933 -65.244196 38.487037 -65.238439 38.480567 -65.238379 L -30.060214 -65.238379 C -24.441657 -52.676289 -20.575458 -28.328491 -20.575458 -0.0023639694 C -20.575458 28.325864 -24.440974 52.676521 -30.060214 65.239468 L 38.499405 65.239468 C 44.926102 65.239468 50.141071 36.010765 50.141071 -0.0023639694 C 50.141071 -36.015493 44.926102 -65.244196 38.499405 -65.244196 z "
transform="matrix(2.07364,0,0,3.3577,117.295,250.047)" /><path
id="path1437"
style="fill:#e2e2e2;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
d="m 37.46094,0.2734375 c -20.52086,0 -37.1875,111.8926925 -37.1875,249.7656225 0,137.87293 16.66664,249.78516 37.1875,249.78516 20.52086,0 37.16797,-111.91223 37.16797,-249.78516 C 74.62891,112.16613 57.9818,0.2734375 37.46094,0.2734375 Z m 0,146.2304725 c 8.50631,0 15.41015,46.38406 15.41015,103.53515 0,57.1511 -6.90384,103.53516 -15.41015,103.53516 -8.50631,0 -15.41016,-46.38406 -15.41016,-103.53516 0,-57.15109 6.90385,-103.53515 15.41016,-103.53515 z" /></svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg1152"
sodipodi:docname="spoolman.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<path
id="path2-9"
style="opacity:1;fill:#e2e2e2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="M 12,2 C 6.480016,2 2,6.480016 2,12 2,17.519984 6.480016,22 12,22 17.519984,22 22,17.519984 22,12 22,6.480016 17.519984,2 12,2 Z m 0.172164,2.920284 0.03545,3.584346 c 0.0077,0.779735 -0.405463,1.502942 -1.081453,1.891637 -0.675989,0.388696 -1.509524,0.382264 -2.179542,-0.01664 L 5.875148,8.550923 6.028505,8.302804 C 7.309093,6.225785 9.564436,4.949446 12.004344,4.921727 Z m 5.958478,3.458478 0.138166,0.256799 c 1.158459,2.147536 1.13591,4.73871 -0.06004,6.865597 l -0.08247,0.146846 -3.121383,-1.76143 c -0.679122,-0.383199 -1.098741,-1.103183 -1.097367,-1.882957 0.0014,-0.779774 0.423408,-1.498537 1.103877,-1.87934 z m -8.056279,5.066551 c 0.376542,-0.0015 0.753548,0.09526 1.090857,0.290798 0.674617,0.391078 1.086115,1.115548 1.075665,1.895255 l -0.04774,3.574219 -0.291522,-0.008 C 9.46257,19.127075 7.229788,17.811511 5.985825,15.712341 l -0.08608,-0.144676 3.08666,-1.822916 C 9.322117,13.54648 9.697827,13.446797 10.074368,13.44527 Z" />
<defs
id="defs1156"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath13">
<path
id="path13"
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:label="bean1_fg"
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
</clipPath>
<inkscape:path-effect
effect="powerclip"
id="path-effect13"
is_visible="true"
lpeversion="1"
inverse="true"
flatten="false"
hide_clip="false"
message="Use fill-rule evenodd on &lt;b&gt;fill and stroke&lt;/b&gt; dialog if no flatten result after convert clip to paths." />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath13-5">
<path
id="path13-3"
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:label="bean1_fg"
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
</clipPath>
</defs>
<sodipodi:namedview
id="namedview1154"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
showgrid="false"
inkscape:zoom="4.5961941"
inkscape:cx="-2.7196415"
inkscape:cy="-9.4643523"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1152"
inkscape:showpageshadow="0"
inkscape:deskcolor="#505050" />
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -5,6 +5,8 @@
font-family: RobotoMedium;
}
list row,
treeview.view,
window {
background-color: #121212;
}
@ -59,10 +61,12 @@ combobox box button {
border-color: #121212;
}
treeview.view check,
switch {
background-color: #1c1c1c;
}
treeview.view check:checked,
switch:checked {
background-color: #2f5631;
}

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 235 500"
preserveAspectRatio="xMinYMin meet"
width="23.5"
height="50"
xml:space="preserve"
version="1.1"
id="svg29"
sodipodi:docname="spool.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs33">
<filter
id="a"
y="-0.0018966793"
height="1.0037934"
x="-0.0018966793"
width="1.1618461">
<feGaussianBlur
in="SourceAlpha"
stdDeviation="0.10000221"
id="feGaussianBlur8" />
<feOffset
dx="20"
result="oBlur"
id="feOffset10" />
<feFlood
flood-color="rgb(0,0,0)"
flood-opacity=".67"
id="feFlood12" />
<feComposite
in2="oBlur"
operator="in"
id="feComposite14" />
<feMerge
id="feMerge20">
<feMergeNode
id="feMergeNode16" />
<feMergeNode
in="SourceGraphic"
id="feMergeNode18" />
</feMerge>
</filter>
</defs><sodipodi:namedview
id="namedview31"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
showguides="false"
inkscape:zoom="9.7722158"
inkscape:cx="-18.112576"
inkscape:cy="20.926677"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg29" />
<path
style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#000000;fill-rule:nonzero;opacity:1;fill-opacity:1"
vector-effect="non-scaling-stroke"
d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"
id="path2"
transform="matrix(.58757 0 0 3.94769 197.135 250.047)" />
<path
id="path6"
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill:var(--filament-color)"
d="M 38.499405 -65.244196 C 38.492933 -65.244196 38.487037 -65.238439 38.480567 -65.238379 L -30.060214 -65.238379 C -24.441657 -52.676289 -20.575458 -28.328491 -20.575458 -0.0023639694 C -20.575458 28.325864 -24.440974 52.676521 -30.060214 65.239468 L 38.499405 65.239468 C 44.926102 65.239468 50.141071 36.010765 50.141071 -0.0023639694 C 50.141071 -36.015493 44.926102 -65.244196 38.499405 -65.244196 z "
transform="matrix(2.07364,0,0,3.3577,117.295,250.047)" /><path
id="path1437"
style="fill:#000000;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
d="m 37.46094,0.2734375 c -20.52086,0 -37.1875,111.8926925 -37.1875,249.7656225 0,137.87293 16.66664,249.78516 37.1875,249.78516 20.52086,0 37.16797,-111.91223 37.16797,-249.78516 C 74.62891,112.16613 57.9818,0.2734375 37.46094,0.2734375 Z m 0,146.2304725 c 8.50631,0 15.41015,46.38406 15.41015,103.53515 0,57.1511 -6.90384,103.53516 -15.41015,103.53516 -8.50631,0 -15.41016,-46.38406 -15.41016,-103.53516 0,-57.15109 6.90385,-103.53515 15.41016,-103.53515 z" /></svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg1152"
sodipodi:docname="spoolman.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<path
id="path2-9"
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="M 12,2 C 6.480016,2 2,6.480016 2,12 2,17.519984 6.480016,22 12,22 17.519984,22 22,17.519984 22,12 22,6.480016 17.519984,2 12,2 Z m 0.172164,2.920284 0.03545,3.584346 c 0.0077,0.779735 -0.405463,1.502942 -1.081453,1.891637 -0.675989,0.388696 -1.509524,0.382264 -2.179542,-0.01664 L 5.875148,8.550923 6.028505,8.302804 C 7.309093,6.225785 9.564436,4.949446 12.004344,4.921727 Z m 5.958478,3.458478 0.138166,0.256799 c 1.158459,2.147536 1.13591,4.73871 -0.06004,6.865597 l -0.08247,0.146846 -3.121383,-1.76143 c -0.679122,-0.383199 -1.098741,-1.103183 -1.097367,-1.882957 0.0014,-0.779774 0.423408,-1.498537 1.103877,-1.87934 z m -8.056279,5.066551 c 0.376542,-0.0015 0.753548,0.09526 1.090857,0.290798 0.674617,0.391078 1.086115,1.115548 1.075665,1.895255 l -0.04774,3.574219 -0.291522,-0.008 C 9.46257,19.127075 7.229788,17.811511 5.985825,15.712341 l -0.08608,-0.144676 3.08666,-1.822916 C 9.322117,13.54648 9.697827,13.446797 10.074368,13.44527 Z" />
<defs
id="defs1156">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath13">
<path
id="path13"
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:label="bean1_fg"
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
</clipPath>
<inkscape:path-effect
effect="powerclip"
id="path-effect13"
is_visible="true"
lpeversion="1"
inverse="true"
flatten="false"
hide_clip="false"
message="Use fill-rule evenodd on &lt;b&gt;fill and stroke&lt;/b&gt; dialog if no flatten result after convert clip to paths." />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath13-5">
<path
id="path13-3"
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:label="bean1_fg"
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
</clipPath>
</defs>
<sodipodi:namedview
id="namedview1154"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
showgrid="false"
inkscape:zoom="4.5961941"
inkscape:cx="-30.895127"
inkscape:cy="-9.4643523"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1152"
inkscape:showpageshadow="0"
inkscape:deskcolor="#505050" />
</svg>

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -4,6 +4,8 @@
color: black;
}
list row,
treeview.view,
window {
background-color: #FAFAFA;
}
@ -88,10 +90,12 @@ combobox box button {
border-color: #BDBDBD;
}
treeview.view check,
switch {
background-color: #BDBDBD;
}
treeview.view check:checked,
switch:checked {
background-color: #C5E1A5;
}

19
styles/spool.svg Normal file
View File

@ -0,0 +1,19 @@
<svg viewBox="0 0 235 500" preserveAspectRatio="xMinYMin meet" width="23.5" height="50" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<path style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#343434;fill-rule:nonzero;opacity:1" vector-effect="non-scaling-stroke" transform="matrix(.58757 0 0 3.94769 197.135 250.047)" d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"/>
<path style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:var(--filament-color);fill-rule:nonzero;opacity:1" vector-effect="non-scaling-stroke" transform="matrix(.38158 0 0 3.46232 197.135 250.047)" d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"/>
<path style="stroke:#000;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:var(--filament-color);fill-rule:nonzero;opacity:1" vector-effect="non-scaling-stroke" transform="matrix(2.07364 0 0 3.3577 117.295 250.047)" d="M-38.503-65.24h77.006V65.24h-77.006z"/>
<g transform="matrix(.58757 0 0 3.94769 37.454 250.047)">
<filter id="a" y="-.057" height="1.114" x="-.057" width="1.272">
<feGaussianBlur in="SourceAlpha" stdDeviation="3"/>
<feOffset dx="20" result="oBlur"/>
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".67"/>
<feComposite in2="oBlur" operator="in"/>
<feMerge>
<feMergeNode/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<path style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#343434;fill-rule:nonzero;opacity:1;filter:url(#a)" vector-effect="non-scaling-stroke" d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"/>
<path style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#111;fill-rule:nonzero;opacity:1" vector-effect="non-scaling-stroke" transform="scale(.41452)" d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 235 500"
preserveAspectRatio="xMinYMin meet"
width="23.5"
height="50"
xml:space="preserve"
version="1.1"
id="svg29"
sodipodi:docname="spool.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs33">
<filter
id="a"
y="-0.0018966793"
height="1.0037934"
x="-0.0018966793"
width="1.1618461">
<feGaussianBlur
in="SourceAlpha"
stdDeviation="0.10000221"
id="feGaussianBlur8" />
<feOffset
dx="20"
result="oBlur"
id="feOffset10" />
<feFlood
flood-color="rgb(0,0,0)"
flood-opacity=".67"
id="feFlood12" />
<feComposite
in2="oBlur"
operator="in"
id="feComposite14" />
<feMerge
id="feMerge20">
<feMergeNode
id="feMergeNode16" />
<feMergeNode
in="SourceGraphic"
id="feMergeNode18" />
</feMerge>
</filter>
</defs><sodipodi:namedview
id="namedview31"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
showguides="false"
inkscape:zoom="6.9100001"
inkscape:cx="-24.023155"
inkscape:cy="33.068017"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg29" />
<path
style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#ffffff;fill-rule:nonzero;opacity:1;fill-opacity:1"
vector-effect="non-scaling-stroke"
d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"
id="path2"
transform="matrix(.58757 0 0 3.94769 197.135 250.047)" />
<path
id="path6"
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1;fill:var(--filament-color)"
d="M 38.499405 -65.244196 C 38.492933 -65.244196 38.487037 -65.238439 38.480567 -65.238379 L -30.060214 -65.238379 C -24.441657 -52.676289 -20.575458 -28.328491 -20.575458 -0.0023639694 C -20.575458 28.325864 -24.440974 52.676521 -30.060214 65.239468 L 38.499405 65.239468 C 44.926102 65.239468 50.141071 36.010765 50.141071 -0.0023639694 C 50.141071 -36.015493 44.926102 -65.244196 38.499405 -65.244196 z "
transform="matrix(2.07364,0,0,3.3577,117.295,250.047)" /><path
id="path1437"
style="fill:#ffffff;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
d="m 37.46094,0.2734375 c -20.52086,0 -37.1875,111.8926925 -37.1875,249.7656225 0,137.87293 16.66664,249.78516 37.1875,249.78516 20.52086,0 37.16797,-111.91223 37.16797,-249.78516 C 74.62891,112.16613 57.9818,0.2734375 37.46094,0.2734375 Z m 0,146.2304725 c 8.50631,0 15.41015,46.38406 15.41015,103.53515 0,57.1511 -6.90384,103.53516 -15.41015,103.53516 -8.50631,0 -15.41016,-46.38406 -15.41016,-103.53516 0,-57.15109 6.90385,-103.53515 15.41016,-103.53515 z" /></svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="64"
height="64"
viewBox="0 0 64 64"
id="svg1152"
sodipodi:docname="spoolman.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<path
id="path2-9"
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:3.00001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="M 32,3.4999997 C 16.268045,3.4999997 3.4999997,16.268045 3.4999997,32 3.4999997,47.731954 16.268045,60.5 32,60.5 47.731954,60.5 60.5,47.731954 60.5,32 60.5,16.268045 47.731954,3.4999997 32,3.4999997 Z m 0.490666,8.3228093 0.101035,10.215386 c 0.02195,2.222245 -1.15557,4.283385 -3.082141,5.391166 -1.92657,1.107783 -4.302144,1.089452 -6.211695,-0.04743 l -8.753693,-5.211806 0.437068,-0.707139 c 3.649674,-5.919504 10.077402,-9.55707 17.03114,-9.636068 z m 16.981663,9.856662 0.393773,0.731878 c 3.301608,6.120477 3.237344,13.505323 -0.171114,19.566951 l -0.235039,0.418511 -8.895941,-5.020076 c -1.935498,-1.092116 -3.131412,-3.144071 -3.127497,-5.366427 0.004,-2.222355 1.206713,-4.27083 3.146049,-5.356118 z M 26.511934,36.119142 c 1.073145,-0.0043 2.147612,0.271491 3.108943,0.828774 1.922658,1.114573 3.095428,3.179311 3.065645,5.401477 l -0.136059,10.186524 -0.830838,-0.0228 C 24.768324,52.312164 18.404896,48.562805 14.859601,42.580172 l -0.245329,-0.412327 8.796982,-5.195311 c 0.956779,-0.565066 2.027552,-0.849163 3.100694,-0.853514 z" />
<defs
id="defs1156">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath13">
<path
id="path13"
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:label="bean1_fg"
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
</clipPath>
<inkscape:path-effect
effect="powerclip"
id="path-effect13"
is_visible="true"
lpeversion="1"
inverse="true"
flatten="false"
hide_clip="false"
message="Use fill-rule evenodd on &lt;b&gt;fill and stroke&lt;/b&gt; dialog if no flatten result after convert clip to paths." />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath13-5">
<path
id="path13-3"
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:label="bean1_fg"
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
</clipPath>
</defs>
<sodipodi:namedview
id="namedview1154"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
showgrid="false"
inkscape:zoom="4.5961941"
inkscape:cx="-3.807498"
inkscape:cy="-0.54392829"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1152"
inkscape:showpageshadow="0"
inkscape:deskcolor="#505050" />
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -2,6 +2,8 @@
color: white;
}
list row,
treeview.view,
window {
background-color: #13181C;
}
@ -53,10 +55,11 @@ combobox box button {
border-color: #cccccc;
}
treeview.view check,
switch {
background-color: #20292F;
}
treeview.view check:checked,
switch:checked {
background-color: #3584e4;
}