예제 #1
0
파일: io.py 프로젝트: MissLitchi/sconcho
def export_scene(canvas, width, height, dpi, exportFileName):
    """ This function exports the scene to a file. """

    # need this to make sure we take away focus from
    # any currently selected legend items
    canvas.clearFocus()

    with HiddenStitchManager(canvas):

        # NOTE: We seem to need the 1px buffer region to avoid
        # the image being cut off
        margin = 10
        theScene = visible_bounding_rect(canvas.items())
        theScene.adjust(-margin, -margin, margin, margin)

        # check if user requested an svg file
        svg = True if QFileInfo(exportFileName).completeSuffix() == "svg" \
                else False

        if svg:
            generator = QSvgGenerator()
            generator.setFileName(exportFileName)
            generator.setSize(QSize(width, height))
            generator.setViewBox(QRect(0, 0, width, height))
            generator.setTitle("sconcho generated SVG image")
            generator.setDescription("this svg image was exported from "
                                     "a sconcho project")
            generator.setResolution(dpi)
        else:
            generator = QImage(width+2*margin, height+2*margin, 
                               QImage.Format_ARGB32_Premultiplied)
            generator.fill(1)

            inchesToMeter = 39.3700787
            generator.setDotsPerMeterX(dpi*inchesToMeter)
            generator.setDotsPerMeterY(dpi*inchesToMeter)


        painter = QPainter(generator)
        painter.setRenderHints(QPainter.SmoothPixmapTransform 
                               | QPainter.HighQualityAntialiasing 
                               | QPainter.TextAntialiasing )
        painter.setBackgroundMode(Qt.TransparentMode )

        canvas.render(painter, QRectF(), theScene )
        painter.end()

        if not svg:
            generator.save(exportFileName)
예제 #2
0
파일: io.py 프로젝트: etrushkin/sconcho
def export_scene(canvas, width, height, dpi, exportFileName):
    """ This function exports the scene to a file. """

    # need this to make sure we take away focus from
    # any currently selected legend items
    canvas.clearFocus()

    with HiddenStitchManager(canvas):

        # NOTE: We seem to need the 1px buffer region to avoid
        # the image being cut off
        margin = 10
        theScene = visible_bounding_rect(canvas.items())
        theScene.adjust(-margin, -margin, margin, margin)

        # check if user requested an svg file
        svg = True if QFileInfo(exportFileName).completeSuffix() == "svg" \
                else False

        if svg:
            generator = QSvgGenerator()
            generator.setFileName(exportFileName)
            generator.setSize(QSize(width, height))
            generator.setViewBox(QRect(0, 0, width, height))
            generator.setTitle("sconcho generated SVG image")
            generator.setDescription("this svg image was exported from "
                                     "a sconcho project")
            generator.setResolution(dpi)
        else:
            generator = QImage(width + 2 * margin, height + 2 * margin,
                               QImage.Format_ARGB32_Premultiplied)
            generator.fill(1)

            inchesToMeter = 39.3700787
            generator.setDotsPerMeterX(dpi * inchesToMeter)
            generator.setDotsPerMeterY(dpi * inchesToMeter)

        painter = QPainter(generator)
        painter.setRenderHints(QPainter.SmoothPixmapTransform
                               | QPainter.HighQualityAntialiasing
                               | QPainter.TextAntialiasing)
        painter.setBackgroundMode(Qt.TransparentMode)

        canvas.render(painter, QRectF(), theScene)
        painter.end()

        if not svg:
            generator.save(exportFileName)
예제 #3
0
파일: artwork.py 프로젝트: korala1968/tago
def create_svg(text, font, rect=None):
    if not rect:
        rect = QRect(0, 0, 200, 200)
    f = tempfile.NamedTemporaryFile()

    generator = QSvgGenerator()
    generator.setFileName(f.name)
    generator.setSize(rect.size())
    generator.setViewBox(rect)
    generator.setTitle("puddletag image")
    generator.setDescription("just to see")

    painter = QPainter()
    painter.begin(generator)
    painter.fillRect(rect, Qt.black)
    painter.setFont(font)
    painter.setPen(Qt.white)
    painter.setBrush(QBrush(Qt.white))
    painter.drawText(rect, Qt.AlignCenter, text)
    painter.end()

    svg = open(f.name).read()
    f.close()
    return svg
예제 #4
0
def create_svg(text, font, rect=None):
    if not rect:
        rect = QRect(0, 0, 200, 200)
    f = tempfile.NamedTemporaryFile()

    generator = QSvgGenerator()
    generator.setFileName(f.name)
    generator.setSize(rect.size())
    generator.setViewBox(rect);
    generator.setTitle("puddletag image")
    generator.setDescription("just to see")

    painter = QPainter()
    painter.begin(generator)
    painter.fillRect(rect, Qt.black)
    painter.setFont(font)
    painter.setPen(Qt.white)
    painter.setBrush(QBrush(Qt.white))
    painter.drawText(rect, Qt.AlignCenter, text)
    painter.end()

    svg = open(f.name).read()
    f.close()
    return svg
예제 #5
0
 def exportToSvg(self):
     size = QSize(self.logo.imageSize, self.logo.imageSize)
     viewport = self.viewportFromSize(QSizeF(size))
     transform = self.viewportTransform(QSizeF(size), viewport)
     fileName = QFileDialog.getSaveFileName(self, "Save logo", "", "SVG files (*.svg)")
     if not fileName or fileName.isEmpty():
         return
     svg = QSvgGenerator()
     svg.setFileName(fileName)
     svg.setTitle("Spark Logo")
     # save settings as description
     settings = self.settingsMap()
     settingsText = "{%s}" % ", ".join(["'%s': %s" % (k, repr(v))
                                        for (k, v) in settings.iteritems()])
     svg.setDescription("This picture was generated to be a Spark logo.\n"
         "The settings used were: %s" % settingsText)
     # crop the logo to its bounding box
     svg.setViewBox(transform.mapRect(viewport))
     svg.setSize(size)
     p = QPainter()
     p.begin(svg)
     p.setTransform(transform)
     self.logo.draw(p)
     p.end()
예제 #6
0
        sys.exit(1)

    stitches_only = "--stitches-only" in sys.argv
    if stitches_only:
        sys.argv.remove("--stitches-only")

    jef_file = sys.argv[1]
    svg_file = sys.argv[2]

    app = QApplication(sys.argv)
    svg = QSvgGenerator()
    svg.setFileName(svg_file)

    if QT_VERSION >= (4, 5, 0):
        svg.setDescription('Original JEF file "' + os.path.split(jef_file)[1] +
                           '" converted '
                           'to ' + os.path.split(svg_file)[1] +
                           ' by jef2svg.py.')

    convertor = Convertor(jef_file, stitches_only)
    rect = convertor.bounding_rect()
    if QT_VERSION >= (4, 5, 0):
        svg.setViewBox(rect)
    svg.setSize(rect.size())

    painter = QPainter()
    painter.begin(svg)
    convertor.show(painter)
    painter.end()

    sys.exit()
예제 #7
0
class NodeViewerLayout(QWidget):
    def __init__(self, *args, **kwargs):
        super(NodeViewerLayout, self).__init__(*args, **kwargs)
        self._node_viewer = NodeViewer()
        self._text_widget = QTextBrowser()
        self._text_widget.setStyleSheet("background-color: grey;")
        self._node_viewer.new_info.connect(self.display_new_info)
        layout = QHBoxLayout(self)
        layout.setSpacing(0)
        layout.setMargin(0)
        layout.addWidget(self._node_viewer, 1000)
        layout.addWidget(self._text_widget, 300)
        self.setLayout(layout)

    def set_node_data(self, graph):
        self._node_viewer.set_node_data(graph)
        self._text_widget.setHtml("""
            <style> body {background:black} </style>
            <p>The <div style='color:red'>quick</div> <strong>brown</strong> fox</p>
            <p>asdfThe <div style='color:red'>quick</div> <strong>brown</strong> fox</p>
            <p>Theasdf <div style='color:red'>quick</div> <strong>brown</strong> fox</p>
            <p>asdfThe <div style='color:red'>quick</div> <strong>brown</strong> fox</p>
            <p>The <div style='color:red'>quick</div> <strong>brown</strong> fox</p>
            <p>The <div style='color:red'>quick</div> <strong>brown</strong> fox</p>
            <p>The <div style='color:red'>quick</div> <strong>brown</strong> fox</p>
            <p>The <div style='color:red'>quick</div> <strong>brown</strong> fox</p>
            <p>The <div style='color:red'>quick</div> <strong>brown</strong> fox</p>
            <p>The <div style='color:red'>quick</div> <strong>brown</strong> fox</p>
            <p>The <div style='color:red'>quick</div> <strong>brown</strong> fox</p>
            """)

    def search_return(self, search):
        self._search = str(search).strip()
        for key, item in self._node_viewer._graph.iter_nodes():
            if self._search.lower() in item.label().lower():
                item.ui().set_state('consider_selection')
                self._node_viewer.considered_selection.append(item.ui())
            elif item.ui() in self._node_viewer.considered_selection:
                item.ui().set_state('normal')
                self._node_viewer.considered_selection.remove(item.ui())

    def search_good(self):

        self._node_viewer.scene.clearSelection()

        for item in self._node_viewer.considered_selection:
            if self._search.lower() in item._dag_node.label().lower():
                item.set_state('selected')
                item.setSelected(True)
            else:
                item.set_state('normal')
                item.setSelected(False)

        self._node_viewer._dirty_nodes.union(
            self._node_viewer.considered_selection)

        self._node_viewer._selection_changed()

        self._node_viewer.text.text_entry.disconnect()
        self._node_viewer.text.enter_pressed.disconnect()
        self._node_viewer.text.cancel_pressed.disconnect()
        self._node_viewer.text.hide()
        self._node_viewer.scene.clearFocus()

    def search_bad(self):
        self._node_viewer.scene.clearSelection()

        self._node_viewer._dirty_nodes.union(
            self._node_viewer.considered_selection)

        self._node_viewer._selection_changed()
        self._node_viewer.text.text_entry.disconnect()
        self._node_viewer.text.enter_pressed.disconnect()
        self._node_viewer.text.cancel_pressed.disconnect()
        self._node_viewer.text.hide()
        self._node_viewer.scene.clearFocus()

    def display_new_info(self, text):
        import simplejson
        import pygments.formatters
        from pygments import highlight
        import pygments.lexers
        text = ''
        for item in self._node_viewer.scene.selectedItems():
            json = simplejson.dumps(item.info(), indent=2 * ' ')
            text += '\n' + highlight(json, pygments.lexers.JsonLexer(),
                                     pygments.formatters.HtmlFormatter())
        self._text_widget.setHtml(text)

    def key_action_toggle_fullscreen(self):
        if self.windowState() == Qt.WindowFullScreen:
            self.showNormal()
        else:
            self.showFullScreen()

    def key_action_toggle_info(self):
        if self._text_widget.isVisible():
            self._text_widget.hide()
        else:
            self._text_widget.show()

    def key_action_search(self):
        self._node_viewer.text.show()
        self._node_viewer.text.sync_pos()
        self._node_viewer.scene.setFocusItem(self._node_viewer.text)

        self._node_viewer.text.text_entry.connect(self.search_return)
        self._node_viewer.text.enter_pressed.connect(self.search_good)
        self._node_viewer.text.cancel_pressed.connect(self.search_bad)

    def key_action_rename(self):
        print 'rename'

    def key_action_reshape(self):
        print 'reshape'

    def key_action_save(self):
        self.gen = QSvgGenerator()
        self.gen.setFileName('/var/tmp/test.svg')
        self.gen.setSize(QSize(2000, 2000))
        self.gen.setViewBox(QRect(0, 0, 2000, 2000))
        self.gen.setTitle("Hello World")
        self.gen.setDescription("Hello Description")
        self.gen_painter = QPainter()
        self.gen_painter.begin(self.gen)
        self._node_viewer.scene.render(self.gen_painter)
        self.gen_painter.end()

    def key_action_test(self):
        print 'asdf'

    def key_action_quit(self):
        QApplication.quit()

    def keyPressEvent(self, event):

        key = event.key()
        modifiers = event.modifiers()
        shift = modifiers == Qt.ShiftModifier
        ctrl = modifiers == Qt.ControlModifier
        alt = modifiers == Qt.AltModifier

        if key == Qt.Key_F and not shift:
            self._node_viewer.key_action_focus()
        if key == Qt.Key_F and shift:
            self.key_action_toggle_fullscreen()
        elif key == Qt.Key_U:
            self._node_viewer.key_action_ungroup()
        elif key == Qt.Key_G:
            self._node_viewer.key_action_group()
        elif key == Qt.Key_Q:
            self.key_action_quit()
        elif key == Qt.Key_I:
            self.key_action_toggle_info()
        elif key == Qt.Key_Slash:
            self.key_action_search()
        elif key == Qt.Key_R and not shift:
            self.key_action_rename()
        elif key == Qt.Key_R and shift:
            self.key_action_reshape()
        elif key == Qt.Key_I:
            self.key_action_toggle_info()
        elif key == Qt.Key_S:
            self.key_action_save()
        elif alt and ctrl:
            self.key_action_test()