function EditorScrollbar(context, linesContent, viewDomNode, overflowGuardDomNode) {
            var _this = _super.call(this, context) || this;
            var editor = _this._context.configuration.editor;
            var configScrollbarOpts = editor.viewInfo.scrollbar;
            var scrollbarOptions = {
                listenOnDomNode: viewDomNode.domNode,
                className: 'editor-scrollable' + ' ' + themeService_1.getThemeTypeSelector(context.theme.type),
                useShadows: false,
                lazyRender: true,
                vertical: configScrollbarOpts.vertical,
                horizontal: configScrollbarOpts.horizontal,
                verticalHasArrows: configScrollbarOpts.verticalHasArrows,
                horizontalHasArrows: configScrollbarOpts.horizontalHasArrows,
                verticalScrollbarSize: configScrollbarOpts.verticalScrollbarSize,
                verticalSliderSize: configScrollbarOpts.verticalSliderSize,
                horizontalScrollbarSize: configScrollbarOpts.horizontalScrollbarSize,
                horizontalSliderSize: configScrollbarOpts.horizontalSliderSize,
                handleMouseWheel: configScrollbarOpts.handleMouseWheel,
                arrowSize: configScrollbarOpts.arrowSize,
                mouseWheelScrollSensitivity: configScrollbarOpts.mouseWheelScrollSensitivity,
            };
            _this.scrollbar = _this._register(new scrollableElement_1.ScrollableElement(linesContent.domNode, scrollbarOptions, _this._context.viewLayout.scrollable));
            viewPart_1.PartFingerprints.write(_this.scrollbar.getDomNode(), 5 /* ScrollableElement */);
            _this.scrollbarDomNode = fastDomNode_1.createFastDomNode(_this.scrollbar.getDomNode());
            _this.scrollbarDomNode.setPosition('absolute');
            _this._setLayout();
            // When having a zone widget that calls .focus() on one of its dom elements,
            // the browser will try desperately to reveal that dom node, unexpectedly
            // changing the .scrollTop of this.linesContent
            var onBrowserDesperateReveal = function (domNode, lookAtScrollTop, lookAtScrollLeft) {
                var newScrollPosition = {};
                if (lookAtScrollTop) {
                    var deltaTop = domNode.scrollTop;
                    if (deltaTop) {
                        newScrollPosition.scrollTop = _this._context.viewLayout.getScrollTop() + deltaTop;
                        domNode.scrollTop = 0;
                    }
                }
                if (lookAtScrollLeft) {
                    var deltaLeft = domNode.scrollLeft;
                    if (deltaLeft) {
                        newScrollPosition.scrollLeft = _this._context.viewLayout.getScrollLeft() + deltaLeft;
                        domNode.scrollLeft = 0;
                    }
                }
                _this._context.viewLayout.setScrollPosition(newScrollPosition);
            };
            // I've seen this happen both on the view dom node & on the lines content dom node.
            _this._register(dom.addDisposableListener(viewDomNode.domNode, 'scroll', function (e) { return onBrowserDesperateReveal(viewDomNode.domNode, true, true); }));
            _this._register(dom.addDisposableListener(linesContent.domNode, 'scroll', function (e) { return onBrowserDesperateReveal(linesContent.domNode, true, false); }));
            _this._register(dom.addDisposableListener(overflowGuardDomNode.domNode, 'scroll', function (e) { return onBrowserDesperateReveal(overflowGuardDomNode.domNode, true, false); }));
            return _this;
        }
Build the CSS for decorations styled via `glpyhMarginClassName`.