Poodletooth-iLand/panda/python/Lib/site-packages/wx/lib/utils.py
2015-03-06 06:11:40 -06:00

89 lines
2.7 KiB
Python

#----------------------------------------------------------------------
# Name: wx.lib.utils
# Purpose: Miscelaneous utility functions
#
# Author: Robin Dunn
#
# Created: 18-Jan-2009
# Copyright: (c) 2009 Total Control Software
# Licence: wxWidgets license
#
# Tags: phoenix-port, unittest, documented
#
#----------------------------------------------------------------------
"""
A few useful functions. (Ok, only one so far...)
"""
import wx
#---------------------------------------------------------------------------
def AdjustRectToScreen(rect, adjust=(0,0)):
"""
Compare the rect with the dimensions of the display that the rect's
upper left corner is positioned on. If it doesn't fit entirely on
screen then attempt to make it do so either by repositioning the
rectangle, resizing it, or both. Returns the adjusted rectangle.
If the adjustment value is given then it will be used to ensure that
the rectangle is at least that much smaller than the display's client
area.
:param Rect `rect`: the rectangle to be repositioned;
:param tuple `adjust`: if given, it will be used to ensure that
the rectangle is at least that much smaller than the display's client
area.
:rtype: `rect`
"""
assert isinstance(rect, wx.Rect)
if -1 in rect.Get():
# bail out if there are any -1's in the dimensions
return rect
dispidx = wx.Display.GetFromPoint(rect.Position)
if dispidx == wx.NOT_FOUND:
dispidx = 0
ca = wx.Display(dispidx).GetClientArea()
assert isinstance(ca, wx.Rect)
# is it already fully visible?
if ca.Contains(rect):
return rect
# if not then try adjusting the position
if not ca.Contains(rect.Position):
rect.Position = ca.Position
if ca.Contains(rect):
return rect
dx = dy = 0
if rect.right > ca.right:
dx = ca.right - rect.right
if rect.bottom > ca.bottom:
dy = ca.bottom - rect.bottom
rect.Offset(dx, dy)
# if the rectangle has been moved too far, then readjust the position
# and also adjust the size
if rect.left < ca.left:
rect.width -= (ca.left - rect.left)
rect.left = ca.left
if rect.top < ca.top:
rect.height -= (ca.top - rect.top)
rect.top = ca.top
# make final adjustments if needed
adjust = wx.Size(*adjust)
if rect.width > (ca.width - adjust.width):
rect.width = ca.width - adjust.width
if rect.height > (ca.height - adjust.height):
rect.height = ca.height - adjust.height
# return the result
return rect
#---------------------------------------------------------------------------