소스 검색

增加krpanoImgdemo

zjs_project 1 년 전
부모
커밋
1ef6970710
34개의 변경된 파일0개의 추가작업 그리고 3417개의 파일을 삭제
  1. 0 5
      src/components/krpanoImg/plugins/bingmaps.js
  2. 0 522
      src/components/krpanoImg/plugins/combobox.xml
  3. 0 48
      src/components/krpanoImg/plugins/doubleclick_style.xml
  4. 0 28
      src/components/krpanoImg/plugins/fps.xml
  5. 0 5
      src/components/krpanoImg/plugins/googlemaps.js
  6. 0 5
      src/components/krpanoImg/plugins/gyro2.js
  7. 0 5
      src/components/krpanoImg/plugins/pp_blur.js
  8. 0 5
      src/components/krpanoImg/plugins/pp_light.js
  9. 0 5
      src/components/krpanoImg/plugins/pp_sharpen.js
  10. 0 19
      src/components/krpanoImg/plugins/scrollarea.js
  11. 0 214
      src/components/krpanoImg/plugins/showtext.xml
  12. 0 5
      src/components/krpanoImg/plugins/soundinterface.js
  13. 0 5
      src/components/krpanoImg/plugins/videoplayer.js
  14. 0 5
      src/components/krpanoImg/plugins/webvr.js
  15. 0 923
      src/components/krpanoImg/plugins/webvr.xml
  16. BIN
      src/components/krpanoImg/plugins/webvr_handcursor.png
  17. BIN
      src/components/krpanoImg/plugins/webvr_laser.png
  18. BIN
      src/components/krpanoImg/plugins/webvr_light.png
  19. BIN
      src/components/krpanoImg/plugins/webvr_vrcursor.png
  20. BIN
      src/components/krpanoImg/skin/arrow.png
  21. BIN
      src/components/krpanoImg/skin/plugin.png
  22. BIN
      src/components/krpanoImg/skin/rotate_device.png
  23. BIN
      src/components/krpanoImg/skin/vtourskin.png
  24. 0 1348
      src/components/krpanoImg/skin/vtourskin.xml
  25. 0 28
      src/components/krpanoImg/skin/vtourskin_design_117.xml
  26. 0 31
      src/components/krpanoImg/skin/vtourskin_design_117round.xml
  27. 0 71
      src/components/krpanoImg/skin/vtourskin_design_black.xml
  28. 0 42
      src/components/krpanoImg/skin/vtourskin_design_flat_light.xml
  29. 0 40
      src/components/krpanoImg/skin/vtourskin_design_glass.xml
  30. 0 58
      src/components/krpanoImg/skin/vtourskin_design_ultra_light.xml
  31. BIN
      src/components/krpanoImg/skin/vtourskin_hotspot.png
  32. BIN
      src/components/krpanoImg/skin/vtourskin_light.png
  33. BIN
      src/components/krpanoImg/skin/vtourskin_mapspot.png
  34. BIN
      src/components/krpanoImg/skin/vtourskin_mapspotactive.png

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 5
src/components/krpanoImg/plugins/bingmaps.js


+ 0 - 522
src/components/krpanoImg/plugins/combobox.xml

@@ -1,522 +0,0 @@
-<krpano>
-
-	<!--
-		krpano 1.20.9 combobox.xml Plugin
-		https://krpano.com/plugins/combobox/
-
-		- This plugin converts <combobox> elements in the current xml
-		  into <layer> container, scrollarea and textfield elements.
-		- Additionally it's also possible to add and remove combobox
-		  elements also dynamically.
-		- The full xml implementation allows many ways of customizing
-		  for own needs - custom designs/styles, custom functionality.
-		- The plugin works automatically the same for HTML5 and Flash.
-		- It's possible to use this plugin as replacement for the old
-		  combobox.swf/combobox.js plugins, the action interfaces are
-		  the same.
-
-
-		Syntax for Static XML Code:
-
-			<combobox name="..." design="..." ...any layer settings...>
-				<item name="..." caption="..." onclick="..." />
-				<item name="..." caption="..." onclick="..." />
-			</combobox>
-
-		Syntax for Dynamic XML Code:
-
-		 - Global Actions:
-
-			addComboboxLayer(cbname, design*)
-			removeComboboxLayer(cbname);
-
-		 - Combobox Layer Actions:
-
-			layer[cbname].addItem(caption, onclick)
-			layer[cbname].addNamedItem(name, caption, onclick)
-			layer[cbname].addIdItem(name, caption, onclick);       same as addNamedItem (for combobox.js compatibility)
-			layer[cbname].selectItem(caption)
-			layer[cbname].selectItemByName(name_or_index)
-			layer[cbname].selectIdItem(name_or_index)              same as selectItemByName (for combobox.js compatibility)
-			layer[cbname].removeAll()
-			layer[cbname].openList()
-			layer[cbname].closeList()
-
-		 - Events/Callbacks:
-
-			layer[cbname].onChange
-
-		- Combobox Layer Attributes:
-
-			layer[cbname].item              - krpano Array of the items
-			layer[cbname].selecteditemindex - current selected item index
-	-->
-
-	<!-- path to the scrollarea plugin -->
-	<combobox_scrollareaplugin
-		url.html5="%VIEWER%/plugins/scrollarea.js"
-		url.flash="%VIEWER%/plugins/scrollarea.swf"
-		/>
-
-	<!-- core internal layer styles -->
-	<style name="combobox_container_style" type="container" maskchildren="true" bgcapture="true" visible="false" onclick="combobox_onclick_event();" mergedalpha="false" alpha="1.0" />
-	<style name="combobox_marker_style" type="text" align="righttop" edge="center" html="▼" havemarkersize="false" onautosized="set(havemarkersize,true);" mergedalpha="false" alpha="1.0" />
-	<style name="combobox_item_style" type="text" wordwrap="false" vcenter="true" align="lefttop" onover="if(!combbox_item_pressed,onoveritem());asyncloop(hovering,,if(!combbox_item_pressed,onoutitem()));" ondown="onoveritem(); set(combbox_item_pressed,true);" onup="onoutitem(); set(combbox_item_pressed,false);" onoveritem="set(bg,true);" onoutitem="set(bg,false);" mergedalpha="false" alpha="1.0" />
-
-	<!-- several pre-defined designs -->
-	<combobox_design name="default" margin="2" open_close_speed="0.25">
-		<!-- default design - white box with black text and blue selection -->
-		<style name="combobox_container_style" bgalpha="1.0" bgcolor="0xFFFFFF" bgborder="1 0xFFFFFF 0.5" bgroundedge="1" bgshadow="0 1 3 0x000000 1.0" />
-		<style name="combobox_marker_style" css="color:#FFFFFF;" bg="false" txtshadow="0 0 2 0x000000 1" />
-		<style name="combobox_item_style" css="color:#222222;" padding="4 4" bg="false" bgcolor="0xC7E4FC" bgalpha="1.0" bgroundedge="1" txtshadow="0 0 1 0xFFFFFF 1.0" />
-	</combobox_design>
-
-	<combobox_design name="vtour" margin="4" open_close_speed="0.25">
-		<!-- default vtourskin.xml design -->
-		<style name="combobox_container_style" bgalpha="0.8" bgcolor="0x2D3E50" bgborder="0" bgroundedge="1" bgshadow="0 4 10 0x000000 0.3" />
-		<style name="combobox_marker_style" css="color:#FFFFFF;" bg="false" txtshadow="0 0 2 0x000000 1" />
-		<style name="combobox_item_style" css="color:#FFFFFF;" padding="4 4" bg="false" bgcolor="0xFFFFFF" bgalpha="0.5" bgroundedge="0" txtshadow="0 0 2 0x000000 1" />
-	</combobox_design>
-
-
-	
-	
-
-	<!-- internal events -->
-	<events name="combobox_xml_plugin_events" keep="true"
-	        onresize="combobox_closelist();"
-	        />
-
-	<!-- krpano version check -->
-	<action name="combobox_versioncheck" autorun="preinit">
-		if(build LT '2020-11-01',
-			error('combobox.xml - too old krpano version!');
-			set(events[combobox_xml_plugin_events].name, null);
-			set(action[addComboboxLayer].content, '');
-			set(action[removeComboboxLayer].content, '');
-		  ,
-			combobox_xml_init();
-		);
-	</action>
-
-	<action name="combobox_xml_init">
-		<!-- set auto call again on next xml load -->
-		set(action[combobox_xml_init].autorun, onload);
-		
-		combobox_parse_xml_elements();
-	</action>
-	
-
-	<!-- convert all <combobox> elements to layers -->
-	<action name="combobox_parse_xml_elements" scope="localonly">
-		if(global.combobox,
-			copy(combobox_src, global.combobox);
-			delete(global.combobox);
-			def(i, integer, 0);
-			def(cnt, integer, get(combobox_src.count));
-			if(cnt GT 0, loop(i LT cnt,
-				copy(cb, combobox_src[get(i)]);
-				if(cb AND cb.name AND cb.parsed != true,
-					set(cb.parsed, true);
-					addComboboxLayer(get(cb.name), get(cb.design));
-					copy(ly, global.layer[get(cb.name)]);
-					copyattributes(get(ly), get(cb));
-					set(ly.keep, true);
-					def(item_cnt, integer, get(cb.item.count));
-					if(item_cnt GT 0,
-						def(item_i, integer, 0);
-						loop(item_i LT  item_cnt,
-							combobox_additem(get(ly.name), get(cb.item[get(item_i)].name), get(cb.item[get(item_i)].caption), get(cb.item[get(item_i)].onclick), get(cb.item[get(item_i)].oninit));
-							inc(item_i);
-						);
-					);
-				);
-				inc(i);
-			));
-		);
-	</action>
-
-
-	<!-- dynamically add a combobox layer -->
-	<action name="addComboboxLayer" scope="localonly" args="cbname, design">
-		<!-- create the layer -->
-		addlayer(get(cbname));
-		copy(cb, global.layer[get(cbname)]);
-		set(cb.keep, true);
-		
-		<!-- copy the design settings (or set defaults) -->
-		if(!global.combobox_design[get(design)].name, set(design,'default'));
-		copy(cb.cbdesign, global.combobox_design[get(design)]);
-		calc(cb.margin, cb.cbdesign.margin !== null ? cb.cbdesign.margin : 2);
-		calc(cb.open_close_speed, cb.cbdesign.open_close_speed !== null ? cb.cbdesign.open_close_speed : 0.25);
-		<!-- load the styles and copy the design style settings -->
-		cb.loadstyle(combobox_container_style);
-		copyattributes(get(cb), get(cb.cbdesign.style[combobox_container_style]));
-
-		<!-- add/build/map actions -->
-		calc(cb.addItem,          'combobox_additem(' + cbname + ', null, "%%1", "%%2");');
-		calc(cb.addNamedItem,     'combobox_additem(' + cbname + ', "%%1", "%%2", "%%3");');
-		calc(cb.addIdItem,        'combobox_additem(' + cbname + ', "%%1", "%%2", "%%3");');
-		calc(cb.selectItem,       'combobox_finditem(' + cbname + ', "%%1", __cb_fi); if(__cb_fi GE 0, combobox_selectitem(' + cbname + ', get(__cb_fi))); delete(__cb_fi);');
-		calc(cb.selectItemByName, 'combobox_selectitem(' + cbname + ', "%%1");');
-		calc(cb.selectIdItem,     'combobox_selectitem(' + cbname + ', "%%1");');
-		calc(cb.removeAll,        'combobox_removeitems(' + cbname + ');');
-		calc(cb.openList,         'combobox_openlist(' + cbname + ');');
-		calc(cb.closeList,        'combobox_closelist(' + cbname + ');');
-
-		<!-- create sub-layers -->
-		calc(saname, 'combobox_' + cbname + '_scrollarea');
-		addlayer(get(saname));
-		copy(sa, global.layer[get(saname)]);
-		copy(sa.parent, cbname);
-		copy(sa.url, global.combobox_scrollareaplugin.url);
-		copy(sa.keep, true);
-		copy(sa.align, lefttop);
-		set(sa.direction, v);
-		set(sa.enabled, false);
-		set(sa.width, 100%);
-		set(sa.height, 100%);
-		copy(cb.scrollarea, sa);
-
-		calc(mkname, 'combobox_' + cbname + '_marker');
-		addlayer(get(mkname));
-		copy(mk, global.layer[get(mkname)]);
-		copy(mk.parent, saname);
-		copy(mk.keep, true);
-		mk.loadstyle(combobox_marker_style);
-		copyattributes(get(mk), get(cb.cbdesign.style[combobox_marker_style]));
-		copy(cb.marker, mk);
-
-		<!-- item data array -->
-		cb.createarray('item');
-
-		<!-- item autosizing information -->
-		set(cb.autosize_i, 0);
-		set(cb.autosize_cnt, 0);
-		set(cb.autosize_max_w, 0);
-		set(cb.autosize_max_h, 0);
-
-		set(cb.lastselecteditemindex, 0);
-		set(cb.selecteditemindex, 0);
-	</action>
-
-
-	<!-- dynamically remove a combobox element -->
-	<action name="removeComboboxLayer" scope="localonly" args="cbname">
-		if(global.layer[get(cbname)],
-			copy(cb, global.layer[get(cbname)]);
-			if(cb === global.openedcombobox, delete(global.openedcombobox));
-			if(cb,
-				removelayer(get(cbname), true);
-			);
-		);
-	</action>
-
-
-	<!-- default onclick event for combobox elements: open the list -->
-	<action name="combobox_onclick_event">
-		combobox_openlist(get(name));
-	</action>
-
-
-	<!-- dynamically add items -->
-	<action name="combobox_additem" scope="localonly" args="cbname, itemname, itemcaption, itemonclick, itemoninit">
-		copy(cb, global.layer[get(cbname)]);
-		
-		<!-- when no item name is set, generate an automatic one -->
-		if(itemname === null, calc(itemname, 'autoname_' + cb.item.count); );
-		
-		<!-- save the item caption and onclick event -->
-		copy(cb.item[get(itemname)].caption, itemcaption);
-		copy(cb.item[get(itemname)].onclick, itemonclick);
-
-		inc(cb.autosize_cnt);
-
-		<!-- create the item layer/textfield -->
-		calc(itemlayername, 'comboboxitem_' + cbname + '_' + itemname);
-		addlayer(get(itemlayername));
-		copy(li, global.layer[get(itemlayername)]);
-		li.loadstyle(combobox_item_style);
-		copyattributes(get(li), get(cb.cbdesign.style[combobox_item_style]));
-		copy(li.parent, cb.scrollarea.name);
-		copy(li.keep, true);
-		copy(li.cblayername, cb.name);
-		copy(li.itemname, itemname);
-		copy(li.html, itemcaption);
-		set(li.onautosized, delayedcall(0,combobox_item_autosize_update()) );
-		set(li.onclick, combobox_item_onclick() );
-		if (isset(itemoninit), callwith(li, itemoninit));
-
-		copy(cb.item[get(itemname)].itemlayername, itemlayername);
-		copy(cb.item[get(itemname)].itemlayer, li);
-	</action>
-
-
-	<!-- onautosized callback from the item textfield -->
-	<action name="combobox_item_autosize_update" scope="localonly">
-		copy(cb, global.layer[get(caller.cblayername)]);
-		inc(cb.autosize_i);
-		Math.max(cb.autosize_max_w, caller.width);
-		Math.max(cb.autosize_max_h, caller.height);
-		if(cb.autosize_i == cb.autosize_cnt, combobox_align_items(get(cb.name)); );
-	</action>
-
-
-	<!-- align the image and set the combobox size -->
-	<action name="combobox_align_items" scope="localonly" args="cbname">
-		copy(cb, global.layer[get(cbname)]);
-		if(cb.marker.havemarkersize == false OR cb.scrollarea.loaded == false,
-			<!-- wait until everything is ready -->
-			delayedcall(calc(cb.name + '_waitformarkersize'), 0.01, combobox_align_items(get(cbname)) );
-		  ,
-			<!-- set the item positions and the combobox size -->
-			if(global.openedcombobox === cb, combobox_closelist() );
-			copy(sa, cb.scrollarea);
-			calc(itemwidth, cb.margin GT 0 ? -2 * cb.margin : '100%');
-			copy(mk_w, cb.marker.width);
-			copy(item_cnt, cb.autosize_cnt);
-
-			for(def(item_i, integer, 0), item_i LT item_cnt, inc(item_i),
-				copy(li, global.layer[get(cb.item[get(item_i)].itemlayername)]);
-				set(li.x, get(cb.margin));
-				copy(li.width, itemwidth);
-				copy(li.height, cb.autosize_max_h);
-				calc(li.y, cb.margin + item_i * (cb.autosize_max_h + cb.margin));
-			);
-
-			if(cb.width == null OR cb.width == cb.lastautosizedwidth,
-				<!-- no combobox width (or an autosized width) set - set the largest item width -->
-				calc(cb.width, cb.margin + cb.autosize_max_w + 2 + mk_w + cb.margin);
-				copy(cb.lastautosizedwidth, cb.width);
-			);
-
-			calc(cb.height, 2*cb.margin + cb.autosize_max_h);
-			calc(sa.height, cb.margin + item_cnt*(cb.margin+cb.autosize_max_h));
-			calc(sa.y, -(cb.selecteditemindex * (cb.autosize_max_h + cb.margin)));
-			calc(cb.marker.x, cb.margin + mk_w/2);
-			tween(global.layer[get(cb.name)].marker.y, calc(cb.margin + cb.selecteditemindex*(cb.autosize_max_h + cb.margin) + cb.autosize_max_h/2), 0.1);
-
-			<!-- when all is done, show the combobox -->
-			delayedcall(0.1, set(global.layer[get(cb.name)].visible,true); );
-		);
-	</action>
-
-
-	<!-- helper action for calling a plugin event-code with 'global' and 'caller' scope -->
-	<action name="combobox_do_event_call" scope="local" args="cb, eventcode">
-		if(eventcode !== null, callwith(cb, get(eventcode) ); );
-	</action>
-	
-
-	<!-- default onclick event for items: select the current item, close the list and call the item onclick event -->
-	<action name="combobox_item_onclick" scope="localonly">
-		copy(cb, global.layer[get(caller.cblayername)]);
-		copy(itemname, caller.itemname);
-		combobox_selectitem(get(cb.name), get(itemname));
-
-		if(global.openedcombobox === cb, combobox_closelist() );
-
-		if(cb.item[get(itemname)].onclick,
-			if(cb.callonclickafterclose === false,
-				<!-- call instantly -->
-				combobox_do_event_call(get(cb), get(cb.item[get(itemname)].onclick));
-			  ,
-				<!-- call the onclick event after the combobox has closed -->
-				delayedcall(get(cb.open_close_speed),
-					copy(cb.curitem, cb.item[get(itemname)]);
-					combobox_do_event_call(get(cb), get(cb.item[get(itemname)].onclick));
-				);
-			);
-		);
-	</action>
-
-
-	<!-- select an item -->
-	<action name="combobox_selectitem" scope="localonly" args="cbname, itemname">
-		if(global.combbox_item_pressed != true,
-			copy(cb, global.layer[get(cbname)]);
-			copy(cb.lastselecteditemindex, cb.selecteditemindex);
-			copy(cb.selecteditemindex, cb.item[get(itemname)].index);
-			<!-- call onchange event on selection change -->
-			if(cb.lastselecteditemindex != cb.selecteditemindex AND cb.onchange,
-				combobox_do_event_call(get(cb), get(cb.onchange));
-			);
-			if(global.openedcombobox === cb,
-				<!-- when opened, just close to the selected item -->
-				combobox_closelist();
-			  ,
-				if(global.layer[get(cbname)].scrollarea.loaded,
-					global.layer[get(cbname)].scrollarea.stopscrolling();
-					calc(offset, cb.selecteditemindex*(cb.autosize_max_h + cb.margin));
-					tween(global.layer[get(cbname)].marker.y, calc(cb.margin + offset + cb.autosize_max_h/2), 0);
-					tween(global.layer[get(cbname)].scrollarea.y, calc(-offset), 0, default, global.layer[get(cbname)].scrollarea.update(); );
-				);
-			);
-		);
-	</action>
-
-
-	<!-- find an item by its caption, the global variable defined in 'returnvariable' will contain the index  -->
-	<action name="combobox_finditem" scope="localonly" args="cbname, itemcaption, returnvariable">
-		copy(cb, global.layer[get(cbname)]);
-		copy(item_cnt, cb.item.count);
-		set(calc('global.' + returnvariable), -1);
-		for(def(item_i, integer, 0), item_i LT  item_cnt, inc(item_i),
-			if(cb.item[get(item_i)].caption == itemcaption,
-				copy(calc('global.' + returnvariable), item_i);
-				copy(item_i, item_cnt);
-			);
-		);
-	</action>
-
-
-	<!-- remove all items (to be able to add new ones) -->
-	<action name="combobox_removeitems" scope="localonly" args="cbname">
-		copy(cb, global.layer[get(cbname)]);
-		if(global.openedcombobox === cb, combobox_closelist() );
-
-		<!-- remove all item layers -->
-		calc(item_i, cb.item.count - 1);
-		loop(item_i GE 0,
-			removelayer(get(cb.item[get(item_i)].itemlayername));
-			dec(item_i);
-		);
-
-		<!-- reset the item information -->
-		set(cb.item.count, 0);
-		set(cb.autosize_i,0);
-		set(cb.autosize_cnt, 0);
-		set(cb.autosize_max_w, 0);
-		set(cb.autosize_max_h, 0);
-		set(cb.selecteditemindex, 0);
-		set(cb.lastselecteditemindex, 0);
-		if(cb.width == cb.lastautosizedwidth, set(cb.width, null));
-	</action>
-
-
-	<!-- open the combobox list -->
-	<action name="combobox_openlist" scope="localonly" args="cbname">
-		<!-- if another combobox is already open, close that one first -->
-		if(global.openedcombobox !== null, combobox_closelist() );
-
-		copy(cb, global.layer[get(cbname)]);
-		copy(global.openedcombobox, cb);
-		
-		<!-- move to top -->
-		copy(cb.backupzorder, cb.zorder);
-		set(cb.zorder, 999);
-
-		<!-- find the available screen space above or below the combobox -->
-		calc(cbheight, 2*cb.margin + cb.autosize_max_h);
-		set(lx1, 0);
-		set(ly1, 0);
-		copy(lx2, cb.pixelwidth);
-		copy(ly2, cbheight);
-		layertoscreen(get(cbname), lx1,ly1, lx1,ly1);
-		layertoscreen(get(cbname), lx2,ly2, lx2,ly2);
-		calc(space_above, ly1 - global.area.pixely);
-		calc(space_below, global.area.pixelheight - (ly2 - global.area.pixely));
-
-		<!-- the required space for full opening: -->
-		calc(openheight, cb.margin + cb.autosize_cnt*(cb.margin+cb.autosize_max_h) );
-
-		<!-- vertical centered alignment? -->
-		calc(cb_edge, cb.edge ? cb.edge : cb.align);
-		calc(iscentered, cb_edge == 'left' OR cb_edge == 'center' OR cb_edge == 'right');
-		if(iscentered,
-			calc(openheight_max, space_above + space_below);
-		  ,
-			Math.max(openheight_max, space_above, space_below);
-		);
-
-		<!-- limit the height to the available space (minus some margin) -->
-		Math.min(openheight, calc(openheight_max + cbheight - 20));
-
-		<!-- need vertical offset? (depending on the available space and the align/edge setting) -->
-		set(yoffset, null);
-		calc(top_overflow, -ly1 + global.area.pixely + openheight/2);
-		calc(bottom_overflow, ly2 - global.area.pixely + openheight/2 - global.area.pixelheight);
-		if(cb.parent,
-			<!-- no vertical offset inside other layers, do only a height clipping -->
-			Math.max(max_overflow, top_overflow, bottom_overflow, 0);
-			sub(openheight, max_overflow);
-		  ,
-			if(iscentered,
-				if(openheight GE (global.area.pixelheight - 20),
-					set(yoffset,0);
-				  ,
-					if(top_overflow GT 0, calc(yoffset, cb.y + top_overflow); );
-					if(bottom_overflow GT 0, calc(yoffset, cb.y - bottom_overflow); );
-				);
-			,
-				indexoftxt(isbottomalign, get(cb_edge), 'bottom');
-				if(space_above GT space_below,
-					if(isbottomalign LT 0, calc(yoffset, cb.y - openheight + cbheight); );
-				  ,
-					if(isbottomalign GE 0, calc(yoffset, cb.y - openheight + cbheight); );
-				);
-			);
-		);
-		if(yoffset != null,
-			copy(cb.ybackup, cb.y);
-			tween(global.layer[get(cbname)].y, calc(yoffset), get(cb.open_close_speed));
-		);
-
-		<!-- center the opened list at the selected item -->
-		calc(centeritem_y, -1 * (cb.margin + cb.selecteditemindex*(cb.margin+cb.autosize_max_h) + cb.autosize_max_h/2 - openheight/2));
-		clamp(centeritem_y, calc(openheight - cb.scrollarea.height), 0);
-
-		<!-- apply the changes now -->
-		tween(global.layer[get(cbname)].height, get(openheight), get(cb.open_close_speed));
-		tween(global.layer[get(cbname)].scrollarea.y, get(centeritem_y), get(cb.open_close_speed), default, global.layer[get(cbname)].scrollarea.update(); );
-
-		<!-- special html5/flash case:
-			 rotating textfields (the marker symbol here) are not possible in
-			 flash (a flashplayer limitation), so use a rotated symbol instead.
-		-->
-		if(global.device.html5,
-			tween(global.layer[get(cbname)].marker.rotate, 90, get(cb.open_close_speed));
-		  ,
-			set(global.layer[get(cbname)].marker.html, '◀');
-		);
-
-		<!-- enable the scrollarea to allow the user to drag it -->
-		set(cb.scrollarea.enabled, true);
-
-		<!-- install a global onmousedown event to close the list when clicking at the pano -->
-		set(global.events[combobox_xml_plugin_events].onmousedown, combobox_closelist() );
-	</action>
-
-
-	<!-- close the current open list -->
-	<action name="combobox_closelist" scope="localonly">
-		if(global.openedcombobox !== null,
-			copy(cb, global.openedcombobox);
-			delete(global.openedcombobox);
-			
-			<!-- restore zorder -->
-			copy(cb.zorder, cb.backupzorder);
-			
-			<!-- clear the global onmousedown event -->
-			set(global.events[combobox_xml_plugin_events].onmousedown, null);
-
-			<!-- disable the dragging -->
-			set(cb.scrollarea.enabled, false);
-
-			<!-- closing animations -->
-			calc(offset, cb.selecteditemindex*(cb.autosize_max_h + cb.margin));
-			if(cb.ybackup !== null, tween(cb.y, get(cb.ybackup), get(cb.open_close_speed)));
-			global.layer[get(cb.name)].scrollarea.stopscrolling();
-			tween(global.layer[get(cb.name)].height, calc(2*cb.margin + cb.autosize_max_h), get(cb.open_close_speed));
-			tween(global.layer[get(cb.name)].scrollarea.y, calc(-offset), get(cb.open_close_speed), default, global.layer[get(cb.name)].scrollarea.update(); );
-			tween(global.layer[get(cb.name)].marker.y, calc(cb.margin + offset + cb.autosize_max_h/2), get(cb.open_close_speed));
-			<!-- special html5/flash case: rotate marker or change symbol -->
-			if(global.device.html5,
-				tween(global.layer[get(cb.name)].marker.rotate, 0, get(cb.open_close_speed));
-			  ,
-				set(global.layer[get(cb.name)].marker.html, '▼');
-			);
-		);
-	</action>
-
-</krpano>

+ 0 - 48
src/components/krpanoImg/plugins/doubleclick_style.xml

@@ -1,48 +0,0 @@
-<krpano>
-	
-	<!--
-		doubleclick_style.xml
-		krpano 1.20
-	
-		A helper style for single/double click detection for layer and hotspot elements.
-		
-		Example:
-		
-		<layer ...
-		       style="doubleclick"
-		       onsingleclick="trace('-single click-');"
-		       ondoubleclick="trace('-double click-');"
-		       />
-	-->
-	
-	<style name="doubleclick"
-	       downx="0"
-	       downy="0"
-	       clicks="0"
-	       onsingleclick=""
-	       ondoubleclick=""
-	       onclick="doubleclick_style_onclick();"
-	       />
-
-	<action name="doubleclick_style_onclick">
-	    inc(clicks);
-	    if(clicks == 2,
-	        set(clicks,0); 
-	        stopdelayedcall(doubleclickdetector);
-	        if((((mouse.x-downx)^2 + (mouse.y-downy)^2)^0.5) LT (device.touch ? 10 : 2),
-	            ondoubleclick();
-	          ,
-	            onsingleclick();
-	            onsingleclick();
-	        );
-	      ,
-	        copy(downx, mouse.x); 
-	        copy(downy, mouse.y);
-	        delayedcall(doubleclickdetector, 0.3, 
-	            set(clicks,0); 
-	            onsingleclick();
-	        );
-	    );
-	</action>
-	
-</krpano>

+ 0 - 28
src/components/krpanoImg/plugins/fps.xml

@@ -1,28 +0,0 @@
-<krpano>
-
-	<!--
-		fps (frames per second) xml plugin
-		- this plugin shows the current average rendering frame-rate
-	-->
-
-	<action name="fps_install" autorun="preinit" scope="local">
-		delayedcall(0.5,
-			addlayer(fps_display);
-			set(layer[fps_display],
-				type=text,
-				keep=true,
-				align='lefttop',
-				css=calc('font-size:'+(device.mobile AND stagescale LT 1.0 ? 24 : 12)+'px; color:#FFFFFF;'),
-				txtshadow='0 0 1 0x000000 1.0',
-				bg=false,
-				parent=STAGE,
-				vr=true,
-				enabled=false
-			);
-			setinterval(fps_plugin, 0.5,
-				calc(layer[fps_display].html, 'FPS: ' + ((display.currentfps+0.5) BOR 0));
-			);
-		);
-	</action>
-
-</krpano>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 5
src/components/krpanoImg/plugins/googlemaps.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 5
src/components/krpanoImg/plugins/gyro2.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 5
src/components/krpanoImg/plugins/pp_blur.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 5
src/components/krpanoImg/plugins/pp_light.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 5
src/components/krpanoImg/plugins/pp_sharpen.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 19
src/components/krpanoImg/plugins/scrollarea.js


+ 0 - 214
src/components/krpanoImg/plugins/showtext.xml

@@ -1,214 +0,0 @@
-<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>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 5
src/components/krpanoImg/plugins/soundinterface.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 5
src/components/krpanoImg/plugins/videoplayer.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 5
src/components/krpanoImg/plugins/webvr.js


+ 0 - 923
src/components/krpanoImg/plugins/webvr.xml

@@ -1,923 +0,0 @@
-<krpano>
-	<!--
-		webvr.xml
-		- krpano 1.20.9
-		
-		https://krpano.com/plugins/webvr/
-	-->
-
-	<!-- load the WebVR plugin and assign it to a global 'webvr' variable -->
-	<plugin name="webvr" devices="html5" keep="true"
-	        url="webvr.js"
-	        mobilevr_support="true"
-	        mobilevr_touch_support="true"
-	        mobilevr_fake_support="true"
-	        mobilevr_profile.normal="90|60|42|0|0|0"
-	        mobilevr_profile.mobile="80|60|42|35|0.441|0.156"
-	        mobilevr_wakelock="true"
-	        fullscreen_mirroring="false"
-	        mouse_pointerlock="true"
-	        vr_cursor_onover="if(handcursor, tween(hotspot[vr_cursor].scale,0.4,0.1); vr_auto_click(get(vr_timeout)); );"
-	        vr_cursor_onout="tween(hotspot[vr_cursor].scale,0.3,0.1);"
-	        onavailable="webvr_onavailable();"
-	        onunavailable=""
-	        onunknowndevice="webvr_onunknowndevice();"
-	        onvrcontrollers="webvr_onvrcontrollers();"
-	        onentervr="webvr_onentervr();"
-	        onexitvr="webvr_onexitvr();"
-	        />
-
-
-
-	<!-- the VR cursor hotspot -->
-	<style name="vr_cursor_style" 
-		url="webvr_vrcursor.png"
-		visible="false"
-		enabled="false"
-		distorted="true"
-		crop="0|0|80|80"
-		scale="0.3"
-		depth="120"
-		/>
-	
-	<action name="webvr_load_vr_cursor_hs" scope="local">
-		addhotspot('vr_cursor', hs);
-		hs.loadstyle(vr_cursor_style);
-		set(hs.keep, true);
-		set(webvr.vr_cursor, 'hotspot[vr_cursor]');
-	</action>
-	
-	<action name="webvr_load_vr_controller_hs" scope="private:VRCONTROLLERS" args="controllerstyle">
-		removehotspot('vr_controller_l');
-		removehotspot('vr_controller_r');
-		addhotspot('vr_controller_l', vr_ctrl_l);
-		addhotspot('vr_controller_r', vr_ctrl_r);
-		set(vr_ctrl_l.keep, true);
-		set(vr_ctrl_r.keep, true);
-		vr_ctrl_l.loadstyle(calc(controllerstyle ? controllerstyle : 'vrcontroller_light_and_point'));
-		vr_ctrl_r.loadstyle(calc(controllerstyle ? controllerstyle : 'vrcontroller_light_and_point'));
-
-		<!-- optional: vibrate the controllers on hovering:
-		vr_ctrl_l.addevent('onover', pulse(1.0, 0.25) );
-		vr_ctrl_r.addevent('onover', pulse(1.0, 0.25) ); -->
-		if(!global.webvr.iswebxr,
-			vr_ctrl_l.addevent('onvrcontrollerbutton', 'if(vrbuttonindex == 3 AND vrbuttonstate == "up", vrsetup_open(); );' );
-			vr_ctrl_r.addevent('onvrcontrollerbutton', 'if(vrbuttonindex == 3 AND vrbuttonstate == "up", vrsetup_open(); );' );
-		);
-		
-		set(global.webvr.vr_controller, 'vr_controller_l,vr_controller_r');
-		set(global.have_vr_controllers, true);
-		
-		if(global.webvr.isvrbrowser AND global.webvr.vrcontrollers[0].buttons.length LE 2,
-			<!-- when there are only two buttons on the VR controller (e.g. Oculus Go) use an extra hotspot for the VR-setup -->
-			addhotspot('webvr_vrsetup', vr_setup_hs);
-			vr_setup_hs.loadstyle('webvr_button_style');
-			set(vr_setup_hs, keep=true, ath=0, atv=90, depth=160, zorder=999, torigin=view, html='VR SETUP', oversampling=3, scale=0.2, onclick='vrsetup_open();', onloaded='renderloop( copy(ath,view.hlookat); );');
-		);
-	</action>
-	
-	<action name="webvr_onvrcontrollers" scope="private:VRCONTROLLERS">
-		if(!global.have_vr_controllers, webvr_load_vr_controller_hs(); );
-	</action>
-		
-	<style name="vrcontroller_laser" 
-			url="webvr_laser.png"
-			distorted="true"
-			enabled="false"
-			visible="false"
-			width="0.5" height="1000" edge="bottom" oref="1" oy="0"
-			torigin="world" tx="0" ty="0" tz="0" depth="0"
-			zorder="99999"
-			depthbuffer="true"
-			onloaded="asyncloop(loaded, 
-				calc(height, (target AND target.hitd GT 0 ? target.hitd : 1000) / display.hotspotworldscale); 
-				);"
-			/>
-			
-	<style name="vrcontroller_light_and_point" 
-			url="webvr_light.png"
-			distorted="true"
-			enabled="false"
-			visible="false"
-			width="0.5" height="18" edge="bottom" oref="1" oy="0"
-			torigin="world" tx="0" ty="0" tz="0" depth="0"
-			zorder="99999"
-			depthbuffer="true"
-			onloaded="vrcontroller_target_point();"
-			/>
-	
-	<style name="vrcontroller_handcursor_and_point" 
-			url="webvr_handcursor.png"
-			distorted="true"
-			enabled="false"
-			visible="false"
-			width="10" height="10" edge="center" oref="1" oy="-1"
-			torigin="world" tx="0" ty="0" tz="0" depth="0"
-			zorder="99999"
-			depthbuffer="true"
-			onloaded="vrcontroller_target_point();"
-			/>
-	
-	<action name="vrcontroller_target_point" scope="localonly">
-		addhotspot(auto, hs);
-		set(hs, keep=true, type=text, bgcolor=0xFFFFFF, bgalpha=1.0, width=10, height=10, bgroundedge=5, bgborder='1 0x000000 1.0', oversampling=2,
-			scale=0.4, torigin=world, depth=0, distorted=false, zoom=true, zorder=99998, enabled=false
-		  );
-		renderloop(
-			if(!caller.loaded,
-				removehotspot(get(hs.name));
-				stoprenderloop();
-			  ,
-				if(global.display.havedepthmap,
-					<!-- use the laser for depthmap panos -->
-					removehotspot(get(hs.name));
-					stoprenderloop();
-					webvr_load_vr_controller_hs('vrcontroller_laser');
-				  ,
-					calc(hs.bgcolor, caller.pressed ? 0x049AFF : (caller.hovering ? 0x00FF00 : 0xFFFFFF));
-					calc(distance, (caller.target AND caller.target.hitd GT 0 ? caller.target.hitd : 1000));
-					calc(hs.scale, 0.4 * (distance GT 1000 ? distance / 1000 : (distance LT 200 ? 0.25 : (0.25 + (distance - 200)/800 * 0.75))));
-					calc(hs.tx, caller.tx + caller.dx * distance);
-					calc(hs.ty, caller.ty + caller.dy * distance);
-					calc(hs.tz, caller.tz + caller.dz * distance);
-				);
-			);
-		);
-	</action>
-	
-
-
-
-	<!-- vr_auto_click() - call this action in the onover event of a
-	     hotspot to trigger automatically a click after some time.  -->
-	<action name="vr_auto_click" scope="local" args="vr_aclk_timeout">
-		if(webvr.isenabled,
-			if(vr_aclk_timeout == null, set(vr_aclk_timeout, 2000));
-			copy(vr_aclk_t1, timertick);
-			set(vr_aclk_waiting, true);
-			copy(webvr.vr_aclk_hotspot, caller.name);
-			set(hotspot[vr_cursor].crop,'0|0|80|80');
-
-			asyncloop(vr_aclk_waiting AND webvr.vr_aclk_hotspot == caller.name,
-				sub(dt, timertick, vr_aclk_t1);
-
-				if(!caller.hovering,
-					set(vr_aclk_waiting, false);
-					set(hotspot[vr_cursor].crop,'0|0|80|80');
-				  ,
-					div(f, dt, vr_aclk_timeout);
-					mul(f, 16);
-					roundval(f);
-					Math.min(f, 16);
-					mul(f, 80);
-
-					txtadd(hotspot[vr_cursor].crop,get(f),'|0|80|80');
-
-					<!-- wait another 100ms delay after finishing the animation before doing the click -->
-					sub(dt, 100);
-					if(dt GT vr_aclk_timeout,
-						set(vr_aclk_waiting,false);
-						set(hotspot[vr_cursor].crop,'0|0|80|80');
-						<!-- call onclick -->
-						callwith(caller, scope(global, ondown();onup();onclick(); ); );
-					);
-				);
-			);
-		);
-	</action>
-
-
-	<!-- by pressing SPACE the headset could be re-centered -->
-	<events name="webvr_events" devices="html5" keep="true"
-	        onmousedown="if(webvr AND webvr.isenabled, webvr_showbuttons() );"
-	        />
-
-
-
-	<!-- when WebVR support is available show an EnterVR button -->
-	<action name="webvr_onavailable">
-		webvr.loadsettings();
-		if(layer[webvr_enterbutton], delayedcall(0.5, tween(layer[webvr_enterbutton].alpha,1.0); ); );
-	</action>
-	
-	
-	<action name="webvr_onunknowndevice">
-		if(webvr.isfake AND device.desktop AND webvr.havesettings == false,
-			<!-- set the 'no distortion' headset for fake desktop usage -->
-			set(webvr.mobilevr_lens_overlap, 1.0);
-			set(webvr.mobilevr_lens_fov, 96.0);
-			set(webvr.mobilevr_lens_dist, 0.0);
-			set(webvr.mobilevr_lens_dist2, '1|0|0|0');
-			set(webvr.mobilevr_lens_ca, 0.0);
-			set(webvr.mobilevr_lens_vign, 100);
-		  );
-	</action>
-
-
-	<action name="webvr_onentervr">
-		if(layer[webvr_enterbutton], tween(layer[webvr_enterbutton].alpha,0,0); );
-
-		webvr_showbuttons();
-		webvr_hide_all_non_vr_layers();
-
-		if(webvr.isfake, webvr_show_fakemode_info(true); );
-		
-		webvr_load_vr_cursor_hs();
-	</action>
-
-
-	<action name="webvr_onexitvr">
-		removehotspot('vr_cursor');
-		removehotspot('vr_controller_l');
-		removehotspot('vr_controller_r');
-		set(have_vr_controllers, false);
-		
-		stopdelayedcall(vr_button_fadeout);
-
-		if(layer[webvr_enterbutton], tween(layer[webvr_enterbutton].alpha,1); );
-		tween(layer[webvr_exitbutton].alpha,0);
-		tween(layer[webvr_setupbutton].alpha,0);
-		
-		webvr_show_fakemode_info(false);
-
-		webvr_restore_layers();
-	</action>
-
-
-	<action name="webvr_hide_all_non_vr_layers" scope="local">
-		for(set(i,0), i LT layer.count, inc(i),
-			copy(lr, layer[get(i)]);
-			if(lr.vr !== true,
-				copy(lr.vr_backup_visible, lr.visible);
-				set(lr.visible, false);
-			);
-		);
-	</action>
-
-	<action name="webvr_restore_layers" scope="local">
-		for(set(i,0), i LT layer.count, inc(i),
-			copy(lr, layer[get(i)]);
-			if(lr.vr_backup_visible,
-				copy(lr.visible, lr.vr_backup_visible);
-				delete(lr.vr_backup_visible);
-			);
-		);
-	</action>
-	
-	<action name="webvr_show_fakemode_info" scope="local" args="show">
-		if(show == true,
-			addlayer(webvr_fakemode_info);
-			set(layer[webvr_fakemode_info],
-				type='text',
-				keep=true,
-				align='bottom',
-				y=80,
-				bg=false,
-				css='color:#FFFFFF;text-align:center;',
-				html='[i][u]Simulated WebVR Mode![/u][br]For real WebVR with headset tracking use a [a href="http://webvr.info" target="_blank" style="color:#FFFFFF;"]WebVR-capable[/a] browser or a mobile device and a VR headset.[/i]'
-			);
-		  ,
-			removelayer(webvr_fakemode_info);
-		);
-	</action>
-	
-	
-	<!-- ensure the same scaling on mobiles (regardless if mobilescale is 0.5 or 1.0) -->
-	<krpano webvr_setup_scale="calc:(1.0 + 1.0*(device.mobile AND stagescale LT 1.0)) / (1.0 + 1.0*device.mobile)"
-	        webvr_button_scale.normal="1.0"
-	        webvr_button_scale.mobile="1.6"
-	        />
-
-	
-	<!-- the EnterVR/ExitVR and SetupVR buttons -->
-	<style name="webvr_button_style"
-	       type="text"
-	       bgcolor="0x000000"
-	       bgalpha="0.5"
-	       bgroundedge="0"
-	       css="calc:'color:#FFFFFF;font-size:' + 20*webvr_setup_scale*webvr_button_scale + 'px;'"
-	       padding="calc:6*webvr_setup_scale*webvr_button_scale + ' ' + 10*webvr_setup_scale*webvr_button_scale"
-	       />
-	
-	<layer name="webvr_enterbutton" keep="true" vr="true"
-	       style="webvr_button_style"
-	       html="Enter VR"
-	       align="top" y="24"
-	       autoalpha="true" alpha="0.0"
-	       onclick="webvr.enterVR();"
-	       />
-
-	<layer name="webvr_exitbutton" keep="true" vr="true"
-	       style="webvr_button_style"
-	       html="Exit VR"
-	       align="top" y="24"
-	       autoalpha="true" alpha="0.0"
-	       onclick="webvr.exitVR();"
-	       />
-
-	<layer name="webvr_setupbutton" keep="true" vr="true"
-	       style="webvr_button_style"
-	       html="VR Setup"
-	       align="bottom" y="24"
-	       autoalpha="true" alpha="0.0"
-	       onclick="vrsetup_open();"
-	       />
-
-
-	<action name="webvr_showbuttons">
-		stopdelayedcall(vr_button_fadeout);
-		tween(layer[webvr_exitbutton].alpha|layer[webvr_setupbutton].alpha, 1.0|1.0, 0.25);
-		delayedcall(vr_button_fadeout, 3.0, tween(layer[webvr_exitbutton].alpha|layer[webvr_setupbutton].alpha, 0.0|0.0, 1.0); );
-	</action>
-
-	
-		
-	<!-- VR SETUP -->
-	
-	
-	<mobilevr_presets>
-		<headset name="cbv1" caption="Cardboard V1"  profile="80|60|42|35|0.441|0.156" />
-		<headset name="cbv2" caption="Cardboard V2"  profile="120|64|39|35|0.34|0.55" />
-		<headset name="dydm" caption="Daydream"      profile="104|60|41|35|0.42|0.51" />
-		<headset name="nodt" caption="No Distortion" profile="90|60|42|0|0|0" />
-	</mobilevr_presets>
-
-	<action name="vrsetup_open">
-		if(!vrsetup_open_js, vrsetup_init(); );
-		vrsetup_open_js();
-	</action>
-		
-
-	<action name="vrsetup_init" type="Javascript"><![CDATA[
-		
-		var webvr = krpano.webvr;
-		var padding = 20;
-		
-		function vrsetup_dlg_create(type)
-		{
-			var dlg = {type:type, bg:null, y:0, scale:1, elements:[]};
-		
-			if (type == 'layer')
-			{
-				dlg.bg = krpano.addlayer();
-				dlg.bg.keep = true;
-				dlg.bg.type = 'container';
-				dlg.bg.align = 'center';
-			}
-			else	// 'hotspot'
-			{
-				dlg.scale = 0.15;
-				dlg.bg = krpano.addhotspot();
-				dlg.bg.keep = true;
-				dlg.bg.type = 'text';
-				dlg.bg.distorted = true;
-				dlg.bg.ath = krpano.view.hlookat;
-				dlg.bg.atv = 0;
-				dlg.bg.depth = 150;
-				dlg.bg.torigin = 'world';
-				dlg.bg.tx = krpano.view.tx;
-				dlg.bg.ty = krpano.view.ty;
-				dlg.bg.tz = krpano.view.tz;
-			}
-			
-			dlg.bg.bgcolor = 0x000000;
-			dlg.bg.bgalpha = 0.5;
-			dlg.bg.bgcapture = true;
-			dlg.bg.handcursor = false;
-			dlg.bg.capture = false;
-			dlg.bg.zorder = 100;
-			dlg.bg.visible = false;
-			
-			dlg.y = 0;
-			
-			return dlg;
-		}
-		
-		function vrsetup_dlg_addline(dlg, linetext, customcss, onclick)
-		{
-			var txt;
-			
-			if (dlg.type == 'layer')
-			{
-				txt = krpano.addlayer();
-				txt.keep = true;
-				txt.type = 'text';
-				txt.align = 'center';
-				txt.zorder = 101;
-			}
-			else	// 'hotspot'
-			{
-				txt = krpano.addhotspot();
-				txt.keep = true;
-				txt.type = 'text';
-				txt.distorted = true;
-				txt.zorder = 101;
-				txt.ath = dlg.bg.ath;
-				txt.atv = dlg.bg.atv;
-				txt.depth = dlg.bg.depth - 1;
-				txt.oversampling = 2;
-				txt.scale = dlg.scale;
-				txt.torigin = dlg.bg.torigin;
-				txt.tx = dlg.bg.tx;
-				txt.ty = dlg.bg.ty;
-				txt.tz = dlg.bg.tz;
-			}
-			
-			txt.onautosized = function()
-			{
-				txt.havesize = true;
-			}
-			
-			txt.edge = 'top';
-			txt.visible = false;
-			txt.bg = false;
-			txt.html = "" + linetext;
-			txt.css = 'font-size:32px;font-weight:bold;color:#FFFFFF; line-height:90%;' + (customcss || '');
-			
-			if (onclick)
-			{
-				txt.onclick = onclick;
-			}
-			else
-			{
-				txt.enabled = false;
-			}
-			
-			dlg.elements.push( txt );
-			
-			return txt;
-		}
-		
-		function vrsetup_dlg_addctrl(dlg, changedelay, callback)
-		{
-			var txt = vrsetup_dlg_addline(dlg, callback(0) );
-			
-			var inc;
-			var dec;
-			
-			if(dlg.type == 'layer')
-			{
-				inc = krpano.addlayer();
-				inc.keep = true;
-				inc.type = 'text';
-				inc.align = 'center';
-				inc.zorder = 101;
-				
-				dec = krpano.addlayer();
-				dec.keep = true;
-				dec.type = 'text';
-				dec.align = 'center';
-				dec.zorder = 101;
-			}
-			else	// 'hotspot'
-			{
-				inc = krpano.addhotspot();
-				inc.keep = true;
-				inc.type = 'text';
-				inc.distorted = true;
-				inc.zorder = 101;
-				inc.ath = dlg.bg.ath;
-				inc.atv = dlg.bg.atv;
-				inc.depth = dlg.bg.depth - 1;
-				inc.oversampling = 2;
-				inc.scale = dlg.scale;
-				inc.torigin = dlg.bg.torigin;
-				inc.tx = dlg.bg.tx;
-				inc.ty = dlg.bg.ty;
-				inc.tz = dlg.bg.tz;
-				
-				dec = krpano.addhotspot();
-				dec.keep = true;
-				dec.type = 'text';
-				dec.distorted = true;
-				dec.zorder = 101;
-				dec.ath = dlg.bg.ath;
-				dec.atv = dlg.bg.atv;
-				dec.depth = dlg.bg.depth - 1;
-				dec.oversampling = 2;
-				dec.scale = dlg.scale;
-				dec.torigin = dlg.bg.torigin;
-				dec.tx = dlg.bg.tx;
-				dec.ty = dlg.bg.ty;
-				dec.tz = dlg.bg.tz;
-			}
-			
-			inc.edge = 'top';
-			inc.visible = false;
-			inc.bg = false;
-			inc.html = '&#62;';
-			inc.css = 'font-size:32px;font-weight:bold;color:#FFFFFF; line-height:90%;';
-			inc.padding = '0 10';
-					
-			dec.edge = 'top';
-			dec.visible = false;
-			dec.bg = false;
-			dec.html = '&#60;';
-			dec.css = 'font-size:32px;font-weight:bold;color:#FFFFFF; line-height:90%;';
-			dec.padding = '0 10';
-			
-			inc.vr_timeout = changedelay * 1000;
-			dec.vr_timeout = changedelay * 1000;
-			inc.ondown = function(){ txt.html = ""+callback(+1); inc.enabled = false; setTimeout(function(){ inc.enabled = true; },0); };
-			dec.ondown = function(){ txt.html = ""+callback(-1); dec.enabled = false; setTimeout(function(){ dec.enabled = true; },0); };
-			
-			txt.ctrlchilds = [inc,dec];
-			
-			txt.updateControl = function()
-			{
-				txt.html = callback(0);
-			}
-			
-			return txt;
-		}
-		
-		function vrsetup_dlg_addspace(dlg, customspace)
-		{
-			dlg.elements.push(customspace|| padding);
-		}
-		
-		function vrsetup_dlg_finish(dlg)
-		{
-			var i, w=0, h=0;
-			var waitforsizes=false;
-			
-			for (i=0; i < dlg.elements.length; i++)
-			{
-				var e = dlg.elements[i];
-				if ( isNaN(e) )
-				{
-					if ( e.havesize )
-					{
-						w = Math.max( w, e.width * 1);
-						h += e.height * 1;
-					}
-					else
-					{
-						waitforsizes = true;
-						break;
-					}
-				}
-				else
-				{
-					h += e;
-				}
-			}
-			
-			if (waitforsizes)
-			{
-				setTimeout( function(){ vrsetup_dlg_finish(dlg); }, 16 ); 
-			}
-			else
-			{
-				var y = 0;
-				
-				dlg.bg.width = Math.ceil((w + padding*2)*dlg.scale);
-				dlg.bg.height = Math.ceil((h + padding*2)*dlg.scale);
-					
-				for (i=0; i < dlg.elements.length; i++)
-				{
-					var e = dlg.elements[i];
-					if ( isNaN(e) )
-					{
-						e.oy = Math.round((-h/2 + y) * dlg.scale);
-						e.visible = true;
-						
-						y += e.height * 1;
-						
-						if (e.ctrlchilds )
-						{
-							for (var j=0; j < e.ctrlchilds.length; j++)
-							{
-								var sube = e.ctrlchilds[j];
-								sube.ox = Math.round(((j&1)-0.5) * (-w) * dlg.scale);
-								sube.oy = e.oy;
-								sube.visible = true;
-							}
-						}
-					}
-					else
-					{
-						y += e;
-					}
-				}
-				
-				dlg.bg.visible = true;
-			}
-		}
-		
-		function vrsetup_dlg_remove(dlg)
-		{
-			var removefu = dlg.type == 'layer' ? krpano.removelayer : krpano.removehotspot;
-			
-			var i,j;
-			for (i=0; i < dlg.elements.length; i++)
-			{
-				var e = dlg.elements[i];
-				if ( isNaN(e) )
-				{
-					if (e.ctrlchilds )
-					{
-						for (j=0; j < e.ctrlchilds.length; j++)
-						{
-							var sube = e.ctrlchilds[j];
-							removefu(sube.name);
-						}
-					}
-					
-					removefu(e.name);
-				}
-			}
-			
-			removefu(dlg.bg.name);
-		}
-		
-		
-		function vrsetup_webvr_dialog()
-		{
-			// WebVR API rendering
-			var dlg = vrsetup_dlg_create('hotspot');
-			vrsetup_dlg_addline(dlg, 'WebVR Setup');
-			vrsetup_dlg_addspace(dlg);
-			
-			vrsetup_dlg_addline(dlg, 'Oversampling:', 'font-size:16px;')
-			var ctrl_ss = vrsetup_dlg_addctrl(dlg, 1.0, function(change)
-			{
-				var p = webvr.oversampling;
-				
-				if (change < 0) { p = Math.max(0.2, Number(p) - 0.1); webvr.oversampling = p;  } else 
-				if (change > 0) { p = Math.min(4.0, Number(p) + 0.1); webvr.oversampling = p;  }
-				
-				krpano.actions.delayedcall(0.3, function()
-				{
-					renderres.html = webvr.renderwidth + "x" + webvr.renderheight;
-				});
-				
-				return p.toFixed(1);
-			});
-			vrsetup_dlg_addspace(dlg,8);
-			vrsetup_dlg_addline(dlg, 'Rendering Resolution:', 'font-size:16px;');
-			var renderres = vrsetup_dlg_addline(dlg, '');
-			vrsetup_dlg_addspace(dlg);
-			vrsetup_dlg_addline(dlg, 'CLOSE', '', vrsetup_close);
-			vrsetup_dlg_finish(dlg);
-			
-			return dlg;
-		}
-		
-		function vrsetup_mobilevr_dialog()
-		{
-			// MobileVR / Cardboard rendering
-			var dlg = vrsetup_dlg_create(0 ? 'hotspot' : 'layer');
-			vrsetup_dlg_addline(dlg, 'MobileVR SETUP');
-			vrsetup_dlg_addspace(dlg);
-			vrsetup_dlg_addline(dlg, 'Screensize (inch):', 'font-size:16px;')
-			vrsetup_dlg_addctrl(dlg, 1.0, function(change){ var ss = Number(webvr.mobilevr_screensize); if (isNaN(ss)) ss = 5.0; if (change < 0) { ss = Math.max(4.0, ss - 0.1); webvr.mobilevr_screensize = ss; } else if (change > 0) { ss = Math.min(10.0, ss + 0.1); webvr.mobilevr_screensize = ss; } return ss.toFixed(1); });
-			vrsetup_dlg_addspace(dlg);
-			vrsetup_dlg_addline(dlg, 'VR Headset Preset:', 'font-size:16px;')
-			var ctrl_ps = vrsetup_dlg_addctrl(dlg, 1.0, function(change)
-			{
-				var preset_index = -1;
-				var i;
-				
-				var profile = webvr.mobilevr_profile;
-				var presets = krpano.get("mobilevr_presets.headset");
-				if (presets)
-				{
-					presets = presets.getArray();
-					
-					for (i=0; i < presets.length; i++)
-					{
-						if ( profile == presets[i].profile )
-						{
-							preset_index = i;
-							break;
-						}
-					}
-					
-					if (change < 0)
-					{
-						preset_index--;
-						if (preset_index < 0)
-							preset_index = presets.length - 1;
-								
-						webvr.mobilevr_profile = presets[preset_index].profile;
-					}
-					else if (change > 0)
-					{
-						preset_index++;
-						if (preset_index >= presets.length)
-							preset_index = 0;
-						
-						webvr.mobilevr_profile = presets[preset_index].profile;
-					}
-				}
-					
-				if (preset_index >= 0)
-				{
-					return presets[preset_index].caption;
-				}
-				
-				return 'Custom';
-			});
-			vrsetup_dlg_addspace(dlg);
-			vrsetup_dlg_addline(dlg, 'Customize Headset', 'font-size:25px;', function()
-			{
-				vrsetup_dlg_remove(dlg); 
-				dlg=null; 
-				
-				vrsetup_dialog = vrsetup_mobilevr_interactive_dialog();
-				
-			});
-			vrsetup_dlg_addline(dlg, '(Interactive Adjustment in VR)', 'font-size:12px;');
-			vrsetup_dlg_addspace(dlg);
-			vrsetup_dlg_addline(dlg, 'CLOSE', '', vrsetup_close);
-			vrsetup_dlg_finish(dlg);
-			
-			return dlg;
-		}
-		
-		function vrsetup_mobilevr_interactive_dialog()
-		{
-			// MobileVR / Cardboard rendering
-			var ctrl_preset, ctrl_fov, ctrl_ild, ctrl_stl, ctrl_ttl, ctrl_k1, ctrl_k2, ctrl_os;
-			
-			var dlg = vrsetup_dlg_create('hotspot');
-			vrsetup_dlg_addline(dlg, 'MobileVR SETUP');
-			vrsetup_dlg_addspace(dlg);
-			vrsetup_dlg_addline(dlg, 'Preset:', 'font-size:16px;')
-			
-			ctrl_preset = vrsetup_dlg_addctrl(dlg, 1.0, function(change)
-			{
-				var preset_index = -1;
-				var i;
-				
-				var profile = webvr.mobilevr_profile;
-				var presets = krpano.get("mobilevr_presets.headset");
-				if (presets)
-				{
-					presets = presets.getArray();
-					
-					for (i=0; i < presets.length; i++)
-					{
-						if ( profile == presets[i].profile )
-						{
-							preset_index = i;
-							break;
-						}
-					}
-					
-					if (change < 0)
-					{
-						preset_index--;
-						if (preset_index < 0)
-							preset_index = presets.length - 1;
-								
-						webvr.mobilevr_profile = presets[preset_index].profile;
-					}
-					else if (change > 0)
-					{
-						preset_index++;
-						if (preset_index >= presets.length)
-							preset_index = 0;
-						
-						webvr.mobilevr_profile = presets[preset_index].profile;
-					}
-					
-					if (change != 0)
-					{
-						ctrl_fov.updateControl();
-						ctrl_ild.updateControl();
-						ctrl_stl.updateControl();
-						if (ctrl_ttl) ctrl_ttl.updateControl();
-						ctrl_k1.updateControl();
-						ctrl_k2.updateControl();
-					}
-				}
-			
-				if (preset_index >= 0)
-				{
-					return presets[preset_index].caption;
-				}
-				
-				return 'Custom';
-			});
-			
-			vrsetup_dlg_addspace(dlg);
-			vrsetup_dlg_addline(dlg, 'Lens-Field-of-View:', 'font-size:16px;');
-			ctrl_fov = vrsetup_dlg_addctrl(dlg, 0.25, function(change){ var p = webvr.mobilevr_profile.split("|"); if (change < 0) { p[0] = Number(p[0]) - 1.0; webvr.mobilevr_profile = p.join("|"); } else if (change > 0) { p[0] = Number(p[0]) + 1.0; webvr.mobilevr_profile = p.join("|"); } if (change != 0) ctrl_preset.updateControl(); return Number(p[0]).toFixed(0); });
-			vrsetup_dlg_addspace(dlg, 8);
-			vrsetup_dlg_addline(dlg, 'Inter-Lens-Distance (mm):', 'font-size:16px;');
-			ctrl_ild = vrsetup_dlg_addctrl(dlg, 0.25, function(change){ var p = webvr.mobilevr_profile.split("|"); if (change < 0) { p[1] = Number(p[1]) - 1.0; webvr.mobilevr_profile = p.join("|"); } else if (change > 0) { p[1] = Number(p[1]) + 1.0; webvr.mobilevr_profile = p.join("|"); } if (change != 0) ctrl_preset.updateControl(); return Number(p[1]).toFixed(0); });
-			vrsetup_dlg_addspace(dlg, 8);
-			vrsetup_dlg_addline(dlg, 'Screen-to-Lens-Distance (mm):', 'font-size:16px;');
-			ctrl_stl = vrsetup_dlg_addctrl(dlg, 0.25, function(change){ var p = webvr.mobilevr_profile.split("|"); if (change < 0) { p[2] = Number(p[2]) - 1.0; webvr.mobilevr_profile = p.join("|"); } else if (change > 0) { p[2] = Number(p[2]) + 1.0; webvr.mobilevr_profile = p.join("|"); } if (change != 0) ctrl_preset.updateControl(); return Number(p[2]).toFixed(0); });
-			vrsetup_dlg_addspace(dlg, 8);
-			if (!webvr.isfake)
-			{
-				vrsetup_dlg_addline(dlg, 'Tray-to-Lens-Center-Distance: (mm):', 'font-size:16px;');
-				ctrl_ttl = vrsetup_dlg_addctrl(dlg, 0.25, function(change){ var p = webvr.mobilevr_profile.split("|"); if (change < 0) { p[3] = Number(p[3]) - 1.0; webvr.mobilevr_profile = p.join("|"); } else if (change > 0) { p[3] = Number(p[3]) + 1.0; webvr.mobilevr_profile = p.join("|"); } if (change != 0) ctrl_preset.updateControl(); return Number(p[3]).toFixed(0); });
-				vrsetup_dlg_addspace(dlg, 8);
-			}
-			vrsetup_dlg_addline(dlg, 'Lens-Distortion Coefficients:', 'font-size:16px;');
-			ctrl_k1 = vrsetup_dlg_addctrl(dlg, 0.1, function(change){ var p = webvr.mobilevr_profile.split("|"); if (change < 0) { p[4] = Number(p[4]) - 0.01; webvr.mobilevr_profile = p.join("|"); } else if (change > 0) { p[4] = Number(p[4]) + 0.01; webvr.mobilevr_profile = p.join("|"); } if (change != 0) ctrl_preset.updateControl(); return Number(p[4]).toFixed(3); });
-			ctrl_k2 = vrsetup_dlg_addctrl(dlg, 0.1, function(change){ var p = webvr.mobilevr_profile.split("|"); if (change < 0) { p[5] = Number(p[5]) - 0.01; webvr.mobilevr_profile = p.join("|"); } else if (change > 0) { p[5] = Number(p[5]) + 0.01; webvr.mobilevr_profile = p.join("|"); } if (change != 0) ctrl_preset.updateControl(); return Number(p[5]).toFixed(3); });
-			vrsetup_dlg_addspace(dlg);
-			vrsetup_dlg_addline(dlg, 'Oversampling:', 'font-size:16px;');
-			ctrl_os = vrsetup_dlg_addctrl(dlg, 0.25, function(change){ var p = webvr.oversampling; if (change < 0) { p = Math.max(0.2, Number(p) - 0.1); webvr.oversampling = p;  } else if (change > 0) { p = Math.min(4.0, Number(p) + 0.1); webvr.oversampling = p;  } return p.toFixed(1); });
-			vrsetup_dlg_addspace(dlg);
-			vrsetup_dlg_addline(dlg, 'CLOSE', '', vrsetup_close);
-			vrsetup_dlg_finish(dlg);
-			
-			return dlg;
-		}
-		
-		var vrsetup_dialog = null;
-		var vrsetup_events = null;
-		
-		function vrsetup_close()
-		{
-			if (vrsetup_dialog)
-			{
-				webvr.savesettings();
-			
-				vrsetup_dlg_remove(vrsetup_dialog); 
-				vrsetup_dialog = null;
-			}
-		
-			if (vrsetup_events)
-			{
-				krpano.events.removeItem(vrsetup_events.name);
-				vrsetup_events = null;
-			}
-		}
-		
-		krpano.vrsetup_close = function()
-		{
-			vrsetup_close();
-		}
-		
-		krpano.vrsetup_open_js = function()
-		{
-			if (vrsetup_dialog != null)
-			{
-				// already open...
-				return;
-			}
-				
-			if (webvr.iswebvr)
-			{
-				vrsetup_dialog = vrsetup_webvr_dialog();
-			}
-			else
-			{
-				vrsetup_dialog = vrsetup_mobilevr_dialog();
-			}
-			
-			vrsetup_events = krpano.events.createItem("auto");
-			vrsetup_events.keep = true;
-			
-			vrsetup_events.webvr_onexitvr = function()
-			{
-				vrsetup_close();
-			}
-		}
-		
-	]]></action>
-	
-
-	<!-- A list of devices and their screensize -->
-	<mobilevr_device_database>
-		<device name="iPhone 5/5S/SE" screen="320x568x2" size="4.0" bevel="3" />
-		<device name="iPhone 6/6S/7/8" screen="375x667x2" size="4.7" />
-		<device name="iPhone 6/6S/7/8 Plus" screen="414x736" size="5.5" />
-		<device name="iPhone 6/6S/7/8 Plus (zoomed)" screen="375x667x3" size="5.5" />
-		<device name="iPhone X/XS/11Pro" screen="375x812x3" size="5.85|5.33" />
-		<device name="iPhone XS/11Pro Max" screen="414x896x3" size="6.46|5.95" />
-		<device name="iPhone XR/11" screen="414x896x2" size="6.06|5.58" />
-		<device name="iPhone 12/12Pro" screen="390x844" size="6.1" />
-		<device name="iPhone 12Pro Max" screen="428x926" size="6.7" />
-		<device name="Samsung S6" ua="sm-g930" size="5.1" />
-		<device name="Samsung S6 Edge" ua="sm-g925" size="5.1" />
-		<device name="Samsung S6 Edge Plus" ua="sm-g928" size="5.7" />
-		<device name="Samsung S7" ua="sm-g930" size="5.1" />
-		<device name="Samsung S7 Edge" ua="sm-g935" size="5.5" />
-		<device name="Samsung S8" ua="sm-g950" size="5.8" />
-		<device name="Samsung S8+" ua="sm-g955" size="6.2" />
-		<device name="Samsung S9" ua="sm-g960" size="5.8" />
-		<device name="Samsung S9+" ua="sm-g965" size="6.2" />
-		<device name="Samsung S10e" ua="sm-g970" size="5.8" />
-		<device name="Samsung S10" ua="sm-g973" size="6.1" />
-		<device name="Samsung S10+" ua="sm-g975" size="6.4" />
-		<device name="Samsung S10 5G" ua="sm-g977" size="6.7" />
-		<device name="Samsung Note 7" ua="sm-n930" size="5.7" />
-		<device name="Samsung Note 8" ua="sm-n950" size="6.3" />
-		<device name="Samsung Note 9" ua="sm-n960" size="6.4" />
-		<device name="Samsung Note 10" ua="sm-n970" size="6.3" />
-		<device name="Samsung Note 10 5G" ua="sm-n971" size="6.3" />
-		<device name="Samsung Note 10+" ua="sm-n975" size="6.8" />
-		<device name="Samsung Note 10+ 5G" ua="sm-n976" size="6.8" />
-		<device name="Huawei P10 Lite" ua="HUAWEIWAS-TL10" size="5.2" />
-		<device name="Huawei P20 Lite" ua="HUAWEIANE-LX1" size="5.84" />
-	</mobilevr_device_database>
-
-</krpano>

BIN
src/components/krpanoImg/plugins/webvr_handcursor.png


BIN
src/components/krpanoImg/plugins/webvr_laser.png


BIN
src/components/krpanoImg/plugins/webvr_light.png


BIN
src/components/krpanoImg/plugins/webvr_vrcursor.png


BIN
src/components/krpanoImg/skin/arrow.png


BIN
src/components/krpanoImg/skin/plugin.png


BIN
src/components/krpanoImg/skin/rotate_device.png


BIN
src/components/krpanoImg/skin/vtourskin.png


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 1348
src/components/krpanoImg/skin/vtourskin.xml


+ 0 - 28
src/components/krpanoImg/skin/vtourskin_design_117.xml

@@ -1,28 +0,0 @@
-<krpano>
-
-	<!-- Version 1.17 Design -->
-
-	<skin_settings layout_width="100%"
-	               layout_maxwidth=""
-	               controlbar_width="100%"
-	               controlbar_height.normal="40"
-	               controlbar_height.mobile="38"
-	               controlbar_offset.normal="20"
-	               controlbar_offset.mobile="0"
-	               controlbar_offset_closed="-2"
-	               controlbar_overlap="0"
-	               design_skin_images="vtourskin.png"
-	               design_bgcolor="0x000000"
-	               design_bgalpha="0.5"
-	               design_bgborder="1,0 0xFFFFFF 1"
-	               design_bgroundedge.no-ios="0"
-	               design_bgroundedge.ios="1"
-	               design_bgshadow="0 0 20 0x000000 1.0"
-	               design_thumbborder_bgborder="4 0xFFFFFF 1.0"
-	               design_thumbborder_padding="2"
-	               design_thumbborder_bgroundedge="3"
-	               design_text_css="color:#FFFFFF; font-family:Arial; font-weight:bold;"
-	               design_text_shadow="1"
-	               />
-
-</krpano>

+ 0 - 31
src/components/krpanoImg/skin/vtourskin_design_117round.xml

@@ -1,31 +0,0 @@
-<krpano>
-
-	<!-- Version 1.17 Round Design -->
-
-	<skin_settings layout_width="100%"
-	               layout_maxwidth.normal="900"
-	               layout_maxwidth.mobile=""
-	               controlbar_width.normal="-44"
-	               controlbar_width.mobile="100%"
-	               controlbar_height.normal="38"
-	               controlbar_height.mobile="34"
-	               controlbar_offset.normal="22"
-	               controlbar_offset.mobile="0"
-	               controlbar_offset_closed="-40"
-	               controlbar_overlap.normal="7"
-	               controlbar_overlap.mobile="2"
-	               design_skin_images="vtourskin.png"
-	               design_bgcolor="0x000000"
-	               design_bgalpha="0.5"
-	               design_bgborder="0 0xFFFFFF 1.0"
-	               design_bgroundedge.normal="9"
-	               design_bgroundedge.mobile="1"
-	               design_bgshadow="0 0 9 0xFFFFFF 0.5"
-	               design_thumbborder_bgborder="4 0xFFFFFF 1.0"
-	               design_thumbborder_padding="2"
-	               design_thumbborder_bgroundedge="5"
-	               design_text_css="color:#FFFFFF; font-family:Arial; font-weight:bold;"
-	               design_text_shadow="1"
-	               />
-
-</krpano>

+ 0 - 71
src/components/krpanoImg/skin/vtourskin_design_black.xml

@@ -1,71 +0,0 @@
-<krpano>
-
-	<!-- Flat Light Design -->
-
-	<!-- modify the <skin_settings> values -->
-	<skin_settings layout_width="100%"
-	               layout_maxwidth="100%"
-	               controlbar_width="100%"
-	               controlbar_height="40"
-	               controlbar_offset.normal="0"
-	               controlbar_offset.mobile="0"
-	               controlbar_offset_closed="-40"
-	               controlbar_overlap.no-fractionalscaling="0"
-	               controlbar_overlap.fractionalscaling="0"
-	               design_skin_images="vtourskin.png"
-	               design_bgcolor="0x000000"
-	               design_bgalpha="1.0"
-	               design_bgborder="0"
-	               design_bgroundedge="0"
-	               design_bgshadow="0 4 10 0xFFFFFF 0.3"
-	               design_thumbborder_bgborder="3 0xB2B2B2 1.0"
-	               design_thumbborder_padding="2"
-	               design_thumbborder_bgroundedge="0"
-	               design_text_css="color:#FFFFFF; font-family:Arial;"
-	               design_text_shadow="0"
-	               />
-
-	<!-- adjust the design of some skin elements  -->
-	<layer name="skin_layer">
-		<layer name="skin_loadingtext" width="100%" css="calc:skin_settings.design_text_css + ' text-align:center; font-size:20px;'" padding="4 6" textshadow="calc:2.0" textshadowrange="1.0" textshadowangle="90" textshadowcolor="0x2D3E50" textshadowalpha="1.0" />
-		<layer name="skin_control_bar" alpha="0.7" />
-	</layer>
-
-
-	<!-- use a fullscreen map -->
-	<action name="skin_showmap">
-		if(%1 == null, if(layer[skin_map].state == 'closed', set(show,true), set(show,false)); , set(show,%1); );
-		mul(mh, layer[skin_scroll_layer].pixelheight, -1);
-		if(show,
-			tween(layer[skin_thumbs_container].alpha, 0.0, 0.25, default, set(layer[skin_thumbs_container].visible,false));
-			set(layer[skin_map].visible, true);
-			tween(layer[skin_map].alpha, 1.0, 0.25);
-			set(layer[skin_map].state, 'opened');
-			sub(hh,area.pixelheight,skin_settings.controlbar_offset);
-			sub(hh,layer[skin_control_bar].height);
-			sub(hh,0);
-			add(mh,hh);
-			sub(hh,skin_settings.controlbar_overlap);
-			copy(layer[skin_map].height, hh);
-			tween(layer[skin_scroll_layer].y, get(mh), 0.5, easeOutQuint);
-		  ,
-		  	if(layer[skin_map].state != 'closed',
-				set(layer[skin_map].state, 'closed');
-				add(mh, layer[skin_scroll_layer].y_offset);
-				tween(layer[skin_map].alpha, 0.0, 0.5, easeOutQuint);
-				tween(layer[skin_scroll_layer].y, get(mh), 0.5, easeOutQuint, set(layer[skin_map].visible,false) );
-			  );
-		  );
-	</action>
-
-
-	<!-- webvr button style (adjust to match skin style) -->
-	<style name="webvr_button_style"
-	       border="false"
-	       roundedge="calc:1.0"
-	       backgroundcolor="get:skin_settings.design_bgcolor" backgroundalpha="get:skin_settings.design_bgalpha"
-	       shadow="0.01" shadowrange="10.0" shadowangle="90.0" shadowcolor="0x30261B" shadowalpha="0.50"
-	       css="calc:skin_settings.design_text_css + ' font-size:' + 20*webvr_setup_scale*webvr_button_scale + 'px;'"
-	       />
-
-</krpano>

+ 0 - 42
src/components/krpanoImg/skin/vtourskin_design_flat_light.xml

@@ -1,42 +0,0 @@
-<krpano>
-
-	<!-- Flat Light Design -->
-
-	<!-- modify the <skin_settings> values -->
-	<skin_settings layout_width="100%"
-	               layout_maxwidth="814"
-	               controlbar_width="-24"
-	               controlbar_height="40"
-	               controlbar_offset.normal="20"
-	               controlbar_offset.mobile="20"
-	               controlbar_offset_closed="-40"
-	               controlbar_overlap.no-fractionalscaling="10"
-	               controlbar_overlap.fractionalscaling="0"
-	               design_skin_images="vtourskin_light.png"
-	               design_bgcolor="0x2D3E50"
-	               design_bgalpha="0.8"
-	               design_bgborder="0"
-	               design_bgroundedge="1"
-	               design_bgshadow="0 4 10 0x000000 0.3"
-	               design_thumbborder_bgborder="2 0xFFFFFF 0.8"
-	               design_thumbborder_padding="2"
-	               design_thumbborder_bgroundedge="0"
-	               design_text_css="color:#FFFFFF; font-family:Arial; font-weight:lighter;"
-	               design_text_shadow="1"
-	               />
-
-	<!-- adjust the design of some skin elements  -->
-	<layer name="skin_layer">
-		<layer name="skin_loadingtext" width="100%" css="calc:skin_settings.design_text_css + ' text-align:center; font-size:20px;'" padding="4 6" textshadow="calc:2.0" textshadowrange="1.0" textshadowangle="90" textshadowcolor="0x2D3E50" textshadowalpha="1.0" />
-	</layer>
-
-	<!-- webvr button style (adjust to match skin style) -->
-	<style name="webvr_button_style"
-	       border="false"
-	       roundedge="calc:1.0"
-	       backgroundcolor="get:skin_settings.design_bgcolor" backgroundalpha="get:skin_settings.design_bgalpha"
-	       shadow="0.01" shadowrange="10.0" shadowangle="90.0" shadowcolor="0x30261B" shadowalpha="0.50"
-	       css="calc:skin_settings.design_text_css + ' font-size:' + 20*webvr_setup_scale*webvr_button_scale + 'px;'"
-	       />
-
-</krpano>

+ 0 - 40
src/components/krpanoImg/skin/vtourskin_design_glass.xml

@@ -1,40 +0,0 @@
-<krpano>
-
-	<!-- Glass Design -->
-
-	<!-- modify the <skin_settings> values -->
-	<skin_settings thumbs_scrollindicator="true"
-	               layout_width="100%"
-	               layout_maxwidth="680"
-	               xcontrolbar_width="-44"
-	               controlbar_width="-20"
-	               controlbar_height="36"
-	               controlbar_offset.normal="40"
-	               controlbar_offset.mobile="12"
-	               controlbar_offset_closed="-40"
-	               controlbar_overlap="10"
-	               design_skin_images="vtourskin.png"
-	               design_bgcolor="0xFFFFFF"
-	               design_bgalpha="0.25"
-	               design_bgborder="2 0xFFFFFF 0.1"
-	               design_bgroundedge="13"
-	               design_bgshadow="0"
-	               design_thumbborder_bgborder="3 0xFFFFFF 1.0"
-	               design_thumbborder_padding="2"
-	               design_thumbborder_bgroundedge="5"
-	               design_text_css="color:#FFFFFF; font-family:Arial; font-weight:bold;"
-	               design_text_shadow="0"
-	               />
-
-	<!-- webvr button style (adjust to match default skin style) -->
-	<style name="webvr_button_style"
-	       border="true" borderwidth="2" bordercolor="0xFFFFFF" borderalpha="0.25"
-	       backgroundcolor="get:skin_settings.design_bgcolor" backgroundalpha="get:skin_settings.design_bgalpha"
-	       shadow="0"
-	       css="calc:skin_settings.design_text_css + ' color:#FFFFFF; font-weight:normal; font-size:' + 20*webvr_setup_scale*webvr_button_scale + 'px;'"
-	       />
-
-	<!-- contextmenu style (adjust to match skin style) -->
-	<contextmenu customstyle="default|default|default|0x77AAAAAA|0xFFFFFF|0xBBBBBB|2|0x7FFFFFFF|13|0|0|0|0xFFFFFF|0|0|4|6|7|0xAAFFFFFF|none|3|0|0|0|3|0xAAFFFFFF|0xAAFFFFFF|0xFFFFFF|12|8" />
-
-</krpano>

+ 0 - 58
src/components/krpanoImg/skin/vtourskin_design_ultra_light.xml

@@ -1,58 +0,0 @@
-<krpano>
-
-	<!-- Ultra Light Design -->
-
-	<!-- modify the <skin_settings> values -->
-	<skin_settings title="false"
-	               layout_width="100%"
-	               layout_maxwidth="814"
-	               controlbar_width="-24"
-	               controlbar_height="40"
-	               controlbar_offset.normal="30"
-	               controlbar_offset.mobile="20"
-	               controlbar_offset_closed="-40"
-	               controlbar_overlap="0"
-	               design_skin_images="vtourskin_light.png"
-	               design_bgcolor="0x2D3E50"
-	               design_bgalpha="0.0"
-	               design_bgborder="0,0,1,0 0xFFFFFF 1"
-	               design_bgroundedge="0"
-	               design_bgshadow="0"
-	               design_thumbborder_bgborder="1 0xFFFFFF 0.8"
-	               design_thumbborder_padding="0"
-	               design_thumbborder_bgroundedge="0"
-	               design_text_css="color:#FFFFFF; font-family:Arial; font-weight:lighter;"
-	               design_text_shadow="0"
-	               />
-
-	<!-- webvr button style (adjust to match skin style) -->
-	<style name="webvr_button_style"
-	       border="false"
-	       roundedge="calc:1.0"
-	       backgroundcolor="get:skin_settings.design_bgcolor" backgroundalpha="get:skin_settings.design_bgalpha"
-	       shadow="0.01" shadowrange="10.0" shadowangle="90.0" shadowcolor="0x30261B" shadowalpha="0.50"
-	       css="calc:skin_settings.design_text_css + ' font-size:' + 20*webvr_setup_scale*webvr_button_scale + 'px;'"
-	       />
-
-	<!-- adjust video controls to match skin style -->
-	<layer name="skin_layer">
-		<layer name="skin_scroll_window">
-			<layer name="skin_scroll_layer">
-				<layer name="skin_video_controls">
-					<layer name="skin_video_seekbar_container">
-						<layer name="skin_video_seekbar" height="1" y="4">
-							<layer name="skin_video_loadbar" height="1" />
-							<layer name="skin_video_seekpos" bgroundedge="2" width="6" height="6" />
-						</layer>
-					</layer>
-					<layer name="skin_video_time" y="-4" />
-				</layer>
-			</layer>
-		</layer>
-	</layer>
-					
-
-	<!-- contextmenu style (adjust to match skin style) -->
-	<contextmenu customstyle="default|default|default|0x7F000000|0xFFFFFF|0xBBBBBB|0|0x20FFFFFF|1|0|0|0|0xFFFFFF|0|0xFFFFFF|4|6|7|0xAAFFFFFF|none|3|0|0|0|3|0xFFFFFF|0xFFFFFF|0x000000|12|8" />
-
-</krpano>

BIN
src/components/krpanoImg/skin/vtourskin_hotspot.png


BIN
src/components/krpanoImg/skin/vtourskin_light.png


BIN
src/components/krpanoImg/skin/vtourskin_mapspot.png


BIN
src/components/krpanoImg/skin/vtourskin_mapspotactive.png