                 let totalGaps = (sideEdges * CGFloat(2)) + (keyGap * CGFloat(mostKeysInRow - 1))
                 return (bounds.width - totalGaps) / CGFloat(mostKeysInRow)
             }()
-            
-            let flexibleEndRowM = (isLandscape ? layoutConstants.flexibleEndRowTotalWidthToKeyWidthMLandscape : layoutConstants.flexibleEndRowTotalWidthToKeyWidthMPortrait)
-            let flexibleEndRowC = (isLandscape ? layoutConstants.flexibleEndRowTotalWidthToKeyWidthCLandscape : layoutConstants.flexibleEndRowTotalWidthToKeyWidthCPortrait)
             
             for (r, row) in enumerate(page.rows) {
                 let rowGapCurrentTotal = (r == page.rows.count - 1 ? rowGapTotal : CGFloat(r) * rowGap)

    }
    
    func layoutKeys(model: Keyboard, views: [Key:KeyboardKey], bounds: CGRect) {
        let isLandscape: Bool = {
            let boundsRatio = bounds.width / bounds.height
            return (boundsRatio >= layoutConstants.landscapeRatio)
        }()
        
        self.banner?.frame = CGRectMake(0, 0, self.superview.bounds.width, self.topBanner)
        
        for page in model.pages {
            let numRows = page.rows.count

    // END LAYOUT //
    ////////////////
    
    func willShowPopup(key: KeyboardKey, direction: Direction) {
        if let popup = key.popup {
        }
    }
    
    func willHidePopup(key: KeyboardKey) {
    }
}