Lightningbeam/PyGUI-2.5.3/GUI/Win32/Label.py

82 lines
2.2 KiB
Python

#--------------------------------------------------------------------
#
# PyGUI - Label - Win32
#
#--------------------------------------------------------------------
from math import ceil
import win32con as wc, win32ui as ui
from GUI import export
from GUI.StdColors import black
from GUI.StdFonts import system_font
from GUI.WinUtils import win_none
from GUI.GLabels import Label as GLabel
win_style = wc.WS_CLIPSIBLINGS | wc.WS_VISIBLE
win_dt_format = wc.DT_NOPREFIX | wc.DT_SINGLELINE | wc.DT_NOCLIP
win_dt_align_map = {
'l': wc.DT_LEFT | win_dt_format,
'c': wc.DT_CENTER | win_dt_format,
'r': wc.DT_RIGHT | win_dt_format,
}
#--------------------------------------------------------------------
class Label(GLabel):
_win_transparent = True
_font = None
_color = black
_just = 'l'
def __init__(self, text = "New Label", **kwds):
self._set_lines(text)
lines = self._lines
font = self._win_predict_font(kwds)
w = 0
for line in lines:
w = max(w, font.width(line))
w = int(ceil(w))
h = self._calc_height(font, len(lines))
win = ui.CreateWnd()
win.CreateWindow(None, None, win_style, (0, 0, w, h), win_none, 0)
#win.ModifyStyleEx(0, wc.WS_EX_TRANSPARENT, 0)
GLabel.__init__(self, _win = win, **kwds)
def get_text(self):
return "\n".join(self._lines)
def set_text(self, x):
self._set_lines(x)
self.invalidate()
def _set_lines(self, x):
self._lines = x.split("\n")
def OnPaint(self):
win = self._win
dc, paint_struct = win.BeginPaint()
font = self._font
win_font = font._win_font
dc.SetBkMode(wc.TRANSPARENT)
dc.SelectObject(win_font)
c = self._color._win_color
#print "Label.OnPaint: win color = 0x%08x" % c
dc.SetTextColor(c)
rm = self.width
y = 0
h = font.line_height
just = self._just[:1]
dt_format = win_dt_align_map[just]
for line in self._lines:
r = (0, y, rm, y + h)
dc.DrawText(line, r, dt_format)
y += h
win.EndPaint(paint_struct)
export(Label)