Clean up draw and color utils

This commit is contained in:
Ryan Holmes
2017-06-12 18:14:29 -04:00
parent 8e4db5a8c3
commit ae0da59ed2
2 changed files with 65 additions and 95 deletions

View File

@@ -1,26 +1,27 @@
# noinspection PyPackageRequirements
import wx
import gui.utils.color as colorUtils
from . import color
def RenderGradientBar(windowColor, width, height, sFactor, eFactor, mFactor=None, fillRatio=2):
def RenderGradientBar(windowColor, width, height, sFactor, eFactor, mFactor=None , fillRatio=2):
if sFactor == 0 and eFactor == 0 and mFactor is None:
return DrawFilledBitmap(width, height, windowColor)
return DrawFilledBitmap(width,height, windowColor)
gStart = colorUtils.GetSuitableColor(windowColor, sFactor)
gStart = color.GetSuitable(windowColor, sFactor)
if mFactor:
gMid = colorUtils.GetSuitableColor(windowColor, mFactor)
gMid = color.GetSuitable(windowColor, mFactor)
else:
gMid = colorUtils.GetSuitableColor(windowColor, sFactor + (eFactor - sFactor) / 2)
gMid = color.GetSuitable(windowColor, sFactor + (eFactor - sFactor) / 2)
gEnd = colorUtils.GetSuitableColor(windowColor, eFactor)
gEnd = color.GetSuitable(windowColor, eFactor)
return DrawGradientBar(width, height, gStart, gEnd, gMid, fillRatio)
def DrawFilledBitmap(width, height, color):
canvas = wx.EmptyBitmap(width, height)
canvas = wx.Bitmap(width,height)
mdc = wx.MemoryDC()
mdc.SelectObject(canvas)
@@ -32,25 +33,21 @@ def DrawFilledBitmap(width, height, color):
return canvas
# noinspection PyPropertyAccess
def DrawGradientBar(width, height, gStart, gEnd, gMid=None, fillRatio=4):
# we need to have dimensions to draw
# assert width > 0 and height > 0
canvas = wx.EmptyBitmap(width, height)
canvas = wx.Bitmap(width,height)
mdc = wx.MemoryDC()
mdc.SelectObject(canvas)
r = wx.Rect(0, 0, width, height)
r.height = height / fillRatio
r.SetHeight(height / fillRatio)
if gMid is None:
gMid = gStart
mdc.GradientFillLinear(r, gStart, gMid, wx.SOUTH)
r.top = r.height
r.height = height * (fillRatio - 1) / fillRatio + (1 if height % fillRatio != 0 else 0)
r.SetTop(r.GetHeight())
r.SetHeight(height * (fillRatio - 1)/fillRatio + (1 if height % fillRatio != 0 else 0))
mdc.GradientFillLinear(r, gMid, gEnd, wx.SOUTH)
@@ -59,50 +56,31 @@ def DrawGradientBar(width, height, gStart, gEnd, gMid=None, fillRatio=4):
return canvas
def GetPartialText(dc, text, maxWidth, defEllipsis="..."):
ellipsis = defEllipsis
base_w, h = dc.GetTextExtent(ellipsis)
lenText = len(text)
drawntext = text
w, dummy = dc.GetTextExtent(text)
while lenText > 0:
if w + base_w <= maxWidth:
break
w_c, h_c = dc.GetTextExtent(drawntext[-1])
drawntext = drawntext[0:-1]
lenText -= 1
w -= w_c
while len(ellipsis) > 0 and w + base_w > maxWidth:
ellipsis = ellipsis[0:-1]
def GetPartialText(dc, text , maxWidth, defEllipsis="..."):
ellipsis = defEllipsis
base_w, h = dc.GetTextExtent(ellipsis)
if len(text) > lenText:
return drawntext + ellipsis
else:
return text
lenText = len(text)
drawntext = text
w, dummy = dc.GetTextExtent(text)
def GetRoundBitmap(w, h, r):
maskColor = wx.Color(0, 0, 0)
shownColor = wx.Color(5, 5, 5)
b = wx.EmptyBitmap(w, h)
dc = wx.MemoryDC(b)
dc.SetBrush(wx.Brush(maskColor))
dc.DrawRectangle(0, 0, w, h)
dc.SetBrush(wx.Brush(shownColor))
dc.SetPen(wx.Pen(shownColor))
dc.DrawRoundedRectangle(0, 0, w, h, r)
dc.SelectObject(wx.NullBitmap)
b.SetMaskColour(maskColor)
return b
while lenText > 0:
if w + base_w <= maxWidth:
break
def GetRoundShape(w, h, r):
return wx.RegionFromBitmap(GetRoundBitmap(w, h, r))
w_c, h_c = dc.GetTextExtent(drawntext[-1])
drawntext = drawntext[0:-1]
lenText -= 1
w -= w_c
while len(ellipsis) > 0 and w + base_w > maxWidth:
ellipsis = ellipsis[0:-1]
base_w, h = dc.GetTextExtent(ellipsis)
if len(text) > lenText:
return drawntext + ellipsis
else:
return text
def CreateDropShadowBitmap(bitmap, opacity):