[tekui-devel] tekui: Added List class and list demo; Canvas: now always determ...
Timm S. Mueller
tmueller at neoscientists.org
Sat Mar 29 05:06:25 CET 2008
details: http://hg.teklib.org/tekui/rev/8da9a558a533
changeset: 382:8da9a558a533
user: Timm S. Mueller <tmueller at neoscientists.org>
date: Tue Mar 25 01:27:57 2008 +0100
description:
Added List class and list demo; Canvas: now always determines and redraws
background of unused regions; FloatText: local TextCanvas class removed
diffs (truncated from 353 to 100 lines):
diff -r d716e201118d -r 8da9a558a533 tek/app/ui/list.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tek/app/ui/list.lua Tue Mar 25 01:27:57 2008 +0100
@@ -0,0 +1,14 @@
+#!/usr/bin/env lua
+
+require "tek.lib.debug".level = 4
+local ui = require "tek.lib.ui"
+
+app = ui.Application:new {
+ Children = {
+ ui.Window:new {
+ Children = {
+ ui.List:new { Text = "Hallo" }
+ }
+ }
+ }
+}:run()
diff -r d716e201118d -r 8da9a558a533 tek/class/ui/canvas.lua
--- a/tek/class/ui/canvas.lua Mon Mar 24 03:37:33 2008 +0100
+++ b/tek/class/ui/canvas.lua Tue Mar 25 01:27:57 2008 +0100
@@ -16,7 +16,7 @@ local overlap = ui.Region.overlapCoords
local overlap = ui.Region.overlapCoords
module("tek.class.ui.canvas", tek.class.ui.frame)
-_VERSION = "Canvas 0.7"
+_VERSION = "Canvas 1.0"
local Canvas = _M
local DEF_CANVASAREA_MARGIN = { 0, 0, 0, 0 }
@@ -102,14 +102,12 @@ end
function Canvas:askMinMax()
ui.Group.getMinMax(self.Object)
-
local m = self.Object.MinMax
local s = self.ScrollGroup
local m1 = s.KeepMinWidth and m[1] or 0
local m2 = s.KeepMinHeight and m[2] or 0
local m3 = s.HMax and ui.HUGE or self.Width
local m4 = s.VMax and ui.HUGE or self.Height
-
return m1, m2, m3, m4
end
@@ -122,6 +120,7 @@ function Canvas:layout(r1, r2, r3, r4, m
local sizechanged = false
local m = self.MarginAndBorder
+ local r = self.Rect
if self.ScrollGroup.AutoWidth then
local w = r3 - r1 + 1 - m[1] - m[3]
@@ -137,24 +136,31 @@ function Canvas:layout(r1, r2, r3, r4, m
Frame.layout(self, r1, r2, r3, r4, markdamage)
+ -- relayout object until width and height settle in:
+ -- TODO: break out if they don't settle in?
local iw, ih
repeat
iw, ih = self.Width, self.Height
- self.Object:layout(0, 0, self.Width - 1, self.Height - 1, sizechanged)
+ self.Object:layout(0, 0, iw - 1, ih - 1, sizechanged)
sizechanged = true
until self.Width == iw and self.Height == ih
-- propagate intra-area damages calculated in Frame.layout to child object:
local dr = self.DamageRegion
if dr and markdamage ~= false then
- local sx = self.Left - self.Rect[1]
- local sy = self.Top - self.Rect[2]
+ local sx = self.Left - r[1]
+ local sy = self.Top - r[2]
for _, r in dr:getRects() do
local r1, r2, r3, r4 = dr:getRect(r)
-- mark as damage shifted into canvas space:
self.Object:markDamage(r1 + sx, r2 + sy, r3 + sx, r4 + sy)
end
end
+
+ -- determine unused region:
+ self.UnusedRegion = ui.Region.new(r1 + m[1], r2 + m[2], r3 - m[3], r4 - m[4])
+ local o = self.Object.Rect
+ self.UnusedRegion:subRect(o[1] + r[1], o[2] + r[2], o[3] + r[1], o[4] + r[2])
self.Redraw = true
@@ -183,6 +189,13 @@ end
-------------------------------------------------------------------------------
function Canvas:draw()
+ local d = self.Drawable
+ local f = self.UnusedRegion
+ local p = d.Pens[self.BackPen or ui.PEN_LISTVIEWBACK]
+ for _, r in f:getRects() do
+ local r1, r2, r3, r4 = f:getRect(r)
+ d:fillRect(r1, r2, r3, r4, p)
+ end
end
More information about the tekui-devel
mailing list