Пример #1
0
class RotateView(GeneralPlugin):
    @objc.python_method
    def settings(self):
        self.name = "Rotate View"

    @objc.python_method
    def start(self):
        newMenuItem = NSMenuItem(self.name, self.showWindow_)
        Glyphs.menu[WINDOW_MENU].append(newMenuItem)

    ## creates Vanilla Window
    #------------------------

    def showWindow_(self, sender):
        try:
            from vanilla import Group, Slider, TextBox, Window
            self.windowWidth = 300
            self.windowHeight = 240

            self.w = Window((self.windowWidth, self.windowWidth),
                            "Rotate View",
                            minSize=(self.windowWidth, self.windowWidth))
            window = self.w.getNSWindow()
            window.setStyleMask_(window.styleMask()
                                 | NSFullSizeContentViewWindowMask)
            try:  # only available in 10.10
                window.setTitlebarAppearsTransparent_(True)
            except:
                pass
            #window.toolbar = nil;
            window.setMovableByWindowBackground_(True)

            self.w.Preview = RoatatePreview((0, 0, -0, -28))
            self.w.controlBox = Group((0, -28, -0, -0))
            self.w.controlBox.slider = Slider((10, 2, -55, 28),
                                              tickMarkCount=17,
                                              callback=self.sliderCallback,
                                              value=0,
                                              minValue=-360,
                                              maxValue=360)
            self.w.controlBox.textBox = TextBox((-55, -23, -5, -3),
                                                text="0°",
                                                alignment="center")
            self.w.controlBox.slider.getNSSlider().setEnabled_(False)

            self.w.open()
            self.changeGlyph_(None)
            Glyphs.addCallback(
                self.changeGlyph_, UPDATEINTERFACE
            )  #will be called on ever change to the interface
        except:
            print(traceback.format_exc())

    @objc.python_method
    def __del__(self):
        Glyphs.removeCallback(self.changeGlyph_, UPDATEINTERFACE)

    ## slider callback
    #------------------------------

    @objc.python_method
    def sliderCallback(self, sender):
        currentValue = '{:.0f}'.format(sender.get())
        self.w.controlBox.textBox.set(str(currentValue) + "°")
        self.w.Preview._rotationFactor = float(currentValue)
        self.w.Preview.redraw()

    ## on Glyph Change, update the viewer
    #------------------------------

    def changeGlyph_(self, sender):
        self.w.controlBox.slider.getNSSlider().setEnabled_(
            Glyphs.font and Glyphs.font.selectedLayers)
        self.w.Preview.redraw()

    @objc.python_method
    def __file__(self):
        """Please leave this method unchanged"""
        return __file__