summaryrefslogtreecommitdiffstats
path: root/python/pyqt/examples2/desktop.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/pyqt/examples2/desktop.py')
-rwxr-xr-xpython/pyqt/examples2/desktop.py219
1 files changed, 219 insertions, 0 deletions
diff --git a/python/pyqt/examples2/desktop.py b/python/pyqt/examples2/desktop.py
new file mode 100755
index 00000000..a1177f24
--- /dev/null
+++ b/python/pyqt/examples2/desktop.py
@@ -0,0 +1,219 @@
+#!/usr/bin/env python
+
+import sys
+from qt import *
+
+seed = 0.353535353535
+KINDA_RAND_MAX = 32767
+
+def kindaRand():
+ global seed
+ seed = seed * 147
+ seed = seed - int(seed)
+ return int(seed*(KINDA_RAND_MAX + 1))
+
+velmax = 15
+velmin = 4
+
+def velocity(i):
+ if i == 1 or i == 2:
+ i = (kindaRand()&0x7fff % velmax)/3 + velmin
+ else:
+ i = (kindaRand()&0x7fff % velmax) + velmin
+
+maxpoints = 5
+maxcurves = 8
+
+def poly():
+ d = QApplication.desktop()
+ d.setBackgroundColor(white)
+ xvel = [ 0 ] * 8
+ yvel = [ 0 ] * 8
+ head = 0
+ tail = -maxcurves + 2
+ a = QPointArray() * maxcurves
+ r = d.rect()
+ for i in range(maxcurves):
+ a[i].resize(maxpoints)
+ p = a[0]
+ for i in range(maxpoints):
+ p.setPoint(i, (kindaRand()&0x7fff) % r.width(),
+ (kindaRand()&0x7fff) % r.height() )
+ xvel[i] = velocity(i)
+ yvel[i] = velocity(i)
+
+ paint = QPainter()
+ paint.begin(d)
+
+ for ntimes in range(2000):
+ paint.setBrush(QColor(kindaRand()%360,180,255, QColor.Hsv))
+ paint.drawPolygon(a[head])
+ tail = tail + 1
+ if tail >= maxcurves:
+ tail = 0
+ minx = r.left()
+ maxx = r.right()
+ miny = r.top()
+ maxy = r.bottom()
+ p = a[head]
+ head = head + 1
+ if head >= maxcurves:
+ head = 0
+ for i in range(maxpoints):
+ x, y = p.point(i)
+ x = x + xvel[i]
+ y = y + yvel[i]
+ if x >= maxx:
+ x = maxx - (x - maxx + 1)
+ xvel[i] = -velocity(i)
+ if x <= minx:
+ x = minx + (minx - x + 1)
+ xvel[i] = velocity(i)
+ if y >= maxy:
+ y = maxy - (y - maxy + 1)
+ yvel[i] = -velocity(i)
+ if y <= miny:
+ y = miny + (miny - y + 1)
+ yvel[i] = velocity(i)
+ a[head].setPoint(i, x, y)
+ paint.end()
+
+def rotate():
+ w = 64
+ h = 64
+ image = QImage(w, h, 8, 128)
+ for i in range(128):
+ image.setColor(i, qRgb(i,0,0))
+ for y in range(h):
+ for x in range(w):
+ image.setPixel(x,y,(x+y)%128)
+
+ pm = QPixmap()
+ pm.convertFromImage(image)
+ #pm.optimize(1)
+
+ d = QApplication.desktop()
+
+ for i in range(0,361,2):
+ m = QWMatrix()
+ m.rotate(i)
+ rpm = pm.xForm(m)
+ d.setBackgroundPixmap(rpm)
+ d.update()
+
+def generateStone(pm, c1, c2, c3):
+ p = QPainter()
+ p1 = QPen(c1, 0)
+ p2 = QPen(c2, 0)
+ p3 = QPen(c3, 0)
+
+ p.begin(pm)
+ for i in range(pm.width()):
+ for j in range(pm.height()):
+ r = kindaRand()
+ if r < KINDA_RAND_MAX / 3:
+ p.setPen(p1)
+ elif r < KINDA_RAND_MAX / 3 * 2:
+ p.setPen(p2)
+ else:
+ p.setPen(p3)
+ p.drawPoint(i, j)
+ p.end()
+
+def drawShadeText(p, x, y, text, topColor, bottomColor, sw=2):
+ if not p.isActive():
+ return
+
+ p.setPen(bottomColor)
+ p.drawText(x+sw, y+sw, text)
+ p.setPen(topColor)
+ p.drawText(x, y, text)
+
+class DesktopWidget(QWidget):
+ def __init__(self, s, parent=None, name=''):
+ QWidget.__init__(self, parent, name, WType_Desktop | WPaintDesktop)
+ self.text = s
+ self.pm = None
+
+ def paintEvent(self, pe):
+ c1 = self.backgroundColor()
+ c2 = c1.light(104)
+ c3 = c1.dark(106)
+ if not self.pm:
+ self.pm = QPixmap(64, 64)
+ generateStone(self.pm, c1, c2, c3)
+ self.setBackgroundPixmap(self.pm)
+ self.update()
+ br = self.fontMetrics().boundingRect(self.text)
+ offscreen = QPixmap(br.width(), br.height())
+ x = self.width()/2 - br.width()/2
+ y = self.height()/2 - br.height()/2
+ offscreen.fill(self, x, y)
+ p = QPainter()
+ p.begin(offscreen)
+ drawShadeText(p, -br.x(), -br.y(), self.text, c2, c3, 3)
+ p.end()
+ bitBlt(self, x, y, offscreen)
+
+def desktopWidget(s='Troll Tech'):
+ t = DesktopWidget(s)
+ t.update()
+ qApp.exec_loop()
+
+def desktopText(s='Troll Tech'):
+ border = 20
+
+ c1 = qApp.palette().normal().background()
+ c2 = c1.light(104)
+ c3 = c1.dark(106)
+
+ pm = QPixmap(10, 10)
+ p = QPainter()
+ p.begin(pm)
+ r = p.fontMetrics().boundingRect(s)
+ p.end()
+
+ appWidth = qApp.desktop().width()
+ appHeight = qApp.desktop().height()
+ if r.width() > appWidth - border*2:
+ r.setWidth(appWidth - border*2)
+ if r.height() > appHeight - border*2:
+ r.setHeight(appHeight - border*2)
+
+ pm.resize(r.size().width()+border*2,r.size().height()+border*2)
+ generateStone(pm, c1, c2, c3)
+ p.begin(pm)
+ drawShadeText(p, -r.x()+border, -r.y()+border, s, c2, c3)
+ p.end()
+
+ qApp.desktop().setBackgroundPixmap(pm)
+
+a = QApplication(sys.argv)
+if len(sys.argv) > 1:
+ f = QFont('charter', 96, QFont.Weight.Black)
+ f.setStyleHint(QFont.StyleHint.Times)
+ a.setFont(f)
+validOptions = 0
+if len(sys.argv) == 2:
+ validOptions = 1
+ if sys.argv[1] == '-poly':
+ poly()
+ elif sys.argv[1] == '-rotate':
+ rotate()
+ elif sys.argv[1] == '-troll':
+ desktopText()
+ elif sys.argv[1] == '-trollwidget':
+ desktopWidget()
+ else:
+ validOptions = 0
+if len(sys.argv) == 3:
+ validOptions = 1
+ if sys.argv[1] == '-shadetext':
+ desktopText(sys.argv[2])
+ elif sys.argv[1] == '-shadewidget':
+ desktopWidget(sys.argv[2])
+ else:
+ validOptions = 0
+
+if not validOptions:
+ rotate()