rendered paste bodyvar DT_TOP = 0x00000000;var DT_CENTER = 0x00000001;var DT_VCENTER = 0x00000004;var DT_WORDBREAK = 0x00000010;var DT_CALCRECT = 0x00000400;var DT_NOPREFIX = 0x00000800;String.prototype.repeat = function( num ) { return new Array( num + 1 ).join( this );}var g_font = gdi.Font("Tahoma", 12);var g_text = ("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n" + "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n" + "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n" + "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\n").repeat(5);var ww = 0, wh = 0;var g_textcolor = 0xff000000;var g_backcolor = 0xffffffff;var g_need_calc = true;var g_textheight = 0;var g_offset = 0;var g_drag = false;var g_drag_y = 0;// STARTfunction on_size() { ww = window.Width; wh = window.Height; reset();}function on_paint(gr) { gr.FillSolidRect(0, 0, ww, wh, g_backcolor); if (g_need_calc) { calc(); } else { gr.GdiDrawText(g_text, g_font, g_textcolor, 0, g_offset, ww, wh - g_offset, DT_CENTER | DT_WORDBREAK | DT_NOPREFIX); }}function on_mouse_lbtn_down(x, y) { g_drag = true; g_drag_y = y;}function on_mouse_lbtn_up(x, y) { g_drag = false;}function on_mouse_move(x, y) { if (g_drag) { applyDelta(y - g_drag_y); g_drag_y = y; }}function on_mouse_wheel(step) { applyDelta(step * 20);}function calc() { // Using a temp IGdiGraphics interface var temp_bmp = gdi.CreateImage(1, 1); var temp_gr = temp_bmp.GetGraphics(); // Calculate arr = temp_gr.GdiDrawText(g_text, g_font, g_textcolor, 0, 0, ww, wh, DT_VCENTER | DT_CENTER | DT_WORDBREAK | DT_CALCRECT | DT_NOPREFIX).toArray(); g_textheight = arr[3] - arr[1]; g_offset = wh / 2; g_need_calc = false; // Free the resources temp_bmp.ReleaseGraphics(temp_gr); temp_bmp.Dispose(); temp_gr = null; temp_bmp = null; window.Repaint();}function applyDelta(delta) { var temp = g_offset + delta; if ((temp <= wh / 2) && (temp >= wh / 2 - g_textheight)) { g_offset = temp; window.Repaint(); }}function reset() { g_need_calc = true; g_offset = 0;}