@@ -799,6 +799,11 @@ Blockly.BlockSvg.NOTCH_HEIGHT = 32;
799
799
* @const
800
800
*/
801
801
Blockly . BlockSvg . CORNER_RADIUS = 4 ;
802
+ /**
803
+ * Rounded corner radius.
804
+ * @const
805
+ */
806
+ Blockly . BlockSvg . HAT_CORNER_RADIUS = 16 ;
802
807
/**
803
808
* SVG path for drawing next/previous notch from left to right.
804
809
* @const
@@ -830,6 +835,20 @@ Blockly.BlockSvg.TOP_LEFT_CORNER =
830
835
'A ' + Blockly . BlockSvg . CORNER_RADIUS + ',' +
831
836
Blockly . BlockSvg . CORNER_RADIUS + ' 0 0,0 ' +
832
837
'0,' + Blockly . BlockSvg . CORNER_RADIUS ;
838
+ /**
839
+ * SVG start point for drawing the top-left corner.
840
+ * @const
841
+ */
842
+ Blockly . BlockSvg . HAT_TOP_LEFT_CORNER_START =
843
+ 'm ' + Blockly . BlockSvg . HAT_CORNER_RADIUS + ',0' ;
844
+ /**
845
+ * SVG path for drawing the rounded top-left corner.
846
+ * @const
847
+ */
848
+ Blockly . BlockSvg . HAT_TOP_LEFT_CORNER =
849
+ 'A ' + Blockly . BlockSvg . HAT_CORNER_RADIUS + ',' +
850
+ Blockly . BlockSvg . HAT_CORNER_RADIUS + ' 0 0,0 ' +
851
+ '0,' + Blockly . BlockSvg . HAT_CORNER_RADIUS ;
833
852
/**
834
853
* SVG path for drawing the top-left corner of a statement input.
835
854
* Includes the top notch, a horizontal space, and the rounded inside corner.
@@ -1554,13 +1573,13 @@ Blockly.BlockSvg.prototype.renderDraw_ = function(metrics) {
1554
1573
*/
1555
1574
Blockly . BlockSvg . prototype . renderDrawLeft_ =
1556
1575
function ( steps , connectionsXY , metrics ) {
1557
- // Position the cursor at the top-left starting point.
1558
- steps . push ( Blockly . BlockSvg . TOP_LEFT_CORNER_START ) ;
1559
- // Top-left rounded corner.
1560
- steps . push ( Blockly . BlockSvg . TOP_LEFT_CORNER ) ;
1561
1576
1562
1577
// Top edge.
1563
1578
if ( this . previousConnection ) {
1579
+ // Position the cursor at the top-left starting point.
1580
+ steps . push ( Blockly . BlockSvg . TOP_LEFT_CORNER_START ) ;
1581
+ // Top-left rounded corner.
1582
+ steps . push ( Blockly . BlockSvg . TOP_LEFT_CORNER ) ;
1564
1583
var cursorY = metrics . height - Blockly . BlockSvg . CORNER_RADIUS - 8 - Blockly . BlockSvg . NOTCH_HEIGHT ;
1565
1584
steps . push ( 'V' , cursorY ) ;
1566
1585
steps . push ( Blockly . BlockSvg . NOTCH_PATH_DOWN ) ;
@@ -1569,8 +1588,14 @@ Blockly.BlockSvg.prototype.renderDrawLeft_ =
1569
1588
var connectionY = connectionsXY . y + metrics . height - Blockly . BlockSvg . CORNER_RADIUS * 2 ;
1570
1589
this . previousConnection . moveTo ( connectionX , connectionY ) ;
1571
1590
// This connection will be tightened when the parent renders.
1591
+ steps . push ( 'V' , metrics . height - Blockly . BlockSvg . CORNER_RADIUS ) ;
1592
+ } else {
1593
+ // Position the cursor at the top-left starting point.
1594
+ steps . push ( Blockly . BlockSvg . HAT_TOP_LEFT_CORNER_START ) ;
1595
+ // Top-left rounded corner.
1596
+ steps . push ( Blockly . BlockSvg . HAT_TOP_LEFT_CORNER ) ;
1597
+ steps . push ( 'V' , metrics . height - Blockly . BlockSvg . HAT_CORNER_RADIUS ) ;
1572
1598
}
1573
- steps . push ( 'V' , metrics . height - Blockly . BlockSvg . CORNER_RADIUS ) ;
1574
1599
this . height = metrics . height ;
1575
1600
} ;
1576
1601
@@ -1587,12 +1612,20 @@ Blockly.BlockSvg.prototype.renderDrawLeft_ =
1587
1612
Blockly . BlockSvg . prototype . renderDrawBottom_ = function ( steps ,
1588
1613
connectionsXY , metrics ) {
1589
1614
1590
- // Has statement
1591
- if ( metrics . hasStatement ) {
1615
+ if ( this . previousConnection ) {
1592
1616
steps . push ( 'a' , Blockly . BlockSvg . CORNER_RADIUS + ',' +
1593
1617
Blockly . BlockSvg . CORNER_RADIUS + ' 0 0,0 ' +
1594
1618
Blockly . BlockSvg . CORNER_RADIUS + ',' +
1595
1619
Blockly . BlockSvg . CORNER_RADIUS ) ;
1620
+ } else {
1621
+ steps . push ( 'a' , Blockly . BlockSvg . HAT_CORNER_RADIUS + ',' +
1622
+ Blockly . BlockSvg . HAT_CORNER_RADIUS + ' 0 0,0 ' +
1623
+ Blockly . BlockSvg . HAT_CORNER_RADIUS + ',' +
1624
+ Blockly . BlockSvg . HAT_CORNER_RADIUS ) ;
1625
+ }
1626
+
1627
+ // Has statement
1628
+ if ( metrics . hasStatement ) {
1596
1629
steps . push ( 'h' , 8 ) ;
1597
1630
steps . push ( 'a' , Blockly . BlockSvg . CORNER_RADIUS + ',' +
1598
1631
Blockly . BlockSvg . CORNER_RADIUS + ' 0 0,0 ' +
@@ -1613,6 +1646,10 @@ Blockly.BlockSvg.prototype.renderDrawBottom_ = function(steps,
1613
1646
steps . push ( 'v' , 50 - ( Blockly . BlockSvg . CORNER_RADIUS * 2 ) - Blockly . BlockSvg . NOTCH_HEIGHT - 8 ) ;
1614
1647
steps . push ( Blockly . BlockSvg . NOTCH_PATH_DOWN ) ;
1615
1648
steps . push ( 'v' , 8 ) ;
1649
+ steps . push ( 'a' , Blockly . BlockSvg . CORNER_RADIUS + ',' +
1650
+ Blockly . BlockSvg . CORNER_RADIUS + ' 0 0,0 ' +
1651
+ Blockly . BlockSvg . CORNER_RADIUS + ',' +
1652
+ Blockly . BlockSvg . CORNER_RADIUS ) ;
1616
1653
1617
1654
// // Nested statement.
1618
1655
// var input = row[0];
@@ -1658,12 +1695,11 @@ Blockly.BlockSvg.prototype.renderDrawBottom_ = function(steps,
1658
1695
// }
1659
1696
}
1660
1697
1661
- // Render corner
1662
- steps . push ( 'a' , Blockly . BlockSvg . CORNER_RADIUS + ',' +
1663
- Blockly . BlockSvg . CORNER_RADIUS + ' 0 0,0 ' +
1664
- Blockly . BlockSvg . CORNER_RADIUS + ',' +
1665
- Blockly . BlockSvg . CORNER_RADIUS ) ;
1666
- steps . push ( 'H' , metrics . width - Blockly . BlockSvg . CORNER_RADIUS ) ;
1698
+ if ( this . nextConnection ) {
1699
+ steps . push ( 'H' , metrics . width - Blockly . BlockSvg . CORNER_RADIUS ) ;
1700
+ } else {
1701
+ steps . push ( 'H' , metrics . width - Blockly . BlockSvg . HAT_CORNER_RADIUS ) ;
1702
+ }
1667
1703
} ;
1668
1704
1669
1705
/**
@@ -1675,10 +1711,17 @@ Blockly.BlockSvg.prototype.renderDrawBottom_ = function(steps,
1675
1711
*/
1676
1712
Blockly . BlockSvg . prototype . renderDrawRight_ =
1677
1713
function ( steps , connectionsXY , metrics ) {
1678
- steps . push ( 'a' , Blockly . BlockSvg . CORNER_RADIUS + ',' +
1679
- Blockly . BlockSvg . CORNER_RADIUS + ' 0 0,0 ' +
1680
- Blockly . BlockSvg . CORNER_RADIUS + ',-' +
1681
- Blockly . BlockSvg . CORNER_RADIUS ) ;
1714
+ if ( this . nextConnection ) {
1715
+ steps . push ( 'a' , Blockly . BlockSvg . CORNER_RADIUS + ',' +
1716
+ Blockly . BlockSvg . CORNER_RADIUS + ' 0 0,0 ' +
1717
+ Blockly . BlockSvg . CORNER_RADIUS + ',-' +
1718
+ Blockly . BlockSvg . CORNER_RADIUS ) ;
1719
+ } else {
1720
+ steps . push ( 'a' , Blockly . BlockSvg . HAT_CORNER_RADIUS + ',' +
1721
+ Blockly . BlockSvg . HAT_CORNER_RADIUS + ' 0 0,0 ' +
1722
+ Blockly . BlockSvg . HAT_CORNER_RADIUS + ',-' +
1723
+ Blockly . BlockSvg . HAT_CORNER_RADIUS ) ;
1724
+ }
1682
1725
steps . push ( 'v' , - 8 ) ;
1683
1726
1684
1727
if ( this . nextConnection ) {
@@ -1697,8 +1740,10 @@ Blockly.BlockSvg.prototype.renderDrawRight_ =
1697
1740
this . nextConnection . tighten_ ( ) ;
1698
1741
}
1699
1742
this . height += 4 ; // Height of tab.
1743
+ steps . push ( 'V' , Blockly . BlockSvg . CORNER_RADIUS ) ;
1744
+ } else {
1745
+ steps . push ( 'V' , Blockly . BlockSvg . HAT_CORNER_RADIUS ) ;
1700
1746
}
1701
- steps . push ( 'V' , Blockly . BlockSvg . CORNER_RADIUS ) ;
1702
1747
} ;
1703
1748
1704
1749
/**
@@ -1710,9 +1755,16 @@ Blockly.BlockSvg.prototype.renderDrawRight_ =
1710
1755
*/
1711
1756
Blockly . BlockSvg . prototype . renderDrawTop_ =
1712
1757
function ( steps , connectionsXY , metrics ) {
1713
- steps . push ( 'a' , Blockly . BlockSvg . CORNER_RADIUS + ',' +
1714
- Blockly . BlockSvg . CORNER_RADIUS + ' 0 0,0 -' +
1715
- Blockly . BlockSvg . CORNER_RADIUS + ',-' +
1716
- Blockly . BlockSvg . CORNER_RADIUS ) ;
1758
+ if ( this . nextConnection ) {
1759
+ steps . push ( 'a' , Blockly . BlockSvg . CORNER_RADIUS + ',' +
1760
+ Blockly . BlockSvg . CORNER_RADIUS + ' 0 0,0 -' +
1761
+ Blockly . BlockSvg . CORNER_RADIUS + ',-' +
1762
+ Blockly . BlockSvg . CORNER_RADIUS ) ;
1763
+ } else {
1764
+ steps . push ( 'a' , Blockly . BlockSvg . HAT_CORNER_RADIUS + ',' +
1765
+ Blockly . BlockSvg . HAT_CORNER_RADIUS + ' 0 0,0 -' +
1766
+ Blockly . BlockSvg . HAT_CORNER_RADIUS + ',-' +
1767
+ Blockly . BlockSvg . HAT_CORNER_RADIUS ) ;
1768
+ }
1717
1769
steps . push ( 'z' ) ;
1718
1770
} ;
0 commit comments