Ejemplo n.º 1
0
void PianoWindow::update_gui()
{
	char string[BCTEXTLEN];
	freqpot->update(synth->config.base_freq);
	base_freq->update((int64_t)synth->config.base_freq);
	wetness->update(synth->config.wetness);
	waveform_to_text(string, synth->config.wavefunction);
	waveform->set_text(string);
	
	update_scrollbar();
	update_oscillators();
	canvas->update();
}
Ejemplo n.º 2
0
void
ScrollBarOff(register TScreen *screen)
{
    if(!screen->fullVwin.scrollbar)
        return;
    XtUnmapWidget(screen->scrollWidget);
    screen->fullVwin.scrollbar = 0;
    DoResizeScreen (term);
    update_scrollbar ();
    if (screen->visbuf) {
        XClearWindow (screen->display, XtWindow (term));
        Redraw ();
    }
}
Ejemplo n.º 3
0
void SynthWindow::update_gui()
{
	char string[BCTEXTLEN];
	freqpot->update((int)synth->config.base_freq[0]);
	base_freq->update((float)synth->config.base_freq[0]);
	wetness->update(synth->config.wetness);
	waveform_to_text(string, synth->config.wavefunction);
	waveform->set_text(string);
	momentary->update(synth->config.momentary_notes);
	
	update_scrollbar();
	update_oscillators();
	canvas->update();
	update_note_selection();
	show_window();
}
Ejemplo n.º 4
0
int PianoWindow::resize_event(int w, int h)
{
	clear_box(0, 0, w, h);
	subwindow->reposition_window(subwindow->get_x(), 
		subwindow->get_y(), 
		subwindow->get_w(), 
		h - subwindow->get_y());
	subwindow->clear_box(0, 0, subwindow->get_w(), subwindow->get_h());
	scroll->reposition_window(scroll->get_x(), 
		scroll->get_y(), 
		h - scroll->get_y());
	update_scrollbar();
	update_oscillators();
	synth->w = w;
	synth->h = h;
	return 1;
}
Ejemplo n.º 5
0
/*
 * Toggle the visibility of the scrollbars.
 */
void
ToggleScrollBar(XtermWidget xw)
{
    TScreen *screen = TScreenOf(xw);

    if (IsIcon(screen)) {
	Bell(xw, XkbBI_MinorError, 0);
    } else {
	TRACE(("ToggleScrollBar{{\n"));
	if (screen->fullVwin.sb_info.width) {
	    ScrollBarOff(xw);
	} else {
	    ScrollBarOn(xw, False);
	}
	update_scrollbar();
	TRACE(("...ToggleScrollBar}}\n"));
    }
}
Ejemplo n.º 6
0
void ScrollBarOff(TScreen *screen)
{
    /*
    if(!screen->scrollbar)
        return;
    */

    if(!screen->fullVwin.sb_info.width)
        return;

    XtUnmapWidget(screen->scrollWidget);
    screen->fullVwin.sb_info.width=0;
    DoResizeScreen (term);
    update_scrollbar ();
    if (screen->visbuf)
    {
        XClearWindow (screen->display, XtWindow (term));
        Redraw ();
    }
}
Ejemplo n.º 7
0
void
ScrollBarOff(XtermWidget xw)
{
    TScreen *screen = TScreenOf(xw);

    if (!screen->fullVwin.sb_info.width || IsIcon(screen))
	return;

    TRACE(("ScrollBarOff\n"));
    if (XtIsRealized((Widget) xw)) {
	XtUnmapWidget(screen->scrollWidget);
	screen->fullVwin.sb_info.width = 0;
	DoResizeScreen(xw);
	update_scrollbar();
	if (screen->visbuf) {
	    xtermClear(xw);
	    Redraw();
	}
    } else {
	Bell(xw, XkbBI_MinorError, 0);
    }
}
Ejemplo n.º 8
0
static int wheel_cb(Ihandle *ih,float delta,int x,int y,char* status)
{
  int canvas_w, canvas_h;
  cdCanvas *canvas = (cdCanvas*)IupGetAttribute(ih, "_CD_CANVAS");
  (void)x;
  (void)y;
  (void)status;

  if (scale+delta==0) /* skip 0 */
  {
    if (scale > 0) 
      scale = -1;
    else 
      scale = 1;
  }
  else
    scale += (int)delta;

  cdCanvasGetSize(canvas, &canvas_w, &canvas_h, NULL, NULL);
  update_scrollbar(ih, canvas_w, canvas_h);
  update_viewport(ih, canvas, IupGetFloat(ih, "POSX"), IupGetFloat(ih, "POSY"));
  IupRedraw(ih, 0);
  return IUP_DEFAULT;
}
void SoundPluginRack::resizeEvent(QResizeEvent * event) {
	
	QAbstractScrollArea::resizeEvent(event);
	update_scrollbar();
}
Ejemplo n.º 10
0
bool CL_ListView_Impl::on_keyboard_pressed(CL_InputEvent &event)
{
	bool event_consumed = false;

	if (document_item.get_child_count() == 0)
		return event_consumed;

	if (event.id == CL_KEY_LEFT || event.id == CL_KEY_RIGHT || event.id == CL_KEY_UP || event.id == CL_KEY_DOWN)
	{
		event_consumed = true;

		// Ensure we have a selected item.
		if (selection.get_first().is_null())
		{
			CL_ListViewItem item = document_item.get_first_child();
			listview->set_selected(item, true);
		}

		CL_ListViewSelectedItem sel = selection.get_last();
		CL_ListViewItem sel_item = sel.get_item();

		CL_ListViewItem new_selected_item;

		if (event.id == CL_KEY_LEFT)
		{
			if (display_mode == listview_mode_details)
			{
				if (sel_item.has_children() && sel_item.is_open())
				{
					sel_item.set_open(false);
					layout->invalidate();
					update_scrollbar();
					new_selected_item = sel_item;
				}
				else
				{
					new_selected_item = layout->get_neighbour(sel_item, CL_ListViewLayout::neighbour_left);
				}
			}
			else
			{
				new_selected_item = layout->get_neighbour(sel_item, CL_ListViewLayout::neighbour_left);
			}
		}
		else if (event.id == CL_KEY_RIGHT)
		{
			if (display_mode == listview_mode_details)
			{
				if (sel_item.has_children() && !sel_item.is_open())
				{
					sel_item.set_open(true);
					layout->invalidate();
					update_scrollbar();
					new_selected_item = sel_item;
				}
				else
				{
					new_selected_item = layout->get_neighbour(sel_item, CL_ListViewLayout::neighbour_right);
				}
			}
			else
			{
				new_selected_item = layout->get_neighbour(sel_item, CL_ListViewLayout::neighbour_right);
			}
		}
		else if (event.id == CL_KEY_UP)
		{
			new_selected_item = layout->get_neighbour(sel_item, CL_ListViewLayout::neighbour_up);
		}
		else if (event.id == CL_KEY_DOWN)
		{
			new_selected_item = layout->get_neighbour(sel_item, CL_ListViewLayout::neighbour_down);
		}

		if (!event.ctrl)
			listview->set_selected(new_selected_item);
		else
			selection.append(new_selected_item);

        if (!layout->is_visible(new_selected_item))
		{
			if (event.id == CL_KEY_UP || event.id == CL_KEY_LEFT)
			{
				int scroll_pos = scrollbar->get_position();
				scroll_pos -= layout->get_row_height();
				scrollbar->set_position(scroll_pos);
				on_scroll();
			}
			else
			{
				int scroll_pos = scrollbar->get_position();
				scroll_pos += layout->get_row_height();
				scrollbar->set_position(scroll_pos);
				on_scroll();
			}
		}
	}
	else if (event.id == CL_KEY_F2)
	{
		std::vector<ListViewShownItem> &items = layout->get_shown_items();
		std::vector<ListViewShownItem>::iterator it;
		for (it = items.begin(); it != items.end(); ++it)
		{
			ListViewShownItem &si = (*it);
			if (si.is_null())
				continue;
			if (si.item.is_null())
				continue;

			if (si.item.is_selected())
				edit_item(*it);
		}

	}
	else if (event.type == CL_InputEvent::pressed && event.id == CL_KEY_HOME)
	{
		scrollbar->set_position(scrollbar->get_min());
		on_scroll();
		std::vector<ListViewShownItem> show_items = layout->get_shown_items();
		if (!show_items.empty())
			listview->set_selected(show_items[0].item, true);
	}
	else if (event.type == CL_InputEvent::pressed && event.id == CL_KEY_END)
	{
		scrollbar->set_position(scrollbar->get_max());
		on_scroll();
		std::vector<ListViewShownItem> show_items = layout->get_shown_items();
		if (!show_items.empty())
			listview->set_selected(show_items.back().item, true);
	}
	else if (event.type == CL_InputEvent::pressed && event.id == CL_KEY_PRIOR)
	{
		// PageUp - selects the first item of the visible items if another item is selected.
		// If first item already selected, do a page up.

		std::vector<ListViewShownItem> show_items = layout->get_shown_items();
		if (show_items.size() > 1)
		{
			if (selection.get_first().get_item() != show_items[0].item)
				listview->set_selected(show_items[0].item, true);
			else
			{
				scrollbar->set_position(scrollbar->get_position()-scrollbar->get_page_step());
				on_scroll();
				std::vector<ListViewShownItem> show_items = layout->get_shown_items();
				if (!show_items.empty())
					listview->set_selected(show_items[0].item, true);
			}
		}
	}
	else if (event.type == CL_InputEvent::pressed && event.id == CL_KEY_NEXT)
	{
		// PageDown - selects the last item of the visible items if last item is selected.
		// If last item is already selected, do a page down.
		
		std::vector<ListViewShownItem> show_items = layout->get_shown_items();
		if (show_items.size() > 1)
		{
			if (selection.get_first().get_item() != show_items.back().item)
				listview->set_selected(show_items.back().item, true);
			else
			{
				scrollbar->set_position(scrollbar->get_position() + scrollbar->get_page_step());
				on_scroll();
				std::vector<ListViewShownItem> show_items = layout->get_shown_items();
				if (!show_items.empty())
					listview->set_selected(show_items.back().item, true);
			}
		}
	}
	else
	{
		if (!func_key_pressed.is_null())
			func_key_pressed.invoke(event);
	}

	return event_consumed;
}
Ejemplo n.º 11
0
int PianoWindow::create_objects()
{
	BC_MenuBar *menu;
	add_subwindow(menu = new BC_MenuBar(0, 0, get_w()));

	BC_Menu *levelmenu, *phasemenu, *harmonicmenu;
	menu->add_menu(levelmenu = new BC_Menu(_("Level")));
	menu->add_menu(phasemenu = new BC_Menu(_("Phase")));
	menu->add_menu(harmonicmenu = new BC_Menu(_("Harmonic")));

	levelmenu->add_item(new PianoLevelInvert(synth));
	levelmenu->add_item(new PianoLevelMax(synth));
	levelmenu->add_item(new PianoLevelRandom(synth));
	levelmenu->add_item(new PianoLevelSine(synth));
	levelmenu->add_item(new PianoLevelSlope(synth));
	levelmenu->add_item(new PianoLevelZero(synth));

	phasemenu->add_item(new PianoPhaseInvert(synth));
	phasemenu->add_item(new PianoPhaseRandom(synth));
	phasemenu->add_item(new PianoPhaseSine(synth));
	phasemenu->add_item(new PianoPhaseZero(synth));

	harmonicmenu->add_item(new PianoFreqEnum(synth));
	harmonicmenu->add_item(new PianoFreqEven(synth));
	harmonicmenu->add_item(new PianoFreqFibonacci(synth));
	harmonicmenu->add_item(new PianoFreqOdd(synth));
	harmonicmenu->add_item(new PianoFreqPrime(synth));

	int x = 10, y = 30, i;
	add_subwindow(new BC_Title(x, y, _("Waveform")));
	x += 240;
	add_subwindow(new BC_Title(x, y, _("Wave Function")));
	y += 20;
	x = 10;
	add_subwindow(canvas = new PianoCanvas(synth, this, x, y, 230, 160));
	canvas->update();

	x += 240;
	char string[BCTEXTLEN];
	waveform_to_text(string, synth->config.wavefunction);

	add_subwindow(waveform = new PianoWaveForm(synth, x, y, string));
	waveform->create_objects();
	y += 30;


	add_subwindow(new BC_Title(x, y, _("Base Frequency:")));
	y += 30;
	add_subwindow(base_freq = new PianoBaseFreq(synth, x, y));
	x += 80;
	add_subwindow(freqpot = new PianoFreqPot(synth, this, x, y - 10));
	base_freq->freq_pot = freqpot;
	freqpot->freq_text = base_freq;
	x -= 80;
	y += 40;
	add_subwindow(new BC_Title(x, y, _("Wetness:")));
	add_subwindow(wetness = new PianoWetness(synth, x + 70, y - 10));

	y += 40;
	add_subwindow(new PianoClear(synth, x, y));


	x = 50;  
	y = 220;
	add_subwindow(new BC_Title(x, y, _("Level"))); 
	x += 75;
	add_subwindow(new BC_Title(x, y, _("Phase"))); 
	x += 75;
	add_subwindow(new BC_Title(x, y, _("Harmonic")));



	y += 20; x = 10;
	add_subwindow(subwindow = new PianoSubWindow(synth, x, y, 265, get_h() - y));
	x += 265;
	add_subwindow(scroll = new PianoScroll(synth, this, x, y, get_h() - y));


	x += 20;
	add_subwindow(new PianoAddOsc(synth, this, x, y));
	y += 30;
	add_subwindow(new PianoDelOsc(synth, this, x, y));

	update_scrollbar();
	update_oscillators();

	show_window();
	flush();
	return 0;
}
void SoundPluginRack::h_qscrollbar_range_changed( int,int ) {
	
	update_scrollbar();
}
void CL_TreeView_Silver::on_item_changed(const CL_TreeNode &node)
{
	update_scrollbar(true);
}
Ejemplo n.º 14
0
void ScrollBarOn (XtermWidget xw,int init,int  doalloc)
{
    register TScreen *screen = &xw->screen;
    register int border = 2 * screen->border;
    register int i,j,k;

    /*
    if(screen->scrollbar)
        return;
    */
    if(screen->fullVwin.sb_info.width)
        return;



    if (init)
    {   /* then create it only */
        if (screen->scrollWidget)
            return;

        /* make it a dummy size and resize later */
        if ((screen->scrollWidget = CreateScrollBar (xw, -1, - 1, 5))
                == NULL)
        {
            Bell(XkbBI_MinorError,0);
            return;
        }

        return;

    }

    if (!screen->scrollWidget)
    {
        Bell (XkbBI_MinorError,0);
        Bell (XkbBI_MinorError,0);
        return;
    }

    if (doalloc && screen->allbuf)
    {
        /* FIXME: this is not integrated well with Allocate */
        if((screen->allbuf =
                    (ScrnBuf) realloc((char *) screen->visbuf,
                                      (unsigned) MAX_PTRS*(screen->max_row + 2 +
                                                           screen->savelines) *
                                      sizeof(char *)))
                == NULL)
            SysError(ERROR_SBRALLOC);
        screen->visbuf = &screen->allbuf[MAX_PTRS * screen->savelines];
        memmove( (char *)screen->visbuf, (char *)screen->allbuf,
                 MAX_PTRS * (screen->max_row + 2) * sizeof (char *));
        for (i = k = 0; i < screen->savelines; i++)
        {
            k += BUF_HEAD;
            for (j = BUF_HEAD; j < MAX_PTRS; j++)
            {
                if((screen->allbuf[k++] =
                            (Char *)calloc((unsigned) screen->max_col + 1, sizeof(Char))) ==
                        NULL)
                    SysError(ERROR_SBRALLOC2);
            }
        }
    }


    ResizeScrollBar (screen);
    xtermAddInput(screen->scrollWidget);

    XtRealizeWidget (screen->scrollWidget);

    /* Now set the left ptr cursor for the scrollbar [email protected] */
    XDefineCursor(XtDisplay(screen->scrollWidget),
            XtWindow(screen->scrollWidget),
            screen->arrow);


    screen->fullVwin.sb_info.rv_cached = False;
    screen->fullVwin.sb_info.width = screen->scrollWidget->core.width +
                                     screen->scrollWidget->core.border_width;
    ScrollBarDrawThumb(screen->scrollWidget);
    DoResizeScreen (xw);
    XtMapWidget(screen->scrollWidget);
    update_scrollbar ();
    if (screen->visbuf)
    {
        XClearWindow (screen->display, XtWindow (term));
        Redraw ();
    }

    /* XXX TODO if scrollbar is on right [email protected] */
}
void CL_TreeView_Silver::on_clear()
{
	update_scrollbar(true);
}
Ejemplo n.º 16
0
void CL_ListView_Impl::on_item_added()
{
	layout->invalidate();
	update_scrollbar();
	listview->request_repaint();
}
Ejemplo n.º 17
0
void scrollable_widget::set_dim(int w, int h)
{
	widget::set_dim(w, h);
	update_scrollbar();
}
Ejemplo n.º 18
0
void scrollable_widget::set_virtual_height(int height)
{
	virtual_height_ = height;
	update_scrollbar();
}
Ejemplo n.º 19
0
void SynthWindow::create_objects()
{
	BC_MenuBar *menu;
	add_subwindow(menu = new BC_MenuBar(0, 0, get_w()));

	BC_Menu *levelmenu, *phasemenu, *harmonicmenu;
	menu->add_menu(levelmenu = new BC_Menu(_("Level")));
	menu->add_menu(phasemenu = new BC_Menu(_("Phase")));
	menu->add_menu(harmonicmenu = new BC_Menu(_("Harmonic")));

	levelmenu->add_item(new SynthLevelInvert(synth));
	levelmenu->add_item(new SynthLevelMax(synth));
	levelmenu->add_item(new SynthLevelRandom(synth));
	levelmenu->add_item(new SynthLevelSine(synth));
	levelmenu->add_item(new SynthLevelSlope(synth));
	levelmenu->add_item(new SynthLevelZero(synth));

	phasemenu->add_item(new SynthPhaseInvert(synth));
	phasemenu->add_item(new SynthPhaseRandom(synth));
	phasemenu->add_item(new SynthPhaseSine(synth));
	phasemenu->add_item(new SynthPhaseZero(synth));

	harmonicmenu->add_item(new SynthFreqEnum(synth));
	harmonicmenu->add_item(new SynthFreqEven(synth));
	harmonicmenu->add_item(new SynthFreqFibonacci(synth));
	harmonicmenu->add_item(new SynthFreqOdd(synth));
	harmonicmenu->add_item(new SynthFreqPrime(synth));

	int x = 10, y = 30;
	
	add_subwindow(new BC_Title(x, y, _("Waveform")));
	x += 240;
	add_subwindow(new BC_Title(x, y, _("Wave Function")));
	y += 20;
	x = 10;
	add_subwindow(canvas = new SynthCanvas(synth, this, x, y, 230, 160));
	canvas->update();

	x += 240;
	char string[BCTEXTLEN];
	waveform_to_text(string, synth->config.wavefunction);

	add_subwindow(waveform = new SynthWaveForm(synth, x, y, string));
	waveform->create_objects();
	y += 30;
	int x1 = x + waveform->get_w() + 10;


	add_subwindow(new BC_Title(x, y, _("Base Frequency:")));
	y += 30;
	add_subwindow(base_freq = new SynthBaseFreq(synth, this, x, y));
	base_freq->update((float)synth->config.base_freq[0]);
	x += base_freq->get_w() + synth->get_theme()->widget_border;
	add_subwindow(freqpot = new SynthFreqPot(synth, this, x, y - 10));
	base_freq->freq_pot = freqpot;
	freqpot->freq_text = base_freq;
	x -= base_freq->get_w() + synth->get_theme()->widget_border;
	y += 40;
	add_subwindow(new BC_Title(x, y, _("Wetness:")));
	add_subwindow(wetness = new SynthWetness(synth, x + 70, y - 10));

	y += 40;
	add_subwindow(new SynthClear(synth, x, y));


	x = 50;  
	y = 220;
	add_subwindow(new BC_Title(x, y, _("Level"))); 
	x += 75;
	add_subwindow(new BC_Title(x, y, _("Phase"))); 
	x += 75;
	add_subwindow(new BC_Title(x, y, _("Harmonic")));



	y += 20; x = 10;
	add_subwindow(osc_subwindow = new BC_SubWindow(x, y, 265, get_h() - y));
	x += 265;
	add_subwindow(osc_scroll = new OscScroll(synth, this, x, y, get_h() - y));


	x += 20;
	add_subwindow(new SynthAddOsc(synth, this, x, y));
	y += 30;
	add_subwindow(new SynthDelOsc(synth, this, x, y));

// Create keyboard
	y = 30;

#include "white_up_png.h"
#include "white_hi_png.h"
#include "white_dn_png.h"
#include "white_checked_png.h"
#include "white_checkedhi_png.h"
#include "black_up_png.h"
#include "black_hi_png.h"
#include "black_dn_png.h"
#include "black_checked_png.h"
#include "black_checkedhi_png.h"
	white_key[0] = new VFrame(white_up_png);
	white_key[1] = new VFrame(white_hi_png);
	white_key[2] = new VFrame(white_checked_png);
	white_key[3] = new VFrame(white_dn_png);
	white_key[4] = new VFrame(white_checkedhi_png);
	black_key[0] = new VFrame(black_up_png);
	black_key[1] = new VFrame(black_hi_png);
	black_key[2] = new VFrame(black_checked_png);
	black_key[3] = new VFrame(black_dn_png);
	black_key[4] = new VFrame(black_checkedhi_png);


	add_subwindow(note_subwindow = new BC_SubWindow(x1, 
		y, 
		get_w() - x1, 
		white_key[0]->get_h() + MARGIN +
		get_text_height(MEDIUMFONT) + MARGIN +
		get_text_height(MEDIUMFONT) + MARGIN));
	add_subwindow(note_scroll = new NoteScroll(synth,
		this,
		x1,
		note_subwindow->get_y() + note_subwindow->get_h(),
		note_subwindow->get_w()));

	add_subwindow(momentary = new SynthMomentary(this, 
		x1, 
		note_scroll->get_y() + note_scroll->get_h() + MARGIN, 
		_("Momentary notes")));


	add_subwindow(note_instructions = new BC_Title(
		x1,
		momentary->get_y() + momentary->get_h() + MARGIN,
		_("Ctrl or Shift to select multiple notes.")));

	update_scrollbar();
	update_oscillators();
	update_notes();

	show_window();
}
Ejemplo n.º 20
0
void CL_ListView_Impl::on_mouse_lbutton_down(CL_GUIMessage_Input &input, CL_InputEvent &input_event)
{
	listview->set_focus();

	CL_Point pos = input_event.mouse_pos;
	pos_mouse_drag_start = pos;

	lineedit->set_visible(false);
	listview->set_focus();
	if (edited_item.is_item())
	{
		edited_item.impl->selected = true;
		listview->request_repaint();
		edited_item = CL_ListViewItem();
	}

	ListViewShownItem si = layout->get_item_at(pos); 

	if (si.valid == false)
		return;

	// Check if opener rect is clicked.
	if (si.rect_opener.contains(pos))
	{
		si.item.set_open(!si.item.is_open());
		layout->invalidate();
		listview->request_repaint();
		update_scrollbar();
	}

	// Check if icon or text is clicked.
	if (si.rect_text[0].contains(pos) || si.rect_icon.contains(pos))
	{
		if (si.item.is_selected() && si.item.is_editable())
		{
			edit_item(si);
		}
		else
		{
			if (multiple_selection && !si.item.is_selected())
			{
				si.item.impl->selected = true;
				selection.append(si.item);
				if (!func_selection_changed.is_null())
					func_selection_changed.invoke(selection);
			}
			else
			{
				if (!si.item.is_selected())
				{
					selection.clear();
					si.item.impl->selected = true;
					selection.append(si.item);
					if (!func_selection_changed.is_null())
						func_selection_changed.invoke(selection);
				}
			}

			if (!si.item.is_open())
			{
				si.item.set_open(true);
				layout->invalidate();
				update_scrollbar();
			}
		}
		listview->request_repaint();
	}

	listview->capture_mouse(true);
}
Ejemplo n.º 21
0
void
ScrollBarOn (XtermWidget xw, int init, int doalloc)
{
#ifdef MOTIF
    Cursor arrowCursor;
#endif /* MOTIF */
    register TScreen *screen = &xw->screen;
    register int i, j, k;

    if(screen->fullVwin.scrollbar)
        return;

    if (init) {			/* then create it only */
        if (screen->scrollWidget) return;

        /* make it a dummy size and resize later */
        if ((screen->scrollWidget = CreateScrollBar (xw, -1, -1, 5))
                == NULL) {
            Bell(XkbBI_MinorError,0);
            return;
        }

        return;

    }

    if (!screen->scrollWidget) {
        Bell (XkbBI_MinorError,0);
        Bell (XkbBI_MinorError,0);
        return;
    }

    if (doalloc && screen->allbuf) {
        /* FIXME: this is not integrated well with Allocate */
        if((screen->allbuf =
                    (ScrnBuf) realloc((char *) screen->visbuf,
                                      (unsigned) MAX_PTRS*(screen->max_row + 2 +
                                              screen->savelines) *
                                      sizeof(char *)))
                == NULL)
            Error (ERROR_SBRALLOC);
        screen->visbuf = &screen->allbuf[MAX_PTRS * screen->savelines];
        memmove( (char *)screen->visbuf, (char *)screen->allbuf,
                 MAX_PTRS * (screen->max_row + 2) * sizeof (char *));
        for (i = k = 0; i < screen->savelines; i++) {
            k += BUF_HEAD;
            for (j = BUF_HEAD; j < MAX_PTRS; j++) {
                if((screen->allbuf[k++] =
                            (Char *)calloc((unsigned) screen->max_col + 1, sizeof(Char))) ==
                        NULL)
                    Error (ERROR_SBRALLOC2);
            }
        }
    }

    ResizeScrollBar (screen);
    XtRealizeWidget (screen->scrollWidget);
#ifdef MOTIF
    /* define pointer cursor for it */
    arrowCursor = XCreateFontCursor(XtDisplay(screen->scrollWidget), XC_left_ptr);
    XDefineCursor(XtDisplay(screen->scrollWidget), XtWindow(screen->scrollWidget), arrowCursor);
    XFreeCursor(XtDisplay(screen->scrollWidget), arrowCursor);
#endif /* MOTIF */
    screen->fullVwin.scrollbar = screen->scrollWidget->core.width +
                                 screen->scrollWidget->core.border_width;

    ScrollBarDrawThumb(screen->scrollWidget);
    DoResizeScreen (xw);

#ifdef SCROLLBAR_RIGHT
    /*
     * Adjust the scrollbar position if we're asked to turn on scrollbars
     * for the first time after the xterm is already running.  That makes
     * the window grow after we've initially configured the scrollbar's
     * position.  (There must be a better way).
     */
    if (term->misc.useRight
            && screen->fullVwin.fullwidth < term->core.width)
        XtVaSetValues(screen->scrollWidget,
                      XtNx, screen->fullVwin.fullwidth - screen->scrollWidget->core.border_width,
                      NULL);
#endif

    XtMapWidget(screen->scrollWidget);
    update_scrollbar ();
    if (screen->visbuf) {
        XClearWindow (screen->display, XtWindow (term));
        Redraw ();
    }
}