forked from mbk-lab/rui_orig
				
			Bug fixing and optimisation
This commit is contained in:
		
							parent
							
								
									9478b1ee4f
								
							
						
					
					
						commit
						be2701e59d
					
				|  | @ -73,6 +73,13 @@ func newBorderProperty(value interface{}) BorderProperty { | |||
| 		case BorderProperty: | ||||
| 			return value | ||||
| 
 | ||||
| 		case DataNode: | ||||
| 			if value.Type() == ObjectNode { | ||||
| 				_ = border.setBorderObject(value.Object()) | ||||
| 			} else { | ||||
| 				return nil | ||||
| 			} | ||||
| 
 | ||||
| 		case DataObject: | ||||
| 			_ = border.setBorderObject(value) | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										15
									
								
								bounds.go
								
								
								
								
							
							
						
						
									
										15
									
								
								bounds.go
								
								
								
								
							|  | @ -261,7 +261,20 @@ func (properties *propertyList) setBounds(tag string, value interface{}) bool { | |||
| 			properties.properties[tag] = value | ||||
| 
 | ||||
| 		case Bounds: | ||||
| 			properties.properties[tag] = value | ||||
| 			bounds := NewBoundsProperty(nil) | ||||
| 			if value.Top.Type != Auto { | ||||
| 				bounds.Set(Top, value.Top) | ||||
| 			} | ||||
| 			if value.Right.Type != Auto { | ||||
| 				bounds.Set(Right, value.Right) | ||||
| 			} | ||||
| 			if value.Bottom.Type != Auto { | ||||
| 				bounds.Set(Bottom, value.Bottom) | ||||
| 			} | ||||
| 			if value.Left.Type != Auto { | ||||
| 				bounds.Set(Left, value.Left) | ||||
| 			} | ||||
| 			properties.properties[tag] = bounds | ||||
| 
 | ||||
| 		case BoundsProperty: | ||||
| 			properties.properties[tag] = value | ||||
|  |  | |||
|  | @ -235,7 +235,7 @@ func GetColorPickerValue(view View, subviewID string) Color { | |||
| 			return result | ||||
| 		} | ||||
| 		for _, tag := range []string{Value, ColorTag} { | ||||
| 			if value, ok := valueFromStyle(view, tag); ok { | ||||
| 			if value := valueFromStyle(view, tag); value != nil { | ||||
| 				if result, ok := valueToColor(value, view.Session()); ok { | ||||
| 					return result | ||||
| 				} | ||||
|  |  | |||
|  | @ -186,7 +186,7 @@ func GetColumnSeparator(view View, subviewID string) ViewBorder { | |||
| 	if view != nil { | ||||
| 		value := view.Get(ColumnSeparator) | ||||
| 		if value == nil { | ||||
| 			value, _ = valueFromStyle(view, ColumnSeparator) | ||||
| 			value = valueFromStyle(view, ColumnSeparator) | ||||
| 		} | ||||
| 
 | ||||
| 		if value != nil { | ||||
|  |  | |||
|  | @ -361,7 +361,7 @@ func getDateProperty(view View, mainTag, shortTag string) (time.Time, bool) { | |||
| 			return result, true | ||||
| 		} | ||||
| 
 | ||||
| 		if value, ok := valueFromStyle(view, shortTag); ok { | ||||
| 		if value := valueFromStyle(view, shortTag); value != nil { | ||||
| 			if result, ok := valueToTime(value); ok { | ||||
| 				return result, true | ||||
| 			} | ||||
|  |  | |||
							
								
								
									
										16
									
								
								editView.go
								
								
								
								
							
							
						
						
									
										16
									
								
								editView.go
								
								
								
								
							|  | @ -568,9 +568,11 @@ func GetHint(view View, subviewID string) string { | |||
| 		if text, ok := stringProperty(view, Hint, view.Session()); ok { | ||||
| 			return text | ||||
| 		} | ||||
| 		if text, ok := valueFromStyle(view, Hint); ok { | ||||
| 			if text, ok = view.Session().resolveConstants(text); ok { | ||||
| 				return text | ||||
| 		if value := valueFromStyle(view, Hint); value != nil { | ||||
| 			if text, ok := value.(string); ok { | ||||
| 				if text, ok = view.Session().resolveConstants(text); ok { | ||||
| 					return text | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | @ -659,9 +661,11 @@ func GetEditViewPattern(view View, subviewID string) string { | |||
| 		if pattern, ok := stringProperty(view, EditViewPattern, view.Session()); ok { | ||||
| 			return pattern | ||||
| 		} | ||||
| 		if pattern, ok := valueFromStyle(view, EditViewPattern); ok { | ||||
| 			if pattern, ok = view.Session().resolveConstants(pattern); ok { | ||||
| 				return pattern | ||||
| 		if value := valueFromStyle(view, EditViewPattern); value != nil { | ||||
| 			if pattern, ok := value.(string); ok { | ||||
| 				if pattern, ok = view.Session().resolveConstants(pattern); ok { | ||||
| 					return pattern | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -260,8 +260,11 @@ func (picker *filePickerData) htmlTag() string { | |||
| func (picker *filePickerData) acceptCSS() string { | ||||
| 	accept, ok := stringProperty(picker, Accept, picker.Session()) | ||||
| 	if !ok { | ||||
| 		accept, ok = valueFromStyle(picker, Accept) | ||||
| 		if value := valueFromStyle(picker, Accept); value != nil { | ||||
| 			accept, ok = value.(string) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if ok { | ||||
| 		buffer := allocStringBuilder() | ||||
| 		defer freeStringBuilder(buffer) | ||||
|  | @ -414,7 +417,9 @@ func GetFilePickerAccept(view View, subviewID string) []string { | |||
| 	if view != nil { | ||||
| 		accept, ok := stringProperty(view, Accept, view.Session()) | ||||
| 		if !ok { | ||||
| 			accept, ok = valueFromStyle(view, Accept) | ||||
| 			if value := valueFromStyle(view, Accept); value != nil { | ||||
| 				accept, ok = value.(string) | ||||
| 			} | ||||
| 		} | ||||
| 		if ok { | ||||
| 			result := strings.Split(accept, ",") | ||||
|  |  | |||
|  | @ -139,7 +139,7 @@ func GetListOrientation(view View, subviewID string) int { | |||
| 			return orientation | ||||
| 		} | ||||
| 
 | ||||
| 		if value, ok := valueFromStyle(view, Orientation); ok { | ||||
| 		if value := valueFromStyle(view, Orientation); value != nil { | ||||
| 			if orientation, ok := valueToOrientation(value, view.Session()); ok { | ||||
| 				return orientation | ||||
| 			} | ||||
|  |  | |||
							
								
								
									
										24
									
								
								session.go
								
								
								
								
							
							
						
						
									
										24
									
								
								session.go
								
								
								
								
							|  | @ -80,8 +80,7 @@ type Session interface { | |||
| 
 | ||||
| 	viewByHTMLID(id string) View | ||||
| 	nextViewID() string | ||||
| 	styleProperty(styleTag, property string) (string, bool) | ||||
| 	stylePropertyNode(styleTag, propertyTag string) DataNode | ||||
| 	styleProperty(styleTag, property string) interface{} | ||||
| 
 | ||||
| 	setBrige(events chan DataObject, brige WebBrige) | ||||
| 	writeInitScript(writer *strings.Builder) | ||||
|  | @ -214,26 +213,11 @@ func (session *sessionData) close() { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (session *sessionData) styleProperty(styleTag, propertyTag string) (string, bool) { | ||||
| 	style := session.getCurrentTheme().style(styleTag) | ||||
| 	if value, ok := style[propertyTag]; ok { | ||||
| 		if text, ok := value.(string); ok { | ||||
| 			return session.resolveConstants(text) | ||||
| 		} | ||||
| func (session *sessionData) styleProperty(styleTag, propertyTag string) interface{} { | ||||
| 	if style := session.getCurrentTheme().style(styleTag); style != nil { | ||||
| 		return style.getRaw(propertyTag) | ||||
| 	} | ||||
| 
 | ||||
| 	//errorLogF(`property "%v" not found`, propertyTag)
 | ||||
| 	return "", false | ||||
| } | ||||
| 
 | ||||
| func (session *sessionData) stylePropertyNode(styleTag, propertyTag string) DataNode { | ||||
| 	style := session.getCurrentTheme().style(styleTag) | ||||
| 	if value, ok := style[propertyTag]; ok { | ||||
| 		if node, ok := value.(DataNode); ok { | ||||
| 			return node | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										106
									
								
								tableView.go
								
								
								
								
							
							
						
						
									
										106
									
								
								tableView.go
								
								
								
								
							|  | @ -1267,72 +1267,68 @@ func (table *tableViewData) htmlSubviews(self View, buffer *strings.Builder) { | |||
| } | ||||
| 
 | ||||
| func (table *tableViewData) cellPaddingFromStyle(style string) BoundsProperty { | ||||
| 	session := table.Session() | ||||
| 	var result BoundsProperty = nil | ||||
| 	if value := table.Session().styleProperty(style, CellPadding); value != nil { | ||||
| 		switch value := value.(type) { | ||||
| 		case SizeUnit: | ||||
| 			return NewBoundsProperty(Params{ | ||||
| 				Top:    value, | ||||
| 				Right:  value, | ||||
| 				Bottom: value, | ||||
| 				Left:   value, | ||||
| 			}) | ||||
| 
 | ||||
| 	if node := session.stylePropertyNode(style, CellPadding); node != nil && node.Type() == ObjectNode { | ||||
| 		for _, tag := range []string{Left, Right, Top, Bottom} { | ||||
| 			if node := node.Object().PropertyWithTag(tag); node != nil && node.Type() == TextNode { | ||||
| 				if result == nil { | ||||
| 					result = NewBoundsProperty(nil) | ||||
| 		case BoundsProperty: | ||||
| 			return value | ||||
| 
 | ||||
| 		case string: | ||||
| 			if value, ok := table.Session().resolveConstants(value); ok { | ||||
| 				if strings.Contains(value, ",") { | ||||
| 					values := split4Values(value) | ||||
| 					switch len(values) { | ||||
| 					case 1: | ||||
| 						value = values[0] | ||||
| 
 | ||||
| 					case 4: | ||||
| 						result := NewBoundsProperty(nil) | ||||
| 						n := 0 | ||||
| 						for i, tag := range []string{Top, Right, Bottom, Left} { | ||||
| 							if size, ok := StringToSizeUnit(values[i]); ok && size.Type != Auto { | ||||
| 								result.Set(tag, size) | ||||
| 								n++ | ||||
| 							} | ||||
| 						} | ||||
| 						if n > 0 { | ||||
| 							return result | ||||
| 						} | ||||
| 						return nil | ||||
| 
 | ||||
| 					default: | ||||
| 						return nil | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 				if size, ok := StringToSizeUnit(value); ok && size.Type != Auto { | ||||
| 					return NewBoundsProperty(Params{ | ||||
| 						Top:    size, | ||||
| 						Right:  size, | ||||
| 						Bottom: size, | ||||
| 						Left:   size, | ||||
| 					}) | ||||
| 				} | ||||
| 				result.Set(tag, node.Text()) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	for _, tag := range []string{CellPaddingLeft, CellPaddingRight, CellPaddingTop, CellPaddingBottom} { | ||||
| 		if value, ok := session.styleProperty(style, CellPadding); ok { | ||||
| 			if result == nil { | ||||
| 				result = NewBoundsProperty(nil) | ||||
| 			} | ||||
| 			result.Set(tag, value) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return result | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (table *tableViewData) cellBorderFromStyle(style string) BorderProperty { | ||||
| 
 | ||||
| 	border := new(borderProperty) | ||||
| 	border.properties = map[string]interface{}{} | ||||
| 
 | ||||
| 	session := table.Session() | ||||
| 	if node := session.stylePropertyNode(style, CellBorder); node != nil && node.Type() == ObjectNode { | ||||
| 		border.setBorderObject(node.Object()) | ||||
| 	} | ||||
| 
 | ||||
| 	for _, tag := range []string{ | ||||
| 		CellBorderLeft, | ||||
| 		CellBorderRight, | ||||
| 		CellBorderTop, | ||||
| 		CellBorderBottom, | ||||
| 		CellBorderStyle, | ||||
| 		CellBorderLeftStyle, | ||||
| 		CellBorderRightStyle, | ||||
| 		CellBorderTopStyle, | ||||
| 		CellBorderBottomStyle, | ||||
| 		CellBorderWidth, | ||||
| 		CellBorderLeftWidth, | ||||
| 		CellBorderRightWidth, | ||||
| 		CellBorderTopWidth, | ||||
| 		CellBorderBottomWidth, | ||||
| 		CellBorderColor, | ||||
| 		CellBorderLeftColor, | ||||
| 		CellBorderRightColor, | ||||
| 		CellBorderTopColor, | ||||
| 		CellBorderBottomColor, | ||||
| 	} { | ||||
| 		if value, ok := session.styleProperty(style, tag); ok { | ||||
| 			border.Set(tag, value) | ||||
| 	if value := table.Session().styleProperty(style, CellBorder); value != nil { | ||||
| 		if border, ok := value.(BorderProperty); ok { | ||||
| 			return border | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if len(border.properties) == 0 { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return border | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (table *tableViewData) getCellBorder() BorderProperty { | ||||
|  |  | |||
							
								
								
									
										100
									
								
								theme.go
								
								
								
								
							
							
						
						
									
										100
									
								
								theme.go
								
								
								
								
							|  | @ -1,6 +1,7 @@ | |||
| package rui | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"sort" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
|  | @ -16,7 +17,7 @@ type MediaStyle struct { | |||
| 	Orientation int | ||||
| 	MaxWidth    int | ||||
| 	MaxHeight   int | ||||
| 	Styles      map[string]Params | ||||
| 	Styles      map[string]ViewStyle | ||||
| } | ||||
| 
 | ||||
| type theme struct { | ||||
|  | @ -27,11 +28,12 @@ type theme struct { | |||
| 	darkColors     map[string]string | ||||
| 	images         map[string]string | ||||
| 	darkImages     map[string]string | ||||
| 	styles         map[string]Params | ||||
| 	styles         map[string]ViewStyle | ||||
| 	mediaStyles    []MediaStyle | ||||
| } | ||||
| 
 | ||||
| type Theme interface { | ||||
| 	fmt.Stringer | ||||
| 	Name() string | ||||
| 	Constant(tag string) (string, string) | ||||
| 	SetConstant(tag string, value, touchUIValue string) | ||||
|  | @ -50,7 +52,7 @@ type Theme interface { | |||
| 	constant(tag string, touchUI bool) string | ||||
| 	color(tag string, darkUI bool) string | ||||
| 	image(tag string, darkUI bool) string | ||||
| 	style(tag string) Params | ||||
| 	style(tag string) ViewStyle | ||||
| 	cssText(session Session) string | ||||
| 	data() *theme | ||||
| } | ||||
|  | @ -87,7 +89,7 @@ func parseMediaRule(text string) (MediaStyle, bool) { | |||
| 		Orientation: DefaultMedia, | ||||
| 		MaxWidth:    0, | ||||
| 		MaxHeight:   0, | ||||
| 		Styles:      map[string]Params{}, | ||||
| 		Styles:      map[string]ViewStyle{}, | ||||
| 	} | ||||
| 
 | ||||
| 	elements := strings.Split(text, ":") | ||||
|  | @ -170,7 +172,7 @@ func (theme *theme) init() { | |||
| 	theme.darkColors = map[string]string{} | ||||
| 	theme.images = map[string]string{} | ||||
| 	theme.darkImages = map[string]string{} | ||||
| 	theme.styles = map[string]Params{} | ||||
| 	theme.styles = map[string]ViewStyle{} | ||||
| 	theme.mediaStyles = []MediaStyle{} | ||||
| } | ||||
| 
 | ||||
|  | @ -352,12 +354,12 @@ func (theme *theme) cssText(session Session) string { | |||
| 	var builder cssStyleBuilder | ||||
| 	builder.init() | ||||
| 
 | ||||
| 	for tag, obj := range theme.styles { | ||||
| 		var style viewStyle | ||||
| 	for tag, style := range theme.styles { | ||||
| 		/*var style viewStyle | ||||
| 		style.init() | ||||
| 		for tag, value := range obj { | ||||
| 			style.Set(tag, value) | ||||
| 		} | ||||
| 		}*/ | ||||
| 		builder.startStyle(tag) | ||||
| 		style.cssViewStyle(&builder, session) | ||||
| 		builder.endStyle() | ||||
|  | @ -365,12 +367,12 @@ func (theme *theme) cssText(session Session) string { | |||
| 
 | ||||
| 	for _, media := range theme.mediaStyles { | ||||
| 		builder.startMedia(media.cssText()) | ||||
| 		for tag, obj := range media.Styles { | ||||
| 			var style viewStyle | ||||
| 		for tag, style := range media.Styles { | ||||
| 			/*var style viewStyle | ||||
| 			style.init() | ||||
| 			for tag, value := range obj { | ||||
| 				style.Set(tag, value) | ||||
| 			} | ||||
| 			}*/ | ||||
| 			builder.startStyle(tag) | ||||
| 			style.cssViewStyle(&builder, session) | ||||
| 			builder.endStyle() | ||||
|  | @ -404,7 +406,7 @@ func (theme *theme) addData(data DataObject) { | |||
| func (theme *theme) parseThemeData(data DataObject) { | ||||
| 	count := data.PropertyCount() | ||||
| 
 | ||||
| 	objToParams := func(obj DataObject) Params { | ||||
| 	objToStyle := func(obj DataObject) ViewStyle { | ||||
| 		params := Params{} | ||||
| 		for i := 0; i < obj.PropertyCount(); i++ { | ||||
| 			if node := obj.Property(i); node != nil { | ||||
|  | @ -420,7 +422,7 @@ func (theme *theme) parseThemeData(data DataObject) { | |||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		return params | ||||
| 		return NewViewStyle(params) | ||||
| 	} | ||||
| 
 | ||||
| 	for i := 0; i < count; i++ { | ||||
|  | @ -504,7 +506,7 @@ func (theme *theme) parseThemeData(data DataObject) { | |||
| 					for k := 0; k < arraySize; k++ { | ||||
| 						if element := d.ArrayElement(k); element != nil && element.IsObject() { | ||||
| 							if obj := element.Object(); obj != nil { | ||||
| 								theme.styles[obj.Tag()] = objToParams(obj) | ||||
| 								theme.styles[obj.Tag()] = objToStyle(obj) | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
|  | @ -517,7 +519,7 @@ func (theme *theme) parseThemeData(data DataObject) { | |||
| 						for k := 0; k < arraySize; k++ { | ||||
| 							if element := d.ArrayElement(k); element != nil && element.IsObject() { | ||||
| 								if obj := element.Object(); obj != nil { | ||||
| 									rule.Styles[obj.Tag()] = objToParams(obj) | ||||
| 									rule.Styles[obj.Tag()] = objToStyle(obj) | ||||
| 								} | ||||
| 							} | ||||
| 						} | ||||
|  | @ -586,10 +588,74 @@ func (theme *theme) image(tag string, darkUI bool) string { | |||
| 	return result | ||||
| } | ||||
| 
 | ||||
| func (theme *theme) style(tag string) Params { | ||||
| func (theme *theme) style(tag string) ViewStyle { | ||||
| 	if style, ok := theme.styles[tag]; ok { | ||||
| 		return style | ||||
| 	} | ||||
| 
 | ||||
| 	return Params{} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (theme *theme) String() string { | ||||
| 	buffer := allocStringBuilder() | ||||
| 	defer freeStringBuilder(buffer) | ||||
| 
 | ||||
| 	writeString := func(text string) { | ||||
| 		if strings.ContainsAny(text, " \t\n\r\\\"'`,;{}[]()") { | ||||
| 			replace := []struct{ old, new string }{ | ||||
| 				{old: "\\", new: `\\`}, | ||||
| 				{old: "\t", new: `\t`}, | ||||
| 				{old: "\r", new: `\r`}, | ||||
| 				{old: "\n", new: `\n`}, | ||||
| 				{old: "\"", new: `\"`}, | ||||
| 			} | ||||
| 			for _, s := range replace { | ||||
| 				text = strings.Replace(text, s.old, s.new, -1) | ||||
| 			} | ||||
| 			buffer.WriteRune('"') | ||||
| 			buffer.WriteString(text) | ||||
| 			buffer.WriteRune('"') | ||||
| 		} else { | ||||
| 			buffer.WriteString(text) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	writeConstants := func(tag string, constants map[string]string) { | ||||
| 		count := len(constants) | ||||
| 		if count == 0 { | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		buffer.WriteString("\t") | ||||
| 		buffer.WriteString(tag) | ||||
| 		buffer.WriteString(" = _{\n") | ||||
| 
 | ||||
| 		tags := make([]string, 0, count) | ||||
| 		for name := range constants { | ||||
| 			tags = append(tags, name) | ||||
| 		} | ||||
| 		sort.Strings(tags) | ||||
| 		for _, name := range tags { | ||||
| 			if value, ok := constants[name]; ok && value != "" { | ||||
| 				buffer.WriteString("\t\t") | ||||
| 				writeString(name) | ||||
| 				buffer.WriteString(" = ") | ||||
| 				writeString(value) | ||||
| 				buffer.WriteString(",\n") | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		buffer.WriteString("\t},\n") | ||||
| 	} | ||||
| 
 | ||||
| 	buffer.WriteString("theme {\n") | ||||
| 	writeConstants("colors", theme.colors) | ||||
| 	writeConstants("colors:dark", theme.darkColors) | ||||
| 	writeConstants("images", theme.images) | ||||
| 	writeConstants("images:dark", theme.darkImages) | ||||
| 	writeConstants("constants", theme.constants) | ||||
| 	writeConstants("constants:touch", theme.touchConstants) | ||||
| 
 | ||||
| 	buffer.WriteString("}\n") | ||||
| 	return buffer.String() | ||||
| } | ||||
|  |  | |||
|  | @ -361,7 +361,7 @@ func getTimeProperty(view View, mainTag, shortTag string) (time.Time, bool) { | |||
| 			return result, true | ||||
| 		} | ||||
| 
 | ||||
| 		if value, ok := valueFromStyle(view, shortTag); ok { | ||||
| 		if value := valueFromStyle(view, shortTag); value != nil { | ||||
| 			if result, ok := valueToTime(value); ok { | ||||
| 				return result, true | ||||
| 			} | ||||
|  |  | |||
							
								
								
									
										32
									
								
								viewUtils.go
								
								
								
								
							
							
						
						
									
										32
									
								
								viewUtils.go
								
								
								
								
							|  | @ -410,8 +410,10 @@ func GetFontName(view View, subviewID string) string { | |||
| 		if font, ok := stringProperty(view, FontName, view.Session()); ok { | ||||
| 			return font | ||||
| 		} | ||||
| 		if font, ok := valueFromStyle(view, FontName); ok { | ||||
| 			return font | ||||
| 		if value := valueFromStyle(view, FontName); value != nil { | ||||
| 			if font, ok := value.(string); ok { | ||||
| 				return font | ||||
| 			} | ||||
| 		} | ||||
| 		if parent := view.Parent(); parent != nil { | ||||
| 			return GetFontName(parent, "") | ||||
|  | @ -784,7 +786,7 @@ func GetRow(view View, subviewID string) Range { | |||
| 		if result, ok := rangeProperty(view, Row, session); ok { | ||||
| 			return result | ||||
| 		} | ||||
| 		if value, ok := valueFromStyle(view, Row); ok { | ||||
| 		if value := valueFromStyle(view, Row); value != nil { | ||||
| 			if result, ok := valueToRange(value, session); ok { | ||||
| 				return result | ||||
| 			} | ||||
|  | @ -804,7 +806,7 @@ func GetColumn(view View, subviewID string) Range { | |||
| 		if result, ok := rangeProperty(view, Column, session); ok { | ||||
| 			return result | ||||
| 		} | ||||
| 		if value, ok := valueFromStyle(view, Column); ok { | ||||
| 		if value := valueFromStyle(view, Column); value != nil { | ||||
| 			if result, ok := valueToRange(value, session); ok { | ||||
| 				return result | ||||
| 			} | ||||
|  | @ -954,20 +956,20 @@ func GetNotTranslate(view View, subviewID string) bool { | |||
| 	return false | ||||
| } | ||||
| 
 | ||||
| func valueFromStyle(view View, tag string) (string, bool) { | ||||
| func valueFromStyle(view View, tag string) interface{} { | ||||
| 	session := view.Session() | ||||
| 	getValue := func(styleTag string) (string, bool) { | ||||
| 	getValue := func(styleTag string) interface{} { | ||||
| 		if style, ok := stringProperty(view, styleTag, session); ok { | ||||
| 			if style, ok := session.resolveConstants(style); ok { | ||||
| 				return session.styleProperty(style, tag) | ||||
| 			} | ||||
| 		} | ||||
| 		return "", false | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	if IsDisabled(view, "") { | ||||
| 		if value, ok := getValue(StyleDisabled); ok { | ||||
| 			return value, true | ||||
| 		if value := getValue(StyleDisabled); value != nil { | ||||
| 			return value | ||||
| 		} | ||||
| 	} | ||||
| 	return getValue(Style) | ||||
|  | @ -977,7 +979,7 @@ func sizeStyledProperty(view View, tag string) (SizeUnit, bool) { | |||
| 	if value, ok := sizeProperty(view, tag, view.Session()); ok { | ||||
| 		return value, true | ||||
| 	} | ||||
| 	if value, ok := valueFromStyle(view, tag); ok { | ||||
| 	if value := valueFromStyle(view, tag); value != nil { | ||||
| 		return valueToSizeUnit(value, view.Session()) | ||||
| 	} | ||||
| 	return AutoSize(), false | ||||
|  | @ -987,7 +989,7 @@ func enumStyledProperty(view View, tag string, defaultValue int) (int, bool) { | |||
| 	if value, ok := enumProperty(view, tag, view.Session(), defaultValue); ok { | ||||
| 		return value, true | ||||
| 	} | ||||
| 	if value, ok := valueFromStyle(view, tag); ok { | ||||
| 	if value := valueFromStyle(view, tag); value != nil { | ||||
| 		return valueToEnum(value, tag, view.Session(), defaultValue) | ||||
| 	} | ||||
| 	return defaultValue, false | ||||
|  | @ -997,7 +999,7 @@ func boolStyledProperty(view View, tag string) (bool, bool) { | |||
| 	if value, ok := boolProperty(view, tag, view.Session()); ok { | ||||
| 		return value, true | ||||
| 	} | ||||
| 	if value, ok := valueFromStyle(view, tag); ok { | ||||
| 	if value := valueFromStyle(view, tag); value != nil { | ||||
| 		return valueToBool(value, view.Session()) | ||||
| 	} | ||||
| 	return false, false | ||||
|  | @ -1007,7 +1009,7 @@ func intStyledProperty(view View, tag string, defaultValue int) (int, bool) { | |||
| 	if value, ok := intProperty(view, tag, view.Session(), defaultValue); ok { | ||||
| 		return value, true | ||||
| 	} | ||||
| 	if value, ok := valueFromStyle(view, tag); ok { | ||||
| 	if value := valueFromStyle(view, tag); value != nil { | ||||
| 		return valueToInt(value, view.Session(), defaultValue) | ||||
| 	} | ||||
| 	return defaultValue, false | ||||
|  | @ -1017,7 +1019,7 @@ func floatStyledProperty(view View, tag string, defaultValue float64) (float64, | |||
| 	if value, ok := floatProperty(view, tag, view.Session(), defaultValue); ok { | ||||
| 		return value, true | ||||
| 	} | ||||
| 	if value, ok := valueFromStyle(view, tag); ok { | ||||
| 	if value := valueFromStyle(view, tag); value != nil { | ||||
| 		return valueToFloat(value, view.Session(), defaultValue) | ||||
| 	} | ||||
| 
 | ||||
|  | @ -1028,7 +1030,7 @@ func colorStyledProperty(view View, tag string) (Color, bool) { | |||
| 	if value, ok := colorProperty(view, tag, view.Session()); ok { | ||||
| 		return value, true | ||||
| 	} | ||||
| 	if value, ok := valueFromStyle(view, tag); ok { | ||||
| 	if value := valueFromStyle(view, tag); value != nil { | ||||
| 		return valueToColor(value, view.Session()) | ||||
| 	} | ||||
| 	return Color(0), false | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue