| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 | <krpano>	<!--		showtext() xml plugin		- showtext() and <textstyle> support for HTML5		- extended <textstyle> functionality compared to the build-in showtext() action		- just include this xml file via: <include url="showtext.xml" />		- docu: https://krpano.com/plugins/showtext/		- krpano 1.20	-->	<!-- predefine a DEFAULT textstyle element -->	<textstyle name="DEFAULT" />			<!-- the automatic running (autorun=preinit) install action -->	<action name="showtext_install" autorun="preinit" scope="private:showtext">		<!-- remove the build-in 'showtext' function to use the 'showtext' <action> instead: -->		delete(global.showtext);		<!-- initialize internal variables -->		set(showtext_style, DEFAULT);		set(showtext_prevstyle, null);		set(showtext_text, '');		set(showtext_prevtext, '');		set(showtext_timeout, 0.1);		set(showtext_fadeout, 0.0);		set(showtext_clipping, false);	</action>		<action name="showtext" scope="private:showtext" args="text, style">		if(!style, set(style, DEFAULT));				if(global.textstyle[get(style)], 			copy(showtext_style, style);		  ,			warning("showtext() - there is no textstyle '", style, "' defined!");			global.textstyle.createarrayitem(get(style));		);		copy(showtext_text, text);				if(showtext_text != showtext_prevtext,			copy(showtext_prevtext, showtext_text);			showtext_createnewtext();		  ,			delayedcall(showtext_timer, get(showtext_timeout), showtext_hide() );		  );	</action>		<action name="showtext_createnewtext" scope="private:showtext">		<!-- stop running mouse and alpha update calls -->		stopdelayedcall(showtext_mouseupdates);		stoptween(global.layer[showtext_tf].alpha);		<!-- remove the old textfield when the style has changed -->		if(showtext_style != showtext_prevstyle,			copy(showtext_prevstyle, showtext_style);			removelayer(showtext_tf);		  );		  		<!-- create a new textfield plugin layer -->		addlayer(showtext_tf);		<!-- create 'shortcut' variables (tf,ts) for faster access -->		copy(tf, global.layer[showtext_tf]);		copy(ts, global.textstyle[get(showtext_style)]);		<!-- get the position settings -->		if(ts.origin  !== null, copy(ts_origin,  ts.origin),  set(ts_origin, 'cursor'));		if(ts.edge    !== null, copy(ts_edge,    ts.edge),    set(ts_edge, 'bottom'));		if(ts.xoffset !== null, copy(ts_xoffset, ts.xoffset), set(ts_xoffset, 0));		if(ts.yoffset !== null, copy(ts_yoffset, ts.yoffset), set(ts_yoffset, -3));		<!-- set the position settings -->		if(ts_origin == 'cursor',			set(tf.align, 'lefttop');			showtext_movetomouse();		  ,			copy(tf.align, ts_origin);		  );		copy(tf.edge, ts_edge);		copy(tf.ox, ts_xoffset);		copy(tf.oy, ts_yoffset);		<!-- get the font settings -->		if(ts.font      !== null, copy(ts_font,      ts.font),      set(ts_font, 'Times'));		if(ts.fontsize  !== null, copy(ts_fontsize,  ts.fontsize),  set(ts_fontsize, 12.0));		if(ts.bold      !== null, copy(ts_bold,      ts.bold),      set(ts_bold, true));		if(ts.italic    !== null, copy(ts_italic,    ts.italic),    set(ts_italic, false));		if(ts.textcolor !== null, copy(ts_textcolor, ts.textcolor), set(ts_textcolor, 0x000000));		if(ts.textalign !== null, copy(ts_textalign, ts.textalign), set(ts_textalign, 'left'));		<!-- use the font settings to build the CSS style -->		set(tf_css, '');		tohex(ts_textcolor, '#', 6);		txtadd(tf_css, 'font-family:',get(ts_font),'; font-size:',get(ts_fontsize),'px; color:',get(ts_textcolor),'; ');		if(ts_textalign != 'none', txtadd(tf_css, get(tf_css), 'text-align:',get(ts_textalign),'; '));		if(ts_bold,   txtadd(tf_css, 'font-weight:bold; '));		if(ts_italic, txtadd(tf_css, 'font-style:italic; '));		if(ts.css !== null, txtadd(tf_css, get(ts.css)));		copy(tf.css, tf_css);		<!-- size settings -->		if(ts.width   !== null AND ts.width   !== '', copy(tf.width,   ts.width));		if(ts.height  !== null AND ts.height  !== '', copy(tf.height,  ts.height));		if(ts.vcenter !== null AND ts.vcenter !== '', copy(tf.vcenter, ts.vcenter));		if(ts.padding !== null AND ts.padding !== '', copy(tf.padding, ts.padding), set(tf.padding,1));		<!-- background, border, shadow settings -->		if(ts.background      !== null, copy(tf.background,      ts.background));		if(ts.backgroundcolor !== null, copy(tf.backgroundcolor, ts.backgroundcolor));		if(ts.backgroundalpha !== null, copy(tf.backgroundalpha, ts.backgroundalpha));		if(ts.border          !== null, copy(tf.border,          ts.border), set(tf.border,true));		if(ts.bordercolor     !== null, copy(tf.bordercolor,     ts.bordercolor));		if(ts.borderalpha     !== null, copy(tf.borderalpha,     ts.borderalpha));		if(ts.borderwidth     !== null, copy(tf.borderwidth,     ts.borderwidth));		if(ts.roundedge       !== null, copy(tf.roundedge,       ts.roundedge));		if(ts.shadow          !== null, copy(tf.shadow,          ts.shadow));		if(ts.shadowrange     !== null, copy(tf.shadowrange,     ts.shadowrange));		if(ts.shadowangle     !== null, copy(tf.shadowangle,     ts.shadowangle));		if(ts.shadowcolor     !== null, copy(tf.shadowcolor,     ts.shadowcolor));		if(ts.shadowalpha     !== null, copy(tf.shadowalpha,     ts.shadowalpha));		if(ts.textshadow      !== null, copy(tf.textshadow,      ts.textshadow));		if(ts.textshadowrange !== null, copy(tf.textshadowrange, ts.textshadowrange));		if(ts.textshadowangle !== null, copy(tf.textshadowangle, ts.textshadowangle));		if(ts.textshadowcolor !== null, copy(tf.textshadowcolor, ts.textshadowcolor));		if(ts.textshadowalpha !== null, copy(tf.textshadowalpha, ts.textshadowalpha));		<!-- showing settings -->		if(ts.alpha      !== null, copy(ts_alpha,      ts.alpha),      set(ts_alpha, 1.0));		if(ts.showtime   !== null, copy(ts_showtime,   ts.showtime),   set(ts_showtime, 0.1));		if(ts.fadetime   !== null, copy(ts_fadetime,   ts.fadetime),   set(ts_fadetime, 0.0));		if(ts.fadeintime !== null, copy(ts_fadeintime, ts.fadeintime), set(ts_fadeintime, 0.0));		copy(showtext_timeout, ts_showtime);		copy(showtext_fadeout, ts_fadetime);		if(ts_fadeintime GT 0,			set(tf.alpha, 0.0);			tween(global.layer[showtext_tf].alpha, get(ts_alpha), get(ts_fadeintime), linear);		  ,			copy(tf.alpha, ts_alpha);		  );		if(ts.noclip !== null, copy(showtext_clipping,ts.noclip), set(showtext_clipping, true));				if(showtext_clipping,			set(tf.onloaded,    showtext_do_clipping() );			set(tf.onautosized, showtext_do_clipping() );		  );		<!-- special flash-only settings -->		if(ts.embeddedfonts !== null, copy(tf.embeddedfonts, ts.embeddedfonts));		if(ts.effect        !== null, copy(tf.effect,        ts.effect));		if(ts.blendmode     !== null, copy(tf.blendmode,     ts.blendmode));		<!-- set the text and the basic settings to start showing the textfield -->		copy(tf.html, showtext_text);		set(tf.enabled, false);		set(tf.zorder, 999999);		if(ts.parent, copy(tf.parent, ts.parent) );		set(tf.type, 'text');		<!-- start the text-hiding timer -->		delayedcall(showtext_timer, get(showtext_timeout), showtext_hide() );	</action>	<action name="showtext_do_clipping" scope="private:showtext">		if(showtext_clipping,			global.layer[showtext_tf].updatepos();			copy(tf_px, global.layer[showtext_tf].pixelx);			copy(tf_py, global.layer[showtext_tf].pixely);			if(tf_px LT 0,				sub(global.layer[showtext_tf].x, tf_px);			  ,				add(tf_rightedge, tf_px, global.layer[showtext_tf].pixelwidth);				if(tf_rightedge GE global.stagewidth, sub(tf_rightedge,global.stagewidth); sub(global.layer[showtext_tf].x,tf_rightedge); );			  );			if(tf_py LT 0,				sub(global.layer[showtext_tf].y,  tf_py);			  ,				add(tf_bottomedge, tf_py, global.layer[showtext_tf].pixelheight);				if(tf_bottomedge GE global.stageheight, sub(tf_bottomedge,global.stageheight); sub(global.layer[showtext_tf].y,tf_bottomedge); );			  );		  );	</action>	<action name="showtext_movetomouse" scope="private:showtext">		copy(global.layer[showtext_tf].x, global.mouse.stagex);		copy(global.layer[showtext_tf].y, global.mouse.stagey);		showtext_do_clipping();		delayedcall(showtext_mouseupdates, 0, showtext_movetomouse() );	</action>	<action name="showtext_hide" scope="private:showtext">		if(global.layer[showtext_tf],			tween(global.layer[showtext_tf].alpha, 0.0, get(showtext_fadeout), linear,					stopdelayedcall(showtext_mouseupdates);					removelayer(showtext_tf);					set(showtext_text, '');					set(showtext_prevtext, '');				);		  );	</action></krpano>
 |