private void draw_grid(dom_model _dom_model, Graphics _gr)
        {
            _gr.DrawRectangles(m_ramka, _dom_model.AllRects);

            for (var _level = 1; _level <= c_levels; ++_level)
            {
                var _lev_rc = _dom_model.Level(_level);
                _gr.DrawLine(Pens.Black, _lev_rc.Location, PointF.Add(_lev_rc.Location, new SizeF(_lev_rc.Width, 0)));
            }
        }
        private void draw_dom(DOMPrice[] asks, DOMPrice[] bids, Graphics graphics, Point _offset)
        {
            var _dom_model = new dom_model(graphics, m_my_font);

            var _bmp = new Bitmap((int)_dom_model.FullRect.Width + 6, (int)_dom_model.FullRect.Height, graphics);

            using (var _gr = Graphics.FromImage(_bmp))
            {
                draw_bg(_dom_model, _gr);

                var _max_total_vol = max_volume;
                draw_bids(bids, _dom_model, _gr, _max_total_vol);
                draw_asks(asks, _dom_model, _gr, _max_total_vol);

                draw_grid(_dom_model, _gr);

                graphics.DrawImage(_bmp, _offset);
            }
        }
        private void draw_bids(DOMPrice[] bids, dom_model _dom_model, Graphics _gr, double maxTotalVol)
        {
            const int _middle   = c_levels / 2;
            var       _max_size = bids.Max(_1 => _1.Size);

            for (var i = _middle; i < Math.Min(bids.Length + _middle, c_levels); ++i)
            {
                var _rc = _dom_model.Bid(i);

                var _size = bids[i - _middle].Size;
                draw_bg_gradientr2l(m_bid_clr, _gr, _rc, _max_size, _size);

                _gr.DrawString(Volume2String(_size), m_my_font, i == _middle ? Brushes.White : Brushes.Black,
                               _rc, m_str_format);

                var _rc_p  = _dom_model.Price(i);
                var _price = bids[i - _middle].Price;
                draw_bg_gradientl2r(m_tot_vol_clr, _gr, _rc_p, maxTotalVol, get_volume_for_price(_price));
                _gr.DrawString(Price2String(_price, m_price_format), m_my_font, Brushes.Black, _rc_p, m_str_format);
            }
        }
        private void draw_asks(DOMPrice[] asks, dom_model _dom_model, Graphics _gr, double maxTotalVol)
        {
            const int _middle = c_levels / 2 - 1;

            var _max_size = asks.Max(_1 => _1.Size);

            for (var i = _middle; i > Math.Max(_middle - asks.Length, 0); --i)
            {
                var _rc   = _dom_model.Ask(i);
                var _size = asks[_middle - i].Size;

                draw_bg_gradientl2r(m_ask_clr, _gr, _rc, _max_size, _size);

                _gr.DrawString(Volume2String(_size), m_my_font, i == _middle ? Brushes.White : Brushes.Black,
                               _rc, m_str_format);

                var _price = asks[_middle - i].Price;
                var _rc_p  = _dom_model.Price(i);
                draw_bg_gradientl2r(m_tot_vol_clr, _gr, _rc_p, maxTotalVol, get_volume_for_price(_price));
                _gr.DrawString(Price2String(_price, m_price_format), m_my_font, Brushes.Black, _rc_p, m_str_format);
            }
        }
 private void draw_bg(dom_model _dom_model, Graphics _gr)
 {
     _gr.FillRectangle(m_bid_bg, _dom_model.BidRect);
     _gr.FillRectangle(m_price_bg, _dom_model.PriceRect);
     _gr.FillRectangle(m_ask_bg, _dom_model.AskRect);
 }