コード例 #1
0
ファイル: page_edit.py プロジェクト: rzr/paperwork
    def __on_size_allocated_cb(self):
        if not self.__cut_grips is None:
            return
        (a, b, img_w, img_h) = self.imgs['orig'][1].getbbox()
        orig_alloc = self.__original_img_widgets['viewport'].get_allocation()
        (orig_alloc_w, orig_alloc_h) = (orig_alloc.width, orig_alloc.height)
        factor_w = (float(orig_alloc_w) / img_w)
        factor_h = (float(orig_alloc_h) / img_h)
        factor = min(factor_w, factor_h)
        if factor > 1.0:
            factor = 1.0
        target_size = (int(factor * img_w), int(factor * img_h))
        copy = self.imgs['orig'][1].copy()
        self.imgs['resized'] = (factor,
                                copy.resize(target_size, PIL.Image.BILINEAR))
        self.__cut_grips = ImgGripHandler(
            [self.imgs['resized'], self.imgs['orig']],
            self.__original_img_widgets['scrolledwindow'],
            self.__original_img_widgets['eventbox'],
            self.__original_img_widgets['img'])
        self.__cut_grips.visible = False
        self.__cut_grips.connect("grip-moved", self.__on_grip_moved_cb)

        self.__redraw_result()
コード例 #2
0
ファイル: page_edit.py プロジェクト: kryskool/paperwork
    def __on_size_allocated_cb(self):
        if not self.__cut_grips is None:
            return
        (a, b, img_w, img_h) = self.imgs['orig'][1].getbbox()
        orig_alloc = self.__original_img_widgets['viewport'].get_allocation()
        (orig_alloc_w, orig_alloc_h) = (orig_alloc.width, orig_alloc.height)
        factor_w = (float(orig_alloc_w) / img_w)
        factor_h = (float(orig_alloc_h) / img_h)
        factor = min(factor_w, factor_h)
        if factor > 1.0:
            factor = 1.0
        target_size = (int(factor * img_w), int(factor * img_h))
        copy = self.imgs['orig'][1].copy()
        self.imgs['resized'] = (factor, copy.resize(
                    target_size, Image.BILINEAR))
        self.__cut_grips = ImgGripHandler(
            [self.imgs['resized'], self.imgs['orig']],
            self.__original_img_widgets['scrolledwindow'],
            self.__original_img_widgets['eventbox'],
            self.__original_img_widgets['img'])
        self.__cut_grips.visible = False
        self.__cut_grips.connect("grip-moved", self.__on_grip_moved_cb)

        self.__redraw_result()
コード例 #3
0
ファイル: page_edit.py プロジェクト: kryskool/paperwork
class PageEditingDialog(object):
    def __init__(self, main_window, page):
        self.page = page

        widget_tree = load_uifile("pageeditingdialog.glade")

        self.__dialog = widget_tree.get_object("dialogPageEditing")
        self.__dialog.set_transient_for(main_window.window)

        self.__original_img_widgets = {
            'img' : widget_tree.get_object("imageOriginal"),
            'scrolledwindow' : widget_tree.get_object("scrolledwindowOriginal"),
            'eventbox' : widget_tree.get_object("eventboxOriginal"),
            'viewport' : widget_tree.get_object("viewportOriginal")
        }
        self.__result_img_widget = widget_tree.get_object("imageResult")
        self.__buttons = {
            'cutting' : widget_tree.get_object("togglebuttonCutting"),
            'rotate' : {
                'clockwise' : (widget_tree.get_object("buttonRotateClockwise"),
                               90),
                'counter_clockwise' : \
                    (widget_tree.get_object("buttonRotateCounterClockwise"),
                     -90),
            }
        }

        self.__cut_grips = None

        self.__original_img_widgets['viewport'].connect("size-allocate",
            lambda widget, size: GObject.idle_add(self.__on_size_allocated_cb))
        self.__buttons['cutting'].connect("toggled",
            lambda widget: GObject.idle_add(self.__on_cutting_button_toggled_cb))
        self.__buttons['rotate']['clockwise'][0].connect("clicked",
            lambda widget: \
                GObject.idle_add(self.__on_rotate_activated_cb, widget))
        self.__buttons['rotate']['counter_clockwise'][0].connect("clicked",
            lambda widget: \
                GObject.idle_add(self.__on_rotate_activated_cb, widget))

        self.page = page
        self.imgs = {
            'orig' : (1.0, self.page.img)
        }

        self.__changes = []

    def __on_size_allocated_cb(self):
        if not self.__cut_grips is None:
            return
        (a, b, img_w, img_h) = self.imgs['orig'][1].getbbox()
        orig_alloc = self.__original_img_widgets['viewport'].get_allocation()
        (orig_alloc_w, orig_alloc_h) = (orig_alloc.width, orig_alloc.height)
        factor_w = (float(orig_alloc_w) / img_w)
        factor_h = (float(orig_alloc_h) / img_h)
        factor = min(factor_w, factor_h)
        if factor > 1.0:
            factor = 1.0
        target_size = (int(factor * img_w), int(factor * img_h))
        copy = self.imgs['orig'][1].copy()
        self.imgs['resized'] = (factor, copy.resize(
                    target_size, Image.BILINEAR))
        self.__cut_grips = ImgGripHandler(
            [self.imgs['resized'], self.imgs['orig']],
            self.__original_img_widgets['scrolledwindow'],
            self.__original_img_widgets['eventbox'],
            self.__original_img_widgets['img'])
        self.__cut_grips.visible = False
        self.__cut_grips.connect("grip-moved", self.__on_grip_moved_cb)

        self.__redraw_result()

    def __on_cutting_button_toggled_cb(self):
        self.__cut_grips.visible = self.__buttons['cutting'].get_active()
        if not self.__cut_grips.visible:
            PageCuttingAction.remove_from_action_queue(self.__changes)
            self.__redraw_result()
        else:
            self.__on_grip_moved_cb(self.__cut_grips)

    def __on_grip_moved_cb(self, grips):
        cut = self.__cut_grips.get_coords()
        action = PageCuttingAction(cut)
        action.add_to_action_queue(self.__changes)
        self.__redraw_result()

    def __on_rotate_activated_cb(self, widget):
        for (button, angle) in self.__buttons['rotate'].values():
            if button == widget:
                break
        assert(button != None)
        print "Adding action rotation of %d degrees" % angle
        rotation = PageRotationAction(angle)
        rotation.add_to_action_queue(self.__changes)
        self.__redraw_result()

    def __redraw_result(self):
        (scale, img) = self.imgs['resized']
        for action in self.__changes:
            img = action.do(img, scale)
        img = image2pixbuf(img)
        self.__result_img_widget.set_from_pixbuf(img)

    def get_changes(self):
        resp_id = self.__dialog.run()
        self.__dialog.destroy()
        if resp_id == 1:  # cancel
            print "Image editing cancelled by user"
            return []
        return self.__changes
コード例 #4
0
ファイル: page_edit.py プロジェクト: rzr/paperwork
class PageEditingDialog(object):
    def __init__(self, main_window, page):
        self.page = page

        widget_tree = load_uifile("pageeditingdialog.glade")

        self.__dialog = widget_tree.get_object("dialogPageEditing")
        self.__dialog.set_transient_for(main_window.window)

        self.__original_img_widgets = {
            'img': widget_tree.get_object("imageOriginal"),
            'scrolledwindow': widget_tree.get_object("scrolledwindowOriginal"),
            'eventbox': widget_tree.get_object("eventboxOriginal"),
            'viewport': widget_tree.get_object("viewportOriginal")
        }
        self.__result_img_widget = widget_tree.get_object("imageResult")
        self.__buttons = {
            'cutting': widget_tree.get_object("togglebuttonCutting"),
            'rotate': {
                'clockwise': (widget_tree.get_object("buttonRotateClockwise"),
                              90),
                'counter_clockwise':
                (widget_tree.get_object("buttonRotateCounterClockwise"), -90),
            }
        }

        self.__cut_grips = None

        self.__original_img_widgets['viewport'].connect(
            "size-allocate",
            lambda widget, size: GObject.idle_add(self.__on_size_allocated_cb))
        self.__buttons['cutting'].connect(
            "toggled",
            lambda widget: GObject.idle_add(
                self.__on_cutting_button_toggled_cb))
        self.__buttons['rotate']['clockwise'][0].connect(
            "clicked",
            lambda widget:
            GObject.idle_add(self.__on_rotate_activated_cb, widget))
        self.__buttons['rotate']['counter_clockwise'][0].connect(
            "clicked",
            lambda widget:
            GObject.idle_add(self.__on_rotate_activated_cb, widget))

        self.page = page
        self.imgs = {
            'orig': (1.0, self.page.img)
        }

        self.__changes = []

    def __on_size_allocated_cb(self):
        if not self.__cut_grips is None:
            return
        (a, b, img_w, img_h) = self.imgs['orig'][1].getbbox()
        orig_alloc = self.__original_img_widgets['viewport'].get_allocation()
        (orig_alloc_w, orig_alloc_h) = (orig_alloc.width, orig_alloc.height)
        factor_w = (float(orig_alloc_w) / img_w)
        factor_h = (float(orig_alloc_h) / img_h)
        factor = min(factor_w, factor_h)
        if factor > 1.0:
            factor = 1.0
        target_size = (int(factor * img_w), int(factor * img_h))
        copy = self.imgs['orig'][1].copy()
        self.imgs['resized'] = (factor,
                                copy.resize(target_size, PIL.Image.BILINEAR))
        self.__cut_grips = ImgGripHandler(
            [self.imgs['resized'], self.imgs['orig']],
            self.__original_img_widgets['scrolledwindow'],
            self.__original_img_widgets['eventbox'],
            self.__original_img_widgets['img'])
        self.__cut_grips.visible = False
        self.__cut_grips.connect("grip-moved", self.__on_grip_moved_cb)

        self.__redraw_result()

    def __on_cutting_button_toggled_cb(self):
        self.__cut_grips.visible = self.__buttons['cutting'].get_active()
        if not self.__cut_grips.visible:
            PageCuttingAction.remove_from_action_queue(self.__changes)
            self.__redraw_result()
        else:
            self.__on_grip_moved_cb(self.__cut_grips)

    def __on_grip_moved_cb(self, grips):
        cut = self.__cut_grips.get_coords()
        action = PageCuttingAction(cut)
        action.add_to_action_queue(self.__changes)
        self.__redraw_result()

    def __on_rotate_activated_cb(self, widget):
        for (button, angle) in self.__buttons['rotate'].values():
            if button == widget:
                break
        assert(button is not None)
        logger.info("Adding action rotation of %d degrees" % angle)
        rotation = PageRotationAction(angle)
        rotation.add_to_action_queue(self.__changes)
        self.__redraw_result()

    def __redraw_result(self):
        (scale, img) = self.imgs['resized']
        for action in self.__changes:
            img = action.do(img, scale)
        img = image2pixbuf(img)
        self.__result_img_widget.set_from_pixbuf(img)

    def get_changes(self):
        resp_id = self.__dialog.run()
        self.__dialog.destroy()
        if resp_id == 1:  # cancel
            logger.info("Image editing cancelled by user")
            return []
        return self.__changes