Add a GraphicsContext sample to the demo
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42424 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -50,13 +50,13 @@ def runTest(frame, nb, log):
|
|||||||
overview = """<html><body>
|
overview = """<html><body>
|
||||||
<h2><center>Alpha Drawing</center></h2>
|
<h2><center>Alpha Drawing</center></h2>
|
||||||
|
|
||||||
The wx.DC on Mac now supports alpha transparent drawing using pens and
|
The wx.GCDC class is a class that implemented the wx.DC API using the
|
||||||
brushes. This is accomplished by enabling the wx.Colour class to have
|
new wx.GraphicsContext class, and so it supports anti-aliased drawing
|
||||||
a fourth component for the alpha value, where 0 is fully transparent,
|
using pens and brushes, that can optionally also be drawn using an
|
||||||
and 255 is fully opaque.
|
alpha transparency. (On the Mac all the DC classes are using this new
|
||||||
|
implementation.) This is accomplished by enabling the wx.Colour class
|
||||||
<p>You can consider this a \"preview of coming attractions\" for the
|
to have a fourth component for the alpha value, where 0 is fully
|
||||||
other platforms.
|
transparent, and 255 is fully opaque.
|
||||||
|
|
||||||
</body></html>
|
</body></html>
|
||||||
"""
|
"""
|
||||||
|
134
wxPython/demo/GraphicsContext.py
Normal file
134
wxPython/demo/GraphicsContext.py
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
|
||||||
|
import wx
|
||||||
|
import colorsys
|
||||||
|
from math import cos, sin, radians
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
|
BASE = 80.0 # sizes used in shapes drawn below
|
||||||
|
BASE2 = BASE/2
|
||||||
|
BASE4 = BASE/4
|
||||||
|
|
||||||
|
|
||||||
|
class TestPanel(wx.Panel):
|
||||||
|
def __init__(self, parent, log):
|
||||||
|
self.log = log
|
||||||
|
wx.Panel.__init__(self, parent, -1)
|
||||||
|
|
||||||
|
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
||||||
|
|
||||||
|
def OnPaint(self, evt):
|
||||||
|
dc = wx.PaintDC(self)
|
||||||
|
gc = wx.GraphicsContext.Create(dc)
|
||||||
|
|
||||||
|
font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
|
||||||
|
font.SetWeight(wx.BOLD)
|
||||||
|
gc.SetFont(font)
|
||||||
|
|
||||||
|
# make a path that contains a circle and some lines, centered at 0,0
|
||||||
|
path = gc.CreatePath()
|
||||||
|
path.AddCircle(0, 0, BASE2)
|
||||||
|
path.MoveToPoint(0, -BASE2)
|
||||||
|
path.AddLineToPoint(0, BASE2)
|
||||||
|
path.MoveToPoint(-BASE2, 0)
|
||||||
|
path.AddLineToPoint(BASE2, 0)
|
||||||
|
path.CloseSubpath()
|
||||||
|
path.AddRectangle(-BASE4, -BASE4/2, BASE2, BASE4)
|
||||||
|
|
||||||
|
|
||||||
|
# Now use that path to demonstrate various capbilites of the grpahics context
|
||||||
|
gc.PushState() # save current translation/scale/other state
|
||||||
|
gc.Translate(60, 75) # reposition the context origin
|
||||||
|
|
||||||
|
gc.SetPen(wx.Pen("navy", 1))
|
||||||
|
gc.SetBrush(wx.Brush("pink"))
|
||||||
|
gc.SetTextColour("black")
|
||||||
|
|
||||||
|
# show the difference between stroking, filling and drawing
|
||||||
|
for label, PathFunc in [("StrokePath", gc.StrokePath),
|
||||||
|
("FillPath", gc.FillPath),
|
||||||
|
("DrawPath", gc.DrawPath)]:
|
||||||
|
if "wxGTK" in wx.PlatformInfo:
|
||||||
|
w, h = dc.GetTextExtent(label) # NYI in Cairo context
|
||||||
|
else:
|
||||||
|
w, h = gc.GetTextExtent(label)
|
||||||
|
|
||||||
|
gc.DrawText(label, -w/2, -BASE2-h)
|
||||||
|
PathFunc(path)
|
||||||
|
gc.Translate(2*BASE, 0)
|
||||||
|
|
||||||
|
|
||||||
|
gc.PopState() # restore saved state
|
||||||
|
gc.PushState() # save it again
|
||||||
|
gc.Translate(60, 200) # offset to the lower part of the window
|
||||||
|
|
||||||
|
gc.DrawText("Scale", 0, -BASE2)
|
||||||
|
gc.Translate(0, 20)
|
||||||
|
|
||||||
|
gc.SetBrush(wx.Brush(wx.Colour(178, 34, 34, 128))) # 128 == half transparent
|
||||||
|
for cnt in range(8):
|
||||||
|
gc.Scale(1.08, 1.08) # increase scale by 8%
|
||||||
|
gc.Translate(5,5)
|
||||||
|
gc.DrawPath(path)
|
||||||
|
|
||||||
|
|
||||||
|
gc.PopState() # restore saved state
|
||||||
|
gc.PushState() # save it again
|
||||||
|
gc.Translate(400, 200)
|
||||||
|
gc.DrawText("Rotate", 0, -BASE2)
|
||||||
|
|
||||||
|
gc.Translate(0, 75)
|
||||||
|
for angle in range(0, 360, 30):
|
||||||
|
gc.PushState() # save this new current state so we can pop back to
|
||||||
|
# it at the end of the loop
|
||||||
|
r, g, b = [int(c * 255) for c in colorsys.hsv_to_rgb(float(angle)/360, 1, 1)]
|
||||||
|
gc.SetBrush(wx.Brush(wx.Colour(r, g, b, 64)))
|
||||||
|
|
||||||
|
# use translate to artfully reposition each drawn path
|
||||||
|
gc.Translate(1.5 * BASE2 * cos(radians(angle)),
|
||||||
|
1.5 * BASE2 * sin(radians(angle)))
|
||||||
|
|
||||||
|
# use Rotate to rotate the path
|
||||||
|
gc.Rotate(radians(angle))
|
||||||
|
|
||||||
|
# now draw it
|
||||||
|
gc.DrawPath(path)
|
||||||
|
gc.PopState()
|
||||||
|
|
||||||
|
gc.PopState()
|
||||||
|
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
|
def runTest(frame, nb, log):
|
||||||
|
win = TestPanel(nb, log)
|
||||||
|
return win
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
overview = """<html><body>
|
||||||
|
<h2><center>wx.GraphicsContext and wx.GraphicsPath</center></h2>
|
||||||
|
|
||||||
|
The new advanced 2D drawing API is implemented via the
|
||||||
|
wx.GraphicsContext and wx.GraphicsPath classes. They wrap GDI+ on
|
||||||
|
Windows, Cairo on wxGTK and CoreGraphics on OS X. They allow
|
||||||
|
path-based drawing with alpha-blending and anti-aliasing, and use a
|
||||||
|
floating point cooridnate system.
|
||||||
|
|
||||||
|
<p>When viewing this sample pay attention to how the rounded edges are
|
||||||
|
smoothed with anti-aliased drawing, and how the shapes on the lower
|
||||||
|
half of the window are partially transparent, allowing you to see what
|
||||||
|
was drawn before.
|
||||||
|
|
||||||
|
</body></html>
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import sys,os
|
||||||
|
import run
|
||||||
|
run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
|
||||||
|
|
@@ -68,6 +68,7 @@ _treeList = [
|
|||||||
'AboutBox',
|
'AboutBox',
|
||||||
'AnimateCtrl',
|
'AnimateCtrl',
|
||||||
'AlphaDrawing',
|
'AlphaDrawing',
|
||||||
|
'GraphicsContext',
|
||||||
]),
|
]),
|
||||||
|
|
||||||
# managed windows == things with a (optional) caption you can close
|
# managed windows == things with a (optional) caption you can close
|
||||||
@@ -268,6 +269,7 @@ _treeList = [
|
|||||||
'DrawXXXList',
|
'DrawXXXList',
|
||||||
'FileHistory',
|
'FileHistory',
|
||||||
'FontEnumerator',
|
'FontEnumerator',
|
||||||
|
'GraphicsContext',
|
||||||
'GLCanvas',
|
'GLCanvas',
|
||||||
'Joystick',
|
'Joystick',
|
||||||
'MimeTypesManager',
|
'MimeTypesManager',
|
||||||
|
@@ -23,6 +23,8 @@ of wx.ListCtrl available, which will be used for wx.LC_REPORT style
|
|||||||
list controls if you set the "mac.listctrl.always_use_generic"
|
list controls if you set the "mac.listctrl.always_use_generic"
|
||||||
SystemOption to zero. In a future release this will be the default.
|
SystemOption to zero. In a future release this will be the default.
|
||||||
|
|
||||||
|
Added a sample to the demo that shows some of what can be done with
|
||||||
|
the new wx.GraphicsContext and wx.GraphicsPath classes.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user