Пример #1
0
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
Пример #2
0
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
Пример #3
0
#   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
Пример #4
0
# -*- 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
Пример #5
0
# -*- 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
Пример #6
0
#!/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)
Пример #7
0
#   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
Пример #8
0
#   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
Пример #9
0
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
Пример #10
0
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
Пример #11
0
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):