summaryrefslogtreecommitdiffstats
path: root/examples/desktop.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/desktop.py')
-rwxr-xr-xexamples/desktop.py230
1 files changed, 230 insertions, 0 deletions
diff --git a/examples/desktop.py b/examples/desktop.py
new file mode 100755
index 0000000..154b632
--- /dev/null
+++ b/examples/desktop.py
@@ -0,0 +1,230 @@
+#!/usr/bin/env python
+
+import sys
+from python_tqt.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
+ return i
+
+maxpoints = 5
+maxcurves = 8
+
+def poly():
+ d = TQApplication.desktop()
+ d.setEraseColor(TQt.white)
+ xvel = [ 0 ] * maxpoints
+ yvel = [ 0 ] * maxpoints
+ head = 0
+ tail = -maxcurves + 2
+ a = [ TQPointArray() ] * 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 = TQPainter()
+ paint.begin(d)
+
+ for ntimes in range(2000):
+ paint.setBrush(TQColor(kindaRand()%360,180,255, TQColor.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 = TQImage(w, h, 8, 128)
+ for i in range(128):
+ image.setColor(i, tqRgb(i,0,0))
+ for y in range(h):
+ for x in range(w):
+ image.setPixel(x,y,(x+y)%128)
+
+ pm = TQPixmap()
+ pm.convertFromImage(image)
+ pm.setOptimization(TQPixmap.BestOptim)
+
+ d = TQApplication.desktop()
+
+ for i in range(0,361,2):
+ m = TQWMatrix()
+ m.rotate(i)
+ rpm = pm.xForm(m)
+ d.setErasePixmap(rpm)
+ d.update()
+
+def generateStone(pm, c1, c2, c3):
+ p = TQPainter()
+ p1 = TQPen(c1, 0)
+ p2 = TQPen(c2, 0)
+ p3 = TQPen(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(TQWidget):
+ def __init__(self, s, parent=None, name=''):
+ TQWidget.__init__(self, parent, name, TQt.WType_Desktop | TQt.WPaintDesktop)
+ self.text = s
+ self.pm = None
+
+ def paintEvent(self, pe):
+ c1 = self.eraseColor()
+ c2 = c1.light(104)
+ c3 = c1.dark(106)
+ if not self.pm:
+ self.pm = TQPixmap(64, 64)
+ generateStone(self.pm, c1, c2, c3)
+ self.setErasePixmap(self.pm)
+ self.update()
+ br = self.fontMetrics().boundingRect(self.text)
+ offscreen = TQPixmap(br.width(), br.height())
+ x = self.width()/2 - br.width()/2
+ y = self.height()/2 - br.height()/2
+ offscreen.fill(self, x, y)
+ p = TQPainter()
+ p.begin(offscreen)
+ drawShadeText(p, -br.x(), -br.y(), self.text, c2, c3, 3)
+ p.end()
+ bitBlt(self, x, y, offscreen)
+
+def desktopWidget(s='Trolltech'):
+ t = DesktopWidget(s)
+ t.update()
+ tqApp.exec_loop()
+
+def desktopText(s='Trolltech'):
+ border = 20
+
+ c1 = tqApp.palette().normal().background()
+ c2 = c1.light(104)
+ c3 = c1.dark(106)
+
+ pm = TQPixmap(10, 10)
+ p = TQPainter()
+ p.begin(pm)
+ r = p.fontMetrics().boundingRect(s)
+ p.end()
+
+ appWidth = tqApp.desktop().width()
+ appHeight = tqApp.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()
+
+ tqApp.desktop().setErasePixmap(pm)
+
+a = TQApplication(sys.argv)
+if len(sys.argv) > 1:
+ f = TQFont('charter', 96, TQFont.Black)
+ f.setStyleHint(TQFont.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:
+ print("""Usage:
+\tdesktop -poly
+\tdesktop -rotate
+\tdesktop -troll
+\tdesktop -trollwidget
+\tdesktop -shadetext <text>
+\tdesktop -shadewidget <text>""")
+ rotate()