82 lines
2.2 KiB
Python
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)
|
|
|