import os from math import radians from pkg_resources import resource_filename, Requirement from shoebot.core.backend import cairo, gi, driver from shoebot.core.events import REDRAW_EVENT, publish_event from shoebot.sbio.socket_server import SocketServer gi.require_version("Gtk", "3.0") from gi.repository import Gtk pycairo = driver.cairo ICON_FILE = resource_filename(Requirement.parse("shoebot"), "share/pixmaps/shoebot-ide.png") class BackingStore: instance = None def __init__(self, width, height): self.width = width self.height = height self.surface = pycairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) @property def dimensions(self): return self.width, self.height @classmethod
from shoebot.core.backend import cairo, gi, driver from shoebot.data import _copy_attrs import array from io import StringIO import os.path from PIL import Image as PILImage try: gi.require_version("Rsvg", "2.0") from gi.repository import Rsvg except ValueError: Rsvg = None from shoebot.data import Grob, ColorMixin CENTER = "center" CORNER = "corner" class SurfaceRef(object): """ Cannot have a weakref to a cairo surface, so wrapper is used """ def __init__(self, surface): self.surface = surface class Image(Grob, ColorMixin): _surface_cache = ( {} ) # Did have a WeakValueDictionary here but this caused a memory leak of images every frame
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from shoebot import ShoebotInstallError from shoebot.core.backend import cairo, gi, driver try: gi.require_version('Pango', '1.0') gi.require_version('PangoCairo', '1.0') from gi.repository import Pango, PangoCairo except ValueError as e: global Pango, PangoCairo # workaround for readthedocs where Pango is not installed print("Pango not found - typography will not be available.") class FakePango(object): def __getattr__(self, item): raise e Pango = FakePango() PangoCairo = FakePango() from shoebot.data import Grob, BezierPath, ColorMixin, _copy_attrs
# -*- coding: iso-8859-1 -*- from __future__ import print_function import errno import gettext import errno import locale import os import sys import shoebot from shoebot.data import ShoebotError from shoebot.core.backend import gi gi.require_version('Gtk', '3.0') gi.require_version('Gdk', '3.0') gi.require_version('GtkSource', '3.0') from gi.repository import ( GObject, Gdk, Gtk, GtkSource, Pango ) APP = 'shoebot' LOCALE_DIR = sys.prefix + '/share/shoebot/locale' SEARCH_FORWARD = 0 SEARCH_BACKWARD = 1
# -*- coding: iso-8859-1 -*- from __future__ import print_function import errno import gettext import errno import locale import os import sys import shoebot from shoebot.data import ShoebotError from shoebot.core.backend import gi gi.require_version('Gtk', '3.0') gi.require_version('Gdk', '3.0') gi.require_version('GtkSource', '3.0') from gi.repository import (GObject, Gdk, Gtk, GtkSource, Pango) APP = 'shoebot' LOCALE_DIR = sys.prefix + '/share/shoebot/locale' SEARCH_FORWARD = 0 SEARCH_BACKWARD = 1 locale.setlocale(locale.LC_ALL, '') gettext.bindtextdomain(APP, LOCALE_DIR) gettext.textdomain(APP) _ = gettext.gettext
#!/usr/bin/env python3 import argparse import colorsys import errno import gettext import locale import os import sys import shoebot from shoebot.data import ShoebotError from shoebot.core.backend import gi gi.require_version("Gdk", "3.0") gi.require_version("Gtk", "3.0") gi.require_version("GtkSource", "3.0") from gi.repository import Gdk, GLib, GObject, Gtk, GtkSource, Pango DEBUG = os.environ.get("SHOEBOT_DEBUG_IDE", "0").lower() in ["1", "yes", "true"] APP = "shoebot" LOCALE_DIR = sys.prefix + "/share/shoebot/locale" SEARCH_BACKWARD = -1 SEARCH_FORWARD = 1 locale.setlocale(locale.LC_ALL, "") gettext.bindtextdomain(APP, LOCALE_DIR) gettext.textdomain(APP)
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import sys from collections import namedtuple from enum import Enum from cairo import PATH_CLOSE_PATH, PATH_CURVE_TO, PATH_LINE_TO, PATH_MOVE_TO from shoebot.core.backend import cairo, driver, gi from shoebot.util import ShoebotInstallError, _copy_attrs from .basecolor import ColorMixin from .bezier import BezierPath from .grob import Grob try: gi.require_version("Pango", "1.0") gi.require_version("PangoCairo", "1.0") from gi.repository import Pango, PangoCairo except ValueError as no_pango: global Pango, PangoCairo # workaround for readthedocs where Pango is not installed, print(_("Pango not found - typography will not be available."), file=sys.stderr) class FakePango(object): class Weight(Enum): # Weights copied from PangoWeight THIN = 100 ULTRALIGHT = 200 LIGHT = 300
import os from math import radians from pkg_resources import resource_filename, Requirement from shoebot.core.backend import cairo, gi, driver from shoebot.core.events import REDRAW, publish_event from shoebot.sbio.socket_server import SocketServer gi.require_version('Gtk', '3.0') from gi.repository import Gtk pycairo = driver.cairo ICON_FILE = resource_filename(Requirement.parse("shoebot"), "share/pixmaps/shoebot-ide.png") class BackingStore: instance = None def __init__(self, width, height): self.width = width self.height = height self.surface = pycairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) @property def dimensions(self): return self.width, self.height @classmethod
from shoebot.core.backend import cairo, gi, driver from shoebot.data import _copy_attrs import array from StringIO import StringIO import os.path from PIL import Image as PILImage try: gi.require_version('Rsvg', '2.0') from gi.repository import Rsvg except ImportError, ValueError: Rsvg = None from shoebot.data import Grob, ColorMixin CENTER = 'center' CORNER = 'corner' class SurfaceRef(object): ''' Cannot have a weakref to a cairo surface, so wrapper is used ''' def __init__(self, surface): self.surface = surface class Image(Grob, ColorMixin): _surface_cache = {} # Did have a WeakValueDictionary here but this caused a memory leak of images every frame _state_attributes = {'transform', 'pathmode'} # NBX uses transform and transformmode here
import os from math import radians from pkg_resources import resource_filename, Requirement from shoebot.core.backend import cairo, gi, driver from shoebot.core.events import REDRAW, publish_event from shoebot.sbio.socket_server import SocketServer gi.require_version('Gtk', '3.0') from gi.repository import Gtk pycairo = driver.cairo ICON_FILE = resource_filename(Requirement.parse("shoebot"), "share/pixmaps/shoebot-ide.png") class BackingStore: instance = None def __init__(self, width, height): self.width = width self.height = height self.surface = pycairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) @property def dimensions(self): return self.width, self.height @classmethod def get_backingstore(cls, width, height):