changeset 1957:269e78ad8a85 default tip

swing for windows
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 29 May 2025 22:29:15 -0600 (9 hours ago)
parents 19de10be4c37
children
files src/luan/modules/swing/Awt_container.luan src/luan/modules/swing/Component.luan src/luan/modules/swing/Font.luan src/luan/modules/swing/TextAreaLuan.java
diffstat 4 files changed, 37 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/luan/modules/swing/Awt_container.luan	Wed May 28 15:58:56 2025 -0600
+++ b/src/luan/modules/swing/Awt_container.luan	Thu May 29 22:29:15 2025 -0600
@@ -1,6 +1,8 @@
 local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local ipairs = Luan.ipairs or error()
+local pairs = Luan.pairs or error()
+local type = Luan.type or error()
 local Utils = require "luan:swing/Utils.luan"
 local fail = Utils.fail or error()
 local remove = Utils.remove or error()
@@ -9,12 +11,18 @@
 local from_dimension = Utils.from_dimension or error()
 local to_point = Utils.to_point or error()
 local from_point = Utils.from_point or error()
+local Font = require "luan:swing/Font.luan"
+local get_font = Font.get or error()
+local to_java_attributes = Font.to_java_attributes or error()
 require "java"
 local SwingLuan = require "java:luan.modules.swing.SwingLuan"
 local newResizeListener = SwingLuan.newResizeListener
 local notifyAfterResizeStops = SwingLuan.notifyAfterResizeStops
 local newMoveListener = SwingLuan.newMoveListener
 local notifyAfterMoveStops = SwingLuan.notifyAfterMoveStops
+local JFont = require "java:java.awt.Font"
+local Logging = require "luan:logging/Logging.luan"
+local logger = Logging.logger "swing/Awt_container"
 
 
 local Awt_container = {}
@@ -62,6 +70,27 @@
 	if preferred_size~=nil then jcomponent.setPreferredSize(to_dimension(preferred_size)) end
 	local maximum_size = remove(props,"maximum_size")
 	if maximum_size~=nil then jcomponent.setMaximumSize(to_dimension(maximum_size)) end
+	local function set_font(font)
+		if type(font) == "table" then
+			font = get_font(font)
+		end
+		jcomponent.setFont(font)
+	end
+	local font = remove(props,"font")
+	if font~=nil then set_font(font) end
+	local font_changes = remove(props,"font_changes")
+	if font_changes~=nil then
+		font_changes = to_java_attributes(font_changes)
+		local font = jcomponent.getFont()
+		--logger.info(font.getAttributes())
+		local attrs = font.getAttributes()
+		for key, val in pairs(font_changes) do
+			attrs.put(key,val)
+		end
+		font = JFont.getFont(attrs)
+		jcomponent.setFont(font)
+	end
+	component.set_font = set_font
 --[[
 	component.repaint = jcomponent.repaint
 	component.validate = jcomponent.validate
--- a/src/luan/modules/swing/Component.luan	Wed May 28 15:58:56 2025 -0600
+++ b/src/luan/modules/swing/Component.luan	Thu May 29 22:29:15 2025 -0600
@@ -8,7 +8,6 @@
 local make_metatable = Utils.make_metatable or error()
 local remove = Utils.remove or error()
 local check_empty = Utils.check_empty or error()
-local get_font = require("luan:swing/Font.luan").get or error()
 local Awt_container = require "luan:swing/Awt_container.luan"
 local super__index = Awt_container.__index or error()
 local super__new_index = Awt_container.__new_index or error()
@@ -72,14 +71,6 @@
 		end
 		jcomponent.setLayout(layout)
 	end
-	local function set_font(font)
-		if type(font) == "table" then
-			font = get_font(font)
-		end
-		jcomponent.setFont(font)
-	end
-	local font = remove(props,"font")
-	if font~=nil then set_font(font) end
 	local border = remove(props,"border")
 	if border~=nil then jcomponent.setBorder(border) end
 	local foreground_color = remove(props,"foreground_color")
@@ -102,7 +93,6 @@
 			jcomponent.add(child.java,child.constraints)
 		end
 	end
-	component.set_font = set_font
 	component._dont_gc = {}
 	function component.dont_gc(obj)
 		component._dont_gc[obj] = true
--- a/src/luan/modules/swing/Font.luan	Wed May 28 15:58:56 2025 -0600
+++ b/src/luan/modules/swing/Font.luan	Thu May 29 22:29:15 2025 -0600
@@ -13,12 +13,18 @@
 	size = TextAttribute.SIZE
 }
 
-function Font.get(attrs)
+local function to_java_attributes(attrs)
 	local jattrs = {}
 	for key, val in pairs(attrs) do
 		key = keys[key] or error("invalid font key: "..key)
 		jattrs[key] = val
 	end
+	return jattrs
+end
+Font.to_java_attributes = to_java_attributes
+
+function Font.get(attrs)
+	local jattrs = to_java_attributes(attrs)
 	return JFont.getFont(jattrs)
 end
 
--- a/src/luan/modules/swing/TextAreaLuan.java	Wed May 28 15:58:56 2025 -0600
+++ b/src/luan/modules/swing/TextAreaLuan.java	Thu May 29 22:29:15 2025 -0600
@@ -97,7 +97,7 @@
 
 	public TextAreaLuan() {
 		super();
-		//logger.info(getUI().toString());
+		//logger.info(""+getFont().getSize());
 		if( UIManager.getLookAndFeel().getName().startsWith("FlatLaf") ) {
 			setCaret(flatLafCaret);
 		}