diff -aur lovesnow-deepin-scrot-46375e8/src/mainscrot.py lovesnow-deepin-scrot-46375e8.edited/src/mainscrot.py
--- lovesnow-deepin-scrot-46375e8/src/mainscrot.py 2012-01-28 18:57:41.000000000 -0800
+++ lovesnow-deepin-scrot-46375e8.edited/src/mainscrot.py 2012-06-04 13:56:52.042071266 -0700
@@ -47,7 +47,7 @@
class MainScrot:
'''Main scrot.'''
-
+
def __init__(self):
'''Init Main scrot.'''
@@ -56,37 +56,37 @@
self.width = self.height = 0
self.x = self.y = self.rectWidth = self.rectHeight = 0
self.buttonToggle = None
-
- self.frameColor = "#00AEFF"# "#FFFF0"
+
+ self.frameColor = "#00AEFF"# "#FFFF0"
self.frameLineWidth = 2
self.dragPosition = None
self.dragStartX = self.dragStartY = self.dragStartOffsetX = self.drawStartOffsetY = 0
self.dragPointRadius = 4
-
+
self.dragFlag = False
self.showToolbarFlag = False
- self.showColorbarFlag = False
+ self.showColorbarFlag = False
self.showTextWindowFlag = False
self.textDragOffsetX = self.textDragOffsetY = 0
self.saveFiletype = 'png'
-
+
self.toolbarOffsetX = 10
self.toolbarOffsetY = 10
#self.toolbarHeight = 50
-
+
self.actionSize = 2
self.actionColor = "#FF0000"
self.fontName = "Sans 10"
-
-
- # default window
+
+
+ # default window
self.scrotWindowInfo = getScrotWindowInfo()
self.windowFlag = True
# keybinding map
self.keyBindings = {}
-
+
# Init action list.
self.currentAction = None
self.actionList = []
@@ -97,16 +97,16 @@
self.textModifyFlag = False
self.drawTextLayoutFlag = False
-
+
# Get desktop background.
- self.desktopBackground = self.getDesktopSnapshot()
-
+ self.desktopBackground = self.getDesktopSnapshot()
+
# Init window.
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.fullscreen()
self.window.set_icon_from_file("../theme/logo/deepin-scrot.ico")
self.window.set_keep_above(True)
-
+
# Init event handle.
self.window.add_events(gtk.gdk.KEY_RELEASE_MASK)
self.window.add_events(gtk.gdk.POINTER_MOTION_MASK)
@@ -116,34 +116,34 @@
self.window.connect("expose-event", lambda w, e: self.getCurrentCoord(w))
self.window.connect("expose-event", self.redraw)
self.window.connect("button-press-event", self.buttonPress)
-
+
self.window.connect("button-press-event", self.doubleClickRect)
self.window.connect("button-release-event", self.buttonRelease)
self.window.connect("motion-notify-event", self.motionNotify)
self.window.connect("key-press-event", self.keyPress)
-
+
# Register key binding.
self.registerKeyBinding("Escape", lambda : self.destroy(self.window))
self.registerKeyBinding("C-s", self.saveSnapshotToFile)
self.registerKeyBinding("Return", self.saveSnapshot)
self.registerKeyBinding("C-z", self.undo)
-
+
# Init toolbar window.
self.initToolbar()
-
+
# Init text window.
self.initTextWindow()
-
+
# Init color window.
self.initColorWindow()
-
-
+
+
# Show.
self.window.show_all()
-
+
gtk.main()
-
-
+
+
def initColorWindow(self):
''' init ColorWindow'''
paddingX = 5
@@ -151,12 +151,12 @@
iconWidth = iconHeight = 28
self.colorNum = 9
self.iconIndex = 2
-
+
self.colorbarWindow = gtk.Window(gtk.WINDOW_POPUP)
self.colorbarWindow.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
self.colorbarWindow.set_keep_above(True)
self.colorbarWindow.set_transient_for(self.window)
-
+
self.colorbarWindow.set_decorated(False)
self.colorbarWindow.set_resizable(False)
self.colorbarWindow.set_default_size(100, 24)
@@ -178,8 +178,8 @@
self.colorbarWindow.connect("size-allocate", lambda w, a: updateShape(w, a, 2))
self.colorbarWindow.connect('expose-event', lambda w,e: exposeBackground(w, e, appTheme.getDynamicPixbuf("color_bg.png")))
-
-
+
+
self.smallSizeButton = self.createSizeButton('small', 2)
self.smallSizeButton.connect('button-press-event', lambda w, e: self.setIconIndex(2))
@@ -189,26 +189,26 @@
self.bigSizeButton = self.createSizeButton('big', 5)
self.bigSizeButton.connect('button-press-event', lambda w, e: self.setIconIndex(5))
-
+
self.sizeAlign = gtk.Alignment()
self.sizeAlign.set(0.5,0.5,0,0)
self.sizeAlign.set_padding(2, 1, 0, 0)
self.sizeAlign.add(self.sizeBox)
self.dynamicBox.pack_start(self.sizeAlign)
self.colorbarBox.pack_start(self.dynamicBox)
-
+
self.fontLabel = gtk.Label("Sans 10")
self.fontEvent = gtk.EventBox()
self.fontEvent.add(self.fontLabel)
self.fontEvent.set_visible_window(False)
- self.fontEvent.connect("button-press-event", lambda w, e: self.openFontDialog())
+ self.fontEvent.connect("button-press-event", lambda w, e: self.openFontDialog())
setClickableCursor(self.fontEvent)
self.fontEvent.set_size_request(100, -1)
separatorLabel = gtk.Label()
drawSeparator(separatorLabel, 'sep')
self.colorbarBox.pack_start(separatorLabel)
-
+
self.colorBox = gtk.EventBox()
self.colorbarBox.pack_start(self.colorBox)
@@ -219,9 +219,9 @@
self.colorBox.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#FF0000"))
self.colorBox.connect('expose-event', lambda w, e:self.setColorboxBorder(w))
self.colorBox.connect('button-press-event', self.colorSetEvent)
-
-
-
+
+
+
self.vbox = gtk.VBox(False, 2)
self.aboveHbox = gtk.HBox(False, 2)
@@ -289,14 +289,14 @@
pinkButton = self.createColorButton('pink', False)
pinkButton.connect('button-press-event', lambda w,e: self.setButtonColor('pink'))
-
+
wathetButton = self.createColorButton('wathet', False)
wathetButton.connect('button-press-event', lambda w,e: self.setButtonColor('wathet'))
self.vbox.pack_start(self.belowHbox)
self.colorbarBox.pack_start(self.vbox)
-
+
def openFontDialog(self):
'''open font dialog.'''
self.fontDialog = gtk.FontSelectionDialog("font select")
@@ -311,13 +311,13 @@
if response == gtk.RESPONSE_OK:
self.fontName = self.fontDialog.get_font_name()
self.fontLabel.set_label(self.fontDialog.get_font_name())
-
+
self.adjustToolbar()
self.showToolbar()
self.showColorbar()
self.fontDialog.destroy()
-
-
+
+
def colorSetEvent(self, widget, event):
'''colorBox button_press event'''
self.colorDialog = gtk.ColorSelectionDialog('Select color')
@@ -340,10 +340,10 @@
self.showToolbar()
self.showColorbar()
self.colorDialog.destroy()
-
+
def setColorboxBorder(self, widget):
'''set colorBox border '''
- (x, y, width, height, depth) = widget.window.get_geometry()
+ (x, y, width, height, depth) = widget.window.get_geometry()
cr = widget.window.cairo_create()
cr.set_line_width(2)
cr.rectangle(0,0,width, height)
@@ -353,13 +353,7 @@
cr.set_line_width(1)
cr.set_source_rgb(*colorHexToCairo("#FFFFFF"))
cr.stroke()
-
-
-
-
-
-
def initToolbar(self):
'''Init toolbar.'''
# Init window.
@@ -381,7 +375,7 @@
self.toolbarWindow.set_size_request(
self.toolbarIconWidth * self.toolbarIconNum + self.toolbarPaddingX * 2,
self.toolbarIconHeight + self.toolbarPaddingY * 2)
-
+
# Add action button.
self.toolBox = gtk.HBox(False, 2)
self.toolAlign = gtk.Alignment()
@@ -389,25 +383,25 @@
self.toolAlign.set_padding(self.toolbarPaddingY + 2, self.toolbarPaddingY, self.toolbarPaddingX, self.toolbarPaddingX)
self.toolAlign.add(self.toolBox)
self.toolbarWindow.add(self.toolAlign)
-
+
self.actionRectangleButton = self.createActionButton("rect", __("Tip draw rectangle"))
self.actionRectangleButton.connect("button-press-event", lambda w, e: self.setOtherInactive(w))
self.actionRectangleButton.connect('toggled', lambda w: self.buttonToggled(w))
self.actionRectangleButton.connect("button-release-event", lambda w, e: self.toggleReleaseEvent())
-
-
+
+
self.actionEllipseButton = self.createActionButton("ellipse", __("Tip draw ellipse"))
self.actionEllipseButton.connect("button-press-event", lambda w, e: self.setOtherInactive(w))
self.actionEllipseButton.connect('toggled', lambda w: self.buttonToggled(w))
self.actionEllipseButton.connect("button-release-event", lambda w, e: self.toggleReleaseEvent())
-
+
self.actionArrowButton = self.createActionButton("arrow", __("Tip draw arrow"))
self.actionArrowButton.connect("button-press-event", lambda w, e: self.setOtherInactive(w))
self.actionArrowButton.connect('toggled', lambda w: self.buttonToggled(w))
self.actionArrowButton.connect("button-release-event", lambda w, e: self.toggleReleaseEvent())
-
-
+
+
self.actionLineButton = self.createActionButton("line", __("Tip draw line"))
self.actionLineButton.connect("button-press-event", lambda w, e: self.setOtherInactive(w))
self.actionLineButton.connect('toggled', lambda w: self.buttonToggled(w))
@@ -423,11 +417,11 @@
self.actionUndoButton = self.createOtherButton("undo", __("Tip undo"))
self.actionUndoButton.connect("button-press-event", lambda w, e: self.undo())
-
-
+
+
self.actionSaveButton = self.createOtherButton("save", __("Tip save"))
self.actionSaveButton.connect("button-press-event", lambda w, e: self.saveSnapshotToFile())
-
+
separatorLabel = gtk.Button()
drawSeparator(separatorLabel, 'sep')
self.toolBox.pack_start(separatorLabel)
@@ -437,44 +431,44 @@
self.actionFinishButton = self.createOtherButton("finish",__("Tip finish"))
self.actionFinishButton.connect("button-press-event", lambda w, e: self.saveSnapshot())
-
-
+
+
def setOtherInactive(self, button):
buttonList = [self.actionRectangleButton, self.actionEllipseButton, self.actionArrowButton, self.actionLineButton,
self.actionTextButton]
-
+
for eachButton in buttonList:
if eachButton == button:
continue
eachButton.set_active(False)
-
+
def setAllInactive(self):
buttonList = [self.actionRectangleButton, self.actionEllipseButton, self.actionArrowButton, self.actionLineButton,
self.actionTextButton]
-
+
for eachButton in buttonList:
eachButton.set_active(False)
-
+
def isHaveOneToggled(self):
buttonList = [self.actionRectangleButton, self.actionEllipseButton, self.actionArrowButton, self.actionLineButton,
self.actionTextButton]
-
+
for eachButton in buttonList:
if eachButton.get_active():
return True
return False
-
+
def toggleReleaseEvent(self):
buttonList = [self.actionRectangleButton, self.actionEllipseButton, self.actionArrowButton, self.actionLineButton,
self.actionTextButton]
self.isToggled = False
-
+
for eachButton in buttonList:
if eachButton.get_active():
self.isToggled = True
-
-
-
+
+
+
def buttonToggled(self, widget):
'''the button toggled'''
if widget.get_active():
@@ -488,7 +482,7 @@
self.setActionType(ACTION_LINE)
elif widget == self.actionTextButton:
self.setActionType(ACTION_TEXT)
-
+
self.showColorbar()
else:
@@ -497,19 +491,19 @@
self.setActionType(ACTION_SELECT)
elif self.actionList and self.isToggled or self.textActionList:
self.setActionType(None)
-
-
+
+
def setIconIndex(self, index):
'''Set icon index.'''
self.iconIndex = index
self.actionSize = index
self.colorbarWindow.queue_draw()
-
-
+
+
def getIconIndex(self):
'''Get icon index.'''
return self.iconIndex
-
+
def initTextWindow(self):
'''Init text window.'''
# Init window.
@@ -528,37 +522,37 @@
self.textAlign.set(0.5, 0.5, 0, 0)
self.textAlign.set_padding(10, 10, 10, 10)
self.textVbox = gtk.VBox()
-
+
scrollWindow = gtk.ScrolledWindow()
scrollWindow.set_shadow_type(gtk.SHADOW_ETCHED_IN)
- scrollWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ scrollWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
self.textView = gtk.TextView()
textBuffer = self.textView.get_buffer()
self.textView.connect("expose-event", self.exposeTextViewTag)
-
+
self.textTag = textBuffer.create_tag("first",
foreground_gdk=gtk.gdk.color_parse(self.actionColor),
font=self.fontName)
textBuffer.apply_tag(self.textTag, textBuffer.get_start_iter(), textBuffer.get_end_iter())
-
+
self.textView.set_cursor_visible(True)
self.textView.set_wrap_mode(gtk.WRAP_WORD)
self.textView.set_size_request(300, 60)
-
+
#textLabel = gtk.Label("按Enter可保存,按Shift+Enter可输入多行内容")
-
+
scrollWindow.add(self.textView)
self.textVbox.pack_start(scrollWindow)
#self.textVbox.pack_start(textLabel)
self.textAlign.add(self.textVbox)
self.textWindow.add(self.textAlign)
-
+
self.textWindow.set_focus(self.textView)
-
+
def exposeTextViewTag(self, widget, event):
''' expose of textView'''
textBuffer = widget.get_buffer()
@@ -586,73 +580,73 @@
# self.y + self.rectHeight - ey - offset,
# -1, 10, 10, 10
# )
-
+
# self.textWindow.grab_focus()
-
+
def hideTextWindow(self):
'''Hide text window.'''
self.showTextWindowFlag = False
self.textView.get_buffer().set_text("")
self.textWindow.hide_all()
-
-
+
+
def getInputText(self):
'''Get input text.'''
textBuffer = self.textView.get_buffer()
return (textBuffer.get_text(textBuffer.get_start_iter(), textBuffer.get_end_iter())).rstrip(" ")
-
+
def setActionType(self, aType):
'''Set action. type'''
- self.action = aType
+ self.action = aType
self.currentAction = None
-
+
def createActionButton(self, iconName, helpText):
'''Create action button.'''
#actionButton = gtk.Button()
actionButton = gtk.ToggleButton()
drawSimpleButton(actionButton, iconName, helpText)
self.toolBox.pack_start(actionButton)
-
+
return actionButton
-
+
def createOtherButton(self, iconName, helpText):
''' no toggle button'''
Button = gtk.Button()
drawSimpleButton(Button, iconName, helpText)
self.toolBox.pack_start(Button)
return Button
-
+
def createSizeButton(self, iconName, index):
''' size button'''
Button = gtk.Button()
drawSizeButton(Button, iconName, index, self.getIconIndex)
self.sizeBox.pack_start(Button)
return Button
-
+
def createColorButton(self, iconName, above = True):
button = gtk.Button()
drawColorButton(button, iconName)
-
+
if above:
self.aboveHbox.pack_start(button)
else:
self.belowHbox.pack_start(button)
return button
-
+
def setButtonColor(self, colorName):
modifyBackground(self.colorBox, self.colorMap[colorName])
self.actionColor = self.colorMap[colorName]
-
+
def showToolbar(self):
'''Show toolbar.'''
self.showToolbarFlag = True
self.toolbarWindow.show_all()
-
+
def hideToolbar(self):
'''Hide toolbar.'''
self.showToolbarFlag = False
self.toolbarWindow.hide_all()
-
+
def showColorbar(self):
'''show colorbar '''
if self.action == ACTION_TEXT:
@@ -664,49 +658,49 @@
self.showColorbarFlag = True
self.adjustColorbar()
self.colorbarWindow.show_all()
-
-
-
+
+
+
def hideColorbar(self):
'''hide colorbar'''
self.showColorbarFlag = False
self.colorbarWindow.hide_all()
-
-
+
+
def adjustToolbar(self):
'''Adjust toolbar position.'''
(x, y, self.toolbarWidth, self.toolbarHeight, depth) = self.toolbarWindow.window.get_geometry()
colorbarHeight = 32
-
-
+
+
self.toolbarX = (self.x + self.rectWidth - self.toolbarWidth, self.toolbarOffsetX)[self.x + self.rectWidth - self.toolbarWidth < self.toolbarOffsetX]
-
+
if self.y + self.rectHeight + self.toolbarOffsetY + self.toolbarHeight + colorbarHeight + 5 < self.height:
self.toolbarY = self.y + self.rectHeight + self.toolbarOffsetY
elif self.y - self.toolbarOffsetY - self.toolbarHeight -colorbarHeight - 5 > 0:
self.toolbarY = self.y - self.toolbarOffsetY - self.toolbarHeight
else:
self.toolbarY = self.y + self.toolbarOffsetY
-
-
+
+
self.toolbarWindow.move(int(self.toolbarX), int(self.toolbarY))
-
+
def adjustColorbar(self):
'''Adjust Colorbar position '''
if self.toolbarY < self.y:
colorbarY = self.toolbarY - self.toolbarHeight - 8
else:
colorbarY = self.toolbarY + self.toolbarHeight + 5
-
+
colorbarX = self.toolbarX
-
+
self.colorbarWindow.move(int(colorbarX), int(colorbarY))
-
+
def getEventCoord(self, event):
'''Get event coord.'''
(rx, ry) = event.get_root_coords()
return (int(rx), int(ry))
-
+
def buttonPress(self, widget, event):
'''Button press.'''
self.dragFlag = True
@@ -714,17 +708,17 @@
# print "buttonPress: %s" % (str(event.get_root_coords()))
if self.action == ACTION_WINDOW:
self.windowFlag = False
-
+
elif self.action == ACTION_INIT:
(self.x, self.y) = self.getEventCoord(event)
-
+
elif self.action == ACTION_SELECT:
# Init drag position.
self.dragPosition = self.getPosition(event)
-
+
# Set cursor.
self.setCursor(self.dragPosition)
-
+
# Get drag coord and offset.
(self.dragStartX, self.dragStartY) = self.getEventCoord(event)
self.dragStartOffsetX = self.dragStartX - self.x
@@ -750,7 +744,7 @@
self.currentAction = LineAction(ACTION_LINE, self.actionSize, self.actionColor)
self.currentAction.startDraw(self.getEventCoord(event))
elif self.action == ACTION_TEXT:
-
+
if self.textWindow.get_visible():
content = self.getInputText()
if content != "":
@@ -764,7 +758,7 @@
self.actionList.append(textAction)
self.hideTextWindow()
self.setAllInactive()
-
+
self.window.queue_draw()
else:
self.hideTextWindow()
@@ -772,40 +766,40 @@
else:
self.showTextWindow(self.getEventCoord(event))
-
+
if self.action in [ACTION_RECTANGLE, ACTION_ELLIPSE, ACTION_ARROW, ACTION_LINE] and self.showToolbarFlag and self.y < self.toolbarY < self.y + self.rectHeight:
self.hideToolbar()
self.hideColorbar()
-
+
if self.currentTextAction and self.action == None:
currentX, currentY = self.getEventCoord(event)
drawTextX,drawTextY = self.currentTextAction.getLayoutInfo()[:2]
self.textDragOffsetX = currentX - drawTextX
self.testDragOffsetY = currentY - drawTextY
- self.textDragFlag = True
-
-
+ self.textDragFlag = True
+
+
def motionNotify(self, widget, event):
'''Motion notify.'''
if self.dragFlag:
# print "motionNotify: %s" % (str(event.get_root_coords()))
(ex, ey) = self.getEventCoord(event)
-
-
- if self.action == ACTION_WINDOW and not self.windowFlag:
-
+
+
+ if self.action == ACTION_WINDOW and not self.windowFlag:
+
self.action = ACTION_INIT
(self.x, self.y) = self.getEventCoord(event)
self.window.queue_draw()
-
-
+
+
elif self.action == ACTION_INIT:
(self.rectWidth, self.rectHeight) = (ex - self.x, ey - self.y)
self.window.queue_draw()
elif self.action == ACTION_SELECT:
-
+
if self.dragPosition == DRAG_INSIDE:
self.x = min(max(ex - self.dragStartOffsetX, 0), self.width - self.rectWidth)
self.y = min(max(ey - self.dragStartOffsetY, 0), self.height - self.rectHeight)
@@ -828,43 +822,43 @@
self.dragFrameLeft(ex, ey)
elif self.dragPosition == DRAG_BOTTOM_RIGHT_CORNER:
self.dragFrameBottom(ex, ey)
- self.dragFrameRight(ex, ey)
+ self.dragFrameRight(ex, ey)
self.window.queue_draw()
-
+
elif self.action == ACTION_RECTANGLE:
self.currentAction.drawing((ex, ey), (self.x, self.y, self.rectWidth, self.rectHeight))
-
+
self.window.queue_draw()
elif self.action == ACTION_ELLIPSE:
self.currentAction.drawing((ex, ey), (self.x, self.y, self.rectWidth, self.rectHeight))
-
+
self.window.queue_draw()
elif self.action == ACTION_ARROW:
self.currentAction.drawing((ex, ey), (self.x, self.y, self.rectWidth, self.rectHeight))
-
+
self.window.queue_draw()
elif self.action == ACTION_LINE:
self.currentAction.drawing((ex, ey), (self.x, self.y, self.rectWidth, self.rectHeight))
-
+
self.window.queue_draw()
else:
if self.action == ACTION_SELECT:
self.setCursor(self.getPosition(event))
-
+
elif self.action == ACTION_WINDOW:
setPixbufCursor(self.window, "start_cursor.png")
-
+
elif self.action in (ACTION_RECTANGLE, ACTION_ELLIPSE):
setCursor(self.window, gtk.gdk.TCROSS)
-
+
elif self.action == ACTION_LINE:
setCursor(self.window, gtk.gdk.PENCIL)
elif self.action == ACTION_TEXT:
setCursor(self.window, gtk.gdk.XTERM)
else:
self.window.window.set_cursor(None)
-
-
+
+
if self.windowFlag:
self.hideToolbar()
(wx, wy) = self.getEventCoord(event)
@@ -874,28 +868,28 @@
self.y = eachCoord.y
self.rectWidth = eachCoord.width
self.rectHeight = eachCoord.height
-
+
self.window.queue_draw()
-
-
-
+
+
+
if self.action == None:
- (tx, ty) = self.getEventCoord(event)
+ (tx, ty) = self.getEventCoord(event)
+
-
if self.textDragFlag:
self.currentTextAction.updateCoord(tx - self.textDragOffsetX, ty - self.textDragOffsetY - 10)
self.drawTextLayoutFlag = True
self.window.queue_draw()
-
+
else:
for eachAction, info in self.textActionInfo.items():
if info[0] < tx < info[0]+info[2] and info[1] < ty < info[1]+info[3]:
self.currentTextAction = eachAction
-
+
if self.currentTextAction:
drawTextX, drawTextY, drawTextWidth, drawTextHeight = self.currentTextAction.getLayoutInfo()
if drawTextX < tx < drawTextX + drawTextWidth and drawTextY < ty < drawTextY + drawTextHeight:
@@ -903,11 +897,11 @@
setCursor(self.window, gtk.gdk.FLEUR)
self.window.queue_draw()
else:
- self.drawTextLayoutFlag = False
+ self.drawTextLayoutFlag = False
self.currentTextAction = None
self.window.window.set_cursor(None)
self.window.queue_draw()
-
+
def buttonRelease(self, widget, event):
'''Button release.'''
self.textDragFlag = False
@@ -920,27 +914,27 @@
self.window.queue_draw()
else:
self.windowFlag = True
-
-
+
+
elif self.action == ACTION_INIT:
self.action = ACTION_SELECT
(ex, ey) = self.getEventCoord(event)
-
+
# Adjust value when button release.
if ex > self.x:
self.rectWidth = ex - self.x
else:
self.rectWidth = fabs(ex - self.x)
self.x = ex
-
+
if ey > self.y:
self.rectHeight = ey - self.y
else:
self.rectHeight = fabs(ey - self.y)
self.y = ey
-
+
self.window.queue_draw()
-
+
self.showToolbar()
elif self.action == ACTION_SELECT:
pass
@@ -948,27 +942,27 @@
self.currentAction.endDraw(self.getEventCoord(event), (self.x, self.y, self.rectWidth, self.rectHeight))
self.actionList.append(self.currentAction)
self.currentAction = None
-
+
self.window.queue_draw()
elif self.action == ACTION_ELLIPSE:
self.currentAction.endDraw(self.getEventCoord(event), (self.x, self.y, self.rectWidth, self.rectHeight))
self.actionList.append(self.currentAction)
self.currentAction = None
-
+
self.window.queue_draw()
elif self.action == ACTION_ARROW:
self.currentAction.endDraw(self.getEventCoord(event), (self.x, self.y, self.rectWidth, self.rectHeight))
self.actionList.append(self.currentAction)
self.currentAction = None
-
+
self.window.queue_draw()
elif self.action == ACTION_LINE:
self.currentAction.endDraw(self.getEventCoord(event), (self.x, self.y, self.rectWidth, self.rectHeight))
self.actionList.append(self.currentAction)
self.currentAction = None
-
+
self.window.queue_draw()
-
+
if self.action in [ACTION_RECTANGLE, ACTION_ELLIPSE, ACTION_ARROW, ACTION_LINE, ACTION_TEXT] and not self.showToolbarFlag and self.y < self.toolbarY < self.y + self.rectHeight:
self.adjustToolbar()
self.showToolbar()
@@ -985,15 +979,15 @@
self.fontName = self.currentTextAction.getFontname()
modifyBackground(self.colorBox, self.actionColor)
self.fontLabel.set_label(self.fontName)
-
+
self.actionTextButton.set_active(True)
self.showTextWindow(self.getEventCoord(event))
self.textModifyFlag = True
-
+
if isDoubleClick(event) and self.action == ACTION_SELECT and self.x < ex < self.x + self.rectWidth and self.y < ey < self.y + self.rectHeight:
self.saveSnapshot()
self.buttonRelease(widget, event)
-
+
def registerKeyBinding(self, keyEventName, callback):
'''Register a keybinding'''
@@ -1003,105 +997,110 @@
'''Unregister a keybinding'''
if self.keyBindings.has_key(keyEventName):
del self.keyBindings[keyEventName]
-
+
def keyPress(self, widget, event):
'''process key press event'''
keyEventName = getKeyEventName(event)
if self.keyBindings.has_key(keyEventName):
self.keyBindings[keyEventName]()
+ def getSnapBuf(self):
+ # Init cairo.
+ pixbuf = None
+ cr = self.window.window.cairo_create()
+
+ # Draw desktop background.
+ self.drawDesktopBackground(cr)
+
+ # Draw action list.
+ for action in self.actionList:
+ action.expose(cr)
+ # Draw text Action list.
+ for eachTextAction in self.textActionList:
+ eachTextAction.expose(cr)
+
+ # Get snapshot.
+ pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, int(self.rectWidth), int(self.rectHeight))
+ pixbuf.get_from_drawable(
+ self.window.get_window(), self.window.get_window().get_colormap(),
+ self.x, self.y,
+ 0, 0,
+ int(self.rectWidth), int(self.rectHeight))
+
+ return pixbuf
+
def saveSnapshotToFile(self):
'''Save file to file.'''
+ pixbuf = self.getSnapBuf()
dialog = gtk.FileChooserDialog(
"Save..",
self.window,
gtk.FILE_CHOOSER_ACTION_SAVE,
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT))
-
+
dialog.set_action(gtk.FILE_CHOOSER_ACTION_SAVE)
dialog.set_default_response(gtk.RESPONSE_ACCEPT)
dialog.set_position(gtk.WIN_POS_MOUSE)
dialog.set_local_only(True)
dialog.set_current_folder(os.environ['HOME'])
dialog.set_current_name("%s%s.%s" % (DEFAULT_FILENAME, getFormatTime(), self.saveFiletype))
-
+
optionMenu = gtk.OptionMenu()
optionMenu.set_size_request(155, -1)
menu = gtk.Menu()
menu.set_size_request(155, -1)
-
+
pngItem = makeMenuItem('PNG (*.png)',
lambda item, data: self.setSaveFiletype(dialog, 'png'))
-
+
jpgItem = makeMenuItem('JPEG (*.jpeg)',
lambda item, data: self.setSaveFiletype(dialog, 'jpeg'))
-
+
bmpItem = makeMenuItem('BMP (*.bmp)',
lambda item, data: self.setSaveFiletype(dialog, 'bmp'))
-
-
-
-
+
+
menu.append(pngItem)
menu.append(jpgItem)
menu.append(bmpItem)
optionMenu.set_menu(menu)
-
-
+
+
hbox = gtk.HBox()
hbox.pack_end(optionMenu, False, False)
dialog.vbox.pack_start(hbox, False, False)
- hbox.show_all()
-
-
+ hbox.show_all()
+
+
self.hideToolbar()
if self.showColorbarFlag:
self.hideColorbar()
-
+
response = dialog.run()
if response == gtk.RESPONSE_ACCEPT:
filename = dialog.get_filename()
- self.saveSnapshot(filename, self.saveFiletype)
+ self.saveSnapshot(pixbuf=pixbuf, filename=filename, filetype=self.saveFiletype)
print "Save snapshot to %s" % (filename)
elif response == gtk.RESPONSE_REJECT:
self.adjustToolbar()
self.showToolbar()
-
+
if self.isHaveOneToggled():
self.showColorbar()
print 'Closed, no files selected'
dialog.destroy()
-
+
def setSaveFiletype(self, dialog, filetype):
''' save filetype '''
dialog.set_current_name("%s%s.%s" % (DEFAULT_FILENAME, getFormatTime(), filetype))
self.saveFiletype = filetype
-
- def saveSnapshot(self, filename=None, filetype='png'):
+
+ def saveSnapshot(self, pixbuf=None, filename=None, filetype='png'):
'''Save snapshot.'''
- # Init cairo.
- cr = self.window.window.cairo_create()
-
- # Draw desktop background.
- self.drawDesktopBackground(cr)
-
- # Draw action list.
- for action in self.actionList:
- action.expose(cr)
- # Draw text Action list.
- for eachTextAction in self.textActionList:
- eachTextAction.expose(cr)
-
- # Get snapshot.
- pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, int(self.rectWidth), int(self.rectHeight))
- pixbuf.get_from_drawable(
- self.window.get_window(), self.window.get_window().get_colormap(),
- self.x, self.y,
- 0, 0,
- int(self.rectWidth), int(self.rectHeight))
-
+ if pixbuf is None:
+ pixbuf = self.getSnapBuf()
# Save snapshot.
if filename == None:
# Save snapshot to clipboard if filename is None.
@@ -1113,40 +1112,38 @@
# Otherwise save to local file.
pixbuf.save(filename, filetype)
tipContent = __("Tip save to file")
-
-
-
+
# Exit
self.window.window.set_cursor(None)
self.destroy(self.window)
-
+
# tipWindow
cmd = ('python', 'tipswindow.py', tipContent)
subprocess.Popen(cmd)
-
+
def redraw(self, widget, event):
'''Redraw.'''
# Init cairo.
cr = widget.window.cairo_create()
-
+
# Draw desktop background.
self.drawDesktopBackground(cr)
-
+
# Draw mask.
self.drawMask(cr)
-
+
# Draw toolbar.
if self.showToolbarFlag:
self.adjustToolbar()
self.adjustColorbar()
-
+
# Draw action list.
for action in self.actionList:
if action != None:
action.expose(cr)
-
+
# Draw Text Action list.
for eachTextAction in self.textActionList:
eachTextAction.expose(cr)
@@ -1155,13 +1152,13 @@
# Draw current action.
if self.currentAction != None:
self.currentAction.expose(cr)
-
+
# draw currentText layout
if self.drawTextLayoutFlag:
drawAlphaRectangle(cr, *self.currentTextAction.getLayoutInfo())
-
-
+
+
#draw magnifier
if self.action == ACTION_WINDOW and self.rectWidth:
drawMagnifier(cr, self.window, self.currentX, self.currentY,
@@ -1177,17 +1174,17 @@
drawRoundTextRectangle(cr, self.x + 5, self.y - 35, 85, 30, 7,'%d x %d' % (fabs(self.rectWidth), fabs(self.rectHeight)), 0.7)
elif self.action in [None, ACTION_SELECT, ACTION_WINDOW, ACTION_INIT]:
drawRoundTextRectangle(cr, self.x + 5 , self.y + 5 , 85, 30, 7,'%d x %d' % (fabs(self.rectWidth), fabs(self.rectHeight)), 0.7)
-
-
+
+
if widget.get_child() != None:
widget.propagate_expose(widget.get_child(), event)
-
+
return True
-
+
def drawDesktopBackground(self, cr):
'''Draw desktop.'''
- drawPixbuf(cr, self.desktopBackground)
-
+ drawPixbuf(cr, self.desktopBackground)
+
def drawMask(self, cr):
'''Draw mask.'''
# Adjust value when create selection area.
@@ -1204,7 +1201,7 @@
else:
y = self.y + self.rectHeight
rectHeight = fabs(self.rectHeight)
-
+
# Draw top.
cr.set_source_rgba(0, 0, 0, 0.5)
cr.rectangle(0, 0, self.width, y)
@@ -1224,68 +1221,68 @@
cr.set_source_rgba(0, 0, 0, 0.5)
cr.rectangle(x + rectWidth, y, self.width - x - rectWidth, rectHeight)
cr.fill()
-
+
def drawFrame(self, cr):
'''Draw frame.'''
cr.set_source_rgb(*colorHexToCairo(self.frameColor))
cr.set_line_width(self.frameLineWidth)
cr.rectangle(self.x, self.y, self.rectWidth, self.rectHeight)
cr.stroke()
-
+
def drawDragPoint(self, cr):
'''Draw drag point.'''
# Draw left top corner.
cr.set_source_rgb(*colorHexToCairo(self.frameColor))
cr.arc(self.x, self.y, self.dragPointRadius, 0, 2 * pi)
cr.fill()
-
+
# Draw right top corner.
cr.set_source_rgb(*colorHexToCairo(self.frameColor))
cr.arc(self.x + self.rectWidth, self.y, self.dragPointRadius, 0, 2 * pi)
cr.fill()
-
+
# Draw left bottom corner.
cr.set_source_rgb(*colorHexToCairo(self.frameColor))
cr.arc(self.x, self.y + self.rectHeight, self.dragPointRadius, 0, 2 * pi)
cr.fill()
-
+
# Draw right bottom corner.
cr.set_source_rgb(*colorHexToCairo(self.frameColor))
cr.arc(self.x + self.rectWidth, self.y + self.rectHeight, self.dragPointRadius, 0, 2 * pi)
cr.fill()
-
+
# Draw top side.
cr.set_source_rgb(*colorHexToCairo(self.frameColor))
cr.arc(self.x + self.rectWidth / 2, self.y, self.dragPointRadius, 0, 2 * pi)
cr.fill()
-
+
# Draw bottom side.
cr.set_source_rgb(*colorHexToCairo(self.frameColor))
cr.arc(self.x + self.rectWidth / 2, self.y + self.rectHeight, self.dragPointRadius, 0, 2 * pi)
cr.fill()
-
+
# Draw left side.
cr.set_source_rgb(*colorHexToCairo(self.frameColor))
cr.arc(self.x, self.y + self.rectHeight / 2, self.dragPointRadius, 0, 2 * pi)
cr.fill()
-
+
# Draw right side.
cr.set_source_rgb(*colorHexToCairo(self.frameColor))
cr.arc(self.x + self.rectWidth, self.y + self.rectHeight / 2, self.dragPointRadius, 0, 2 * pi)
cr.fill()
-
+
def getDesktopSnapshot(self):
'''Get desktop snapshot.'''
- rootWindow = gtk.gdk.get_default_root_window()
- [self.width, self.height] = rootWindow.get_size()
+ rootWindow = gtk.gdk.get_default_root_window()
+ [self.width, self.height] = rootWindow.get_size()
pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, self.width, self.height)
- return pixbuf.get_from_drawable(rootWindow, rootWindow.get_colormap(), 0, 0, 0, 0, self.width, self.height)
-
+ return pixbuf.get_from_drawable(rootWindow, rootWindow.get_colormap(), 0, 0, 0, 0, self.width, self.height)
+
def destroy(self, widget, data=None):
'''Destroy main window.'''
self.window.window.set_cursor(None)
gtk.main_quit()
-
+
def getDragPointCoords(self):
'''Get drag point coords.'''
return (
@@ -1306,16 +1303,16 @@
# Right side.
(self.x + self.rectWidth - self.dragPointRadius, self.y + self.rectHeight / 2 - self.dragPointRadius),
)
-
+
def getPosition(self, event):
'''Get drag position.'''
# Get event position.
(ex, ey) = self.getEventCoord(event)
-
+
# Get drag point coords.
pWidth = pHeight = self.dragPointRadius * 2
((tlX, tlY), (trX, trY), (blX, blY), (brX, brY), (tX, tY), (bX, bY), (lX, lY), (rX, rY)) = self.getDragPointCoords()
-
+
# Calcuate drag position.
if isInRect((ex, ey), (self.x, self.y, self.rectWidth, self.rectHeight)):
return DRAG_INSIDE
@@ -1337,7 +1334,7 @@
return DRAG_RIGHT_SIDE
else:
return DRAG_OUTSIDE
-
+
def setCursor(self, position):
'''Set cursor.'''
if position == DRAG_INSIDE:
@@ -1360,38 +1357,38 @@
setCursor(self.window, gtk.gdk.LEFT_SIDE)
elif position == DRAG_RIGHT_SIDE:
setCursor(self.window, gtk.gdk.RIGHT_SIDE)
-
+
def dragFrameTop(self, ex, ey):
'''Drag frame top.'''
maxY = self.y + self.rectHeight
self.rectHeight = self.rectHeight - min(self.rectHeight, (ey - self.y))
- self.y = min(ey, maxY)
-
+ self.y = min(ey, maxY)
+
def dragFrameBottom(self, ex, ey):
'''Drag frame bottom.'''
self.rectHeight = max(0, ey - self.y)
-
+
def dragFrameLeft(self, ex, ey):
'''Drag frame left.'''
maxX = self.x + self.rectWidth
self.rectWidth = self.rectWidth - min(self.rectWidth, (ex - self.x))
self.x = min(ex, maxX)
-
+
def dragFrameRight(self, ex, ey):
'''Drag frame right.'''
self.rectWidth = max(0, ex - self.x)
-
+
def undo(self):
'''Undo'''
if self.textWindow.get_visible():
self.hideTextWindow()
-
+
if self.actionList:
tempAction = self.actionList.pop()
if tempAction.getActionType() == ACTION_TEXT:
self.textActionList.pop()
del self.textActionInfo[tempAction]
-
+
else:
self.window.window.set_cursor(None)
self.action = ACTION_WINDOW
@@ -1401,10 +1398,10 @@
self.hideToolbar()
if self.showColorbarFlag:
self.setAllInactive()
-
+
self.window.queue_draw()
-
-
+
+
def drawWindowRectangle(self, cr):
'''Draw frame.'''
cr.set_line_width(4.5)
@@ -1413,8 +1410,8 @@
cr.stroke()
def getCurrentCoord(self, widget):
'''get Current Coord '''
- (self.currentX, self.currentY) = widget.window.get_pointer()[:2]
+ (self.currentX, self.currentY) = widget.window.get_pointer()[:2]
+
-
if __name__ == "__main__":
MainScrot()