[squeak-dev] The Trunk: Morphic-mt.2073.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Jan 24 11:12:54 UTC 2023


Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.2073.mcz

==================== Summary ====================

Name: Morphic-mt.2073
Author: mt
Time: 24 January 2023, 12:12:52.41521 pm
UUID: 92a7b762-9375-1043-9963-0c362137ce72
Ancestors: Morphic-mt.2072

Minor refactoring of label drawing in tree widgets. Also fixes that "trailing TAB" issue where label content got cut off.

=============== Diff against Morphic-mt.2072 ===============

Item was added:
+ ----- Method: IndentingListItemMorph>>drawLabelInColumnsOn:in: (in category 'drawing') -----
+ drawLabelInColumnsOn: aCanvas in: drawBounds
+ 	"Draw the receiver appearing in multiple columns. Use TAB character to move between columns."
+ 		
+ 	| columnScanner columnLeft columnRect columnData |
+ 	self assert: [container columns size > 1].
+ 	columnScanner := ReadStream on: contents asString.
+ 	container columns withIndexDo: [ :widthSpec :column |
+ 		| columnWidth |
+ 		"Compute first/next column offset."
+ 		column = 1
+ 			ifTrue: [columnLeft := drawBounds left]
+ 			ifFalse: [columnLeft := columnRect right + 5 px].
+ 		"Draw icon."
+ 		column = self class iconColumnIndex ifTrue: [
+ 			icon ifNotNil: [
+ 				aCanvas
+ 					translucentImage: icon
+ 					at: columnLeft @ (self top + (self height - icon height // 2)).
+ 				columnLeft := columnLeft + icon width + 2]].
+ 		"Compute drawing bounds for label portion."
+ 		columnWidth := self widthOfColumn: column.
+ 		column = 1 ifTrue: [ "Reduce width by indentation present in first column only"
+ 			columnWidth := columnWidth - (drawBounds left - self left) + self hMargin].
+ 		columnRect := columnLeft @ drawBounds top extent: columnWidth @ drawBounds height.
+ 		columnData := columnScanner upTo: Character tab.
+ 		"Draw label portion."
+ 		columnData ifNotEmpty: [
+ 			aCanvas drawString: columnData in: columnRect font: self fontToUse color: self colorToUse] ].
+ 
+ 	"Handle trailing TAB issue in string representation."
+ 	columnScanner upToEnd ifNotEmpty: [:rest |
+ 		columnRect := columnLeft + (self fontToUse widthOfString: columnData) @ drawBounds top extent: columnRect extent.
+ 		aCanvas drawString: String tab, rest in: columnRect font: self fontToUse color: self colorToUse].!

Item was added:
+ ----- Method: IndentingListItemMorph>>drawLabelOn:in: (in category 'drawing') -----
+ drawLabelOn: aCanvas in: drawBounds
+ 	
+ 	| labelBounds |
+ 	icon
+ 		ifNil: [labelBounds := drawBounds]
+ 		ifNotNil: [
+ 			aCanvas
+ 				translucentImage: icon
+ 				at: drawBounds left @ (self top + (self height - icon height // 2)).
+ 			labelBounds := drawBounds left: drawBounds left + icon width + 2].
+ 		
+ 	aCanvas
+ 		drawString: contents asString "i.e., the label"
+ 		in: labelBounds
+ 		font: self fontToUse
+ 		color: self colorToUse.!

Item was changed:
  ----- Method: IndentingListItemMorph>>drawOn: (in category 'drawing') -----
  drawOn: aCanvas
  	
+ 	| tRect sRect |
- 	| tRect sRect columnScanner columnLeft |
  	self backgroundColor ifNotNil: [:c |
  		aCanvas fillRectangle: self innerBounds color: c].
  
  	tRect := self toggleRectangle.	
  	self drawToggleOn: aCanvas in: tRect.
  
  	sRect := bounds withLeft: tRect right + self hMargin.
  	sRect := sRect top: sRect top + sRect bottom - self fontToUse height // 2.	
  	
+ 	(container columns isNil or: [(contents asString indexOf: Character tab) = 0])
+ 		ifTrue: [self drawLabelOn: aCanvas in: sRect]
+ 		ifFalse: [self drawLabelInColumnsOn: aCanvas in: sRect].!
- 	(container columns isNil or: [(contents asString indexOf: Character tab) = 0]) ifTrue: [
- 		icon ifNotNil: [
- 			aCanvas
- 				translucentImage: icon
- 				at: sRect left @ (self top + (self height - icon height // 2)).
- 			sRect := sRect left: sRect left + icon width + 2.
- 		].
- 		
- 		aCanvas drawString: contents asString in: sRect font: self fontToUse color: self colorToUse.
- 	
- 	] ifFalse: [
- 		columnLeft := sRect left.
- 		columnScanner := ReadStream on: contents asString.
- 		container columns withIndexDo: [ :widthSpec :column | | columnRect columnData columnWidth |
- 			"Draw icon."
- 			column = self class iconColumnIndex ifTrue: [
- 				icon ifNotNil: [
- 					aCanvas
- 						translucentImage: icon
- 						at: columnLeft @ (self top + (self height - icon height // 2)).
- 					columnLeft := columnLeft + icon width + 2]].
- 
- 			columnWidth := self widthOfColumn: column.
- 			columnRect := columnLeft @ sRect top extent: columnWidth @ sRect height.
- 			columnData := columnScanner upTo: Character tab.
- 			
- 			"Draw string."
- 			columnData ifNotEmpty: [
- 				aCanvas drawString: columnData in: columnRect font: self fontToUse color: self colorToUse].
- 
- 			"Compute next column offset."			
- 			columnLeft := columnRect right + 5.
- 			column = 1 ifTrue: [columnLeft := columnLeft - tRect right + self left].
- 			
- 		].
- 	]!



More information about the Squeak-dev mailing list