#/****************************************************************************** #* qt-recordMyDesktop * #******************************************************************************* #* * #* Copyright (C) 2007, 2008 John Varouhakis * #* * #* * #* This program is free software: you can redistribute it and/or modify * #* it under the terms of the GNU General Public License as published by * #* the Free Software Foundation, either version 3 of the License, or * #* (at your option) any later version. * #* * #* This program is distributed in the hope that it will be useful, * #* but WITHOUT ANY WARRANTY; without even the implied warranty of * #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * #* GNU General Public License for more details. * #* * #* You should have received a copy of the GNU General Public License * #* along with this program. If not, see . * #* * #* * #* For further information contact me at johnvarouhakis@gmail.com * #******************************************************************************/ from PyQt4 import QtGui,QtCore import sys import rmdConfig from rmdFrame import * class QtThumbSelector(QtGui.QLabel): def __init__(self,parent,caller,area_return,hidden,update_interval=500): self.area_return=area_return self.selecting=0 self.realFrame=None self.caller=caller self.hidden=hidden QtGui.QLabel.__init__(self,parent) self.x1=self.y1=-1 self.x2 = self.y2 = -1 #self.root=QtGui.QApplication.desktop().winId() self.root=QtGui.QX11Info().appRootWindow() self.pix=QtGui.QPixmap.grabWindow(self.root) siz=QtGui.QApplication.desktop().screenGeometry() (self.wwidth, self.wheight)=(siz.width(),siz.height()) self.factor=1; twidth=self.wwidth while twidth>320 or self.factor<4: twidth/=2 self.factor*=2 self.setFixedSize(self.wwidth/self.factor,self.wheight/self.factor) self.setSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Preferred) self.timed_id=QtCore.QTimer(None) self.timed_id.connect(self.timed_id,QtCore.SIGNAL("timeout()"), self.update_image) self.timed_id.start(update_interval) self.capPos=0 self.pixt=None self.pixflag=0 self.fragSize=64 def update_image(self): if self.selecting==0 and self.hidden[0]==0: self.pixt=QtGui.QPixmap.grabWindow(self.root,0,self.capPos,self.wwidth,self.fragSize) self.pixflag=1 self.update() def update(self): QtGui.QLabel.update(self) if self.realFrame!=None: if (((self.area_return[0]!=self.realFrame.x or self.area_return[1]!=self.realFrame.y) and self.caller.values[15]==1) or self.area_return[2]-self.area_return[0]!=self.realFrame.w or self.area_return[3]-self.area_return[1]!=self.realFrame.h or self.caller.values[25]): self.realFrame.destroy() self.realFrame=None if self.realFrame==None and self.caller.values[25]==0 : self.__draw_frame__() def paintEvent(self, event): if self.pixt!=None and self.pixflag==1: self.pixflag=0 painter2 = QtGui.QPainter(self.pix) painter2.drawPixmap(0,self.capPos,self.wwidth,self.fragSize,self.pixt) if self.capPosself.wheight: self.capPos=self.wheight-self.fragSize else: self.capPos=0 painter = QtGui.QPainter(self) painter.drawPixmap(0,0,self.wwidth/self.factor,self.wheight/self.factor,self.pix) if self.selecting==1 or self.caller.values[15]==1: if self.x1 >= 0: x = min(self.x1, self.x2) y = min(self.y1, self.y2) w = max(self.x1, self.x2) - x h = max(self.y1, self.y2) - y painter.fillRect(x,y,w,h,QtGui.QBrush(QtCore.Qt.red,QtCore.Qt.CrossPattern)) elif self.area_return[0]>=0 or self.area_return[1]>=0 or self.area_return[2]>=0 or self.area_return[3]>=0: x = max(0, self.area_return[0])/self.factor y = max(0, self.area_return[1])/self.factor w = min(self.wwidth, self.area_return[2])/self.factor - x h = min(self.wheight, self.area_return[3])/self.factor - y painter.fillRect(x,y,w,h,QtGui.QBrush(QtCore.Qt.red,QtCore.Qt.CrossPattern)) def mouseMoveEvent(self, event): if self.x1 >= 0: rect = QtCore.QRect() rect.x = min(self.x1, min(self.x2, event.x() + 1)) rect.width = max(self.x1, max(self.x2, event.x() + 1)) - rect.x rect.y = min(self.y1, min(self.y2, event.y() + 1)) rect.height = max(self.y1, max(self.y2, event.y() + 1)) - rect.y self.x2 = event.x() + 1 self.y2 = event.y() + 1 self.update() def mouseReleaseEvent(self, event): if event.button() == 1: self.selecting=0 if self.x1 >= 0: self.x2 = event.x() + 1 self.y2 = event.y() + 1 self.area_return[0]=max(0,min(int(self.x1),int(self.x2))*self.factor) self.area_return[1]=max(0,min(int(self.y1),int(self.y2))*self.factor) self.area_return[2]=min(self.wwidth,max(int(self.x1),int(self.x2))*self.factor) self.area_return[3]=min(self.wheight,max(int(self.y1),int(self.y2))*self.factor) self.update() def mousePressEvent(self, event): if event.button() != 1: self.x1 = self.y1 =-1 self.area_return[0]=-1 self.area_return[1]=-1 self.area_return[2]=-1 self.area_return[3]=-1 self.update() elif event.button() == 1: self.selecting=1 self.x1 = event.x() self.y1 = event.y() def __draw_frame__(self): if self.area_return[0]!=-1: self.realFrame=rmdFrame(self.area_return[0], self.area_return[1], self.area_return[2]-self.area_return[0], self.area_return[3]-self.area_return[1], self.caller) def closeEvent(self,event): self.realFrame.destroy() QtGui.QLabel.close(self) if __name__ == "__main__": import sys p=[[-1,-1,-1,-1]] hidden=[0] app=QtGui.QApplication(sys.argv) app.values=rmdConfig.default_values w = QtThumbSelector(None,app,p[0],hidden) w.show() app.exec_() print p[0]