mirror of
https://github.com/cds-astro/aladin-lite.git
synced 2025-12-12 07:40:26 -08:00
fix opacity restore in UI, and screen size shrinking
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
<script type="module">
|
||||
import A from '../src/js/A.js';
|
||||
A.init.then(() => {
|
||||
let aladin = A.aladin('#aladin-lite-div', {fov: 70,projection: "AIT"});
|
||||
let aladin = A.aladin('#aladin-lite-div', {target: "23 28 32.46 -00 10 38.9", fov: 4, projection: "AIT"});
|
||||
|
||||
let hsc = aladin.newImageSurvey("P/HSC/DR2/deep/g", {colormap:"Purples", imgFormat: "fits"});
|
||||
aladin.setBaseImageLayer(hsc);
|
||||
|
||||
@@ -1115,10 +1115,6 @@ impl App {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(crate) fn rename_layer(&mut self, layer: &str, new_layer: &str) -> Result<(), JsValue> {
|
||||
self.layers.rename_layer(layer, new_layer)
|
||||
}
|
||||
|
||||
pub(crate) fn swap_layers(
|
||||
&mut self,
|
||||
first_layer: &str,
|
||||
|
||||
@@ -315,11 +315,7 @@ impl CameraViewPort {
|
||||
}
|
||||
|
||||
pub fn compute_ndc_to_clip_factor(&mut self, proj: &ProjectionType) {
|
||||
self.ndc_to_clip = if self.height < self.width {
|
||||
Vector2::new(1.0, (self.height as f64) / (self.width as f64))
|
||||
} else {
|
||||
Vector2::new((self.width as f64) / (self.height as f64), 1.0)
|
||||
};
|
||||
self.ndc_to_clip = Vector2::new(1.0, (self.height as f64) / (self.width as f64));
|
||||
|
||||
let bounds_size_ratio = proj.bounds_size_ratio();
|
||||
self.ndc_to_clip.y *= bounds_size_ratio;
|
||||
|
||||
@@ -372,12 +372,6 @@ impl WebClient {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[wasm_bindgen(js_name = renameLayer)]
|
||||
pub fn rename_layer(&mut self, layer: String, new_layer: String) -> Result<(), JsValue> {
|
||||
// Deserialize the hips objects that compose the hips
|
||||
self.app.rename_layer(&layer, &new_layer)
|
||||
}
|
||||
|
||||
#[wasm_bindgen(js_name = swapLayers)]
|
||||
pub fn swap_layers(
|
||||
&mut self,
|
||||
|
||||
@@ -351,29 +351,6 @@ impl Layers {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn rename_layer(&mut self, layer: &str, new_layer: &str) -> Result<(), JsValue> {
|
||||
let err_layer_not_found =
|
||||
JsValue::from_str(&format!("Layer {layer:?} not found, so cannot be removed."));
|
||||
|
||||
// layer from layers does also need to be removed
|
||||
let id_layer = self
|
||||
.layers
|
||||
.iter()
|
||||
.position(|l| layer == l)
|
||||
.ok_or(err_layer_not_found.clone())?;
|
||||
|
||||
self.layers[id_layer] = new_layer.to_string();
|
||||
|
||||
let meta = self.meta.remove(layer).ok_or(err_layer_not_found.clone())?;
|
||||
let id = self.ids.remove(layer).ok_or(err_layer_not_found)?;
|
||||
|
||||
// Add the new
|
||||
self.meta.insert(new_layer.to_string(), meta);
|
||||
self.ids.insert(new_layer.to_string(), id);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn swap_layers(&mut self, first_layer: &str, second_layer: &str) -> Result<(), JsValue> {
|
||||
let id_first_layer =
|
||||
self.layers
|
||||
@@ -392,16 +369,6 @@ impl Layers {
|
||||
|
||||
self.layers.swap(id_first_layer, id_second_layer);
|
||||
|
||||
/*if let (Some(k1), Some(k2)) = (self.ids.get(first_layer), self.ids.get(second_layer)) {
|
||||
if let (Some(v1), Some(v2)) = (self.hipses.remove(k1), self.hipses.remove(k2)) {
|
||||
self.hipses.insert(k2.to_string(), v1);
|
||||
self.hipses.insert(k1.to_string(), v2);
|
||||
} else if let (Some(v1), Some(v2)) = (self.images.remove(k1), self.images.remove(k2)) {
|
||||
self.images.insert(k2.to_string(), v1);
|
||||
self.images.insert(k1.to_string(), v2);
|
||||
}
|
||||
}*/
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
10562
src/core/src/shaders.rs
10562
src/core/src/shaders.rs
File diff suppressed because it is too large
Load Diff
@@ -1784,6 +1784,27 @@ export let View = (function () {
|
||||
// register its promise
|
||||
this.imageLayersBeingQueried.set(layer, imageLayer);
|
||||
|
||||
// Check whether this layer already exist
|
||||
const idxOverlayLayer = this.overlayLayers.findIndex(overlayLayer => overlayLayer == layer);
|
||||
let alreadyPresentImageLayer;
|
||||
if (idxOverlayLayer == -1) {
|
||||
// it does not exist so we add it to the stack
|
||||
this.overlayLayers.push(layer);
|
||||
} else {
|
||||
// it exists
|
||||
alreadyPresentImageLayer = this.imageLayers.get(layer);
|
||||
|
||||
if (alreadyPresentImageLayer) {
|
||||
if (alreadyPresentImageLayer.added === true) {
|
||||
ALEvent.HIPS_LAYER_REMOVED.dispatchedTo(this.aladinDiv, { layer: alreadyPresentImageLayer });
|
||||
}
|
||||
|
||||
alreadyPresentImageLayer.added = false;
|
||||
}
|
||||
// Notify that this image layer has been replaced by the wasm part
|
||||
this.imageLayers.delete(layer);
|
||||
}
|
||||
|
||||
this.addImageLayer(imageLayer, layer);
|
||||
|
||||
return imageLayer;
|
||||
@@ -1793,33 +1814,13 @@ export let View = (function () {
|
||||
View.prototype._addLayer = function(imageLayer) {
|
||||
// Keep the JS frontend in-line with the wasm state
|
||||
const layerName = imageLayer.layer;
|
||||
// Check whether this layer already exist
|
||||
const idxOverlayLayer = this.overlayLayers.findIndex(overlayLayer => overlayLayer == layerName);
|
||||
let alreadyPresentImageLayer;
|
||||
if (idxOverlayLayer == -1) {
|
||||
// it does not exist so we add it to the stack
|
||||
this.overlayLayers.push(layerName);
|
||||
} else {
|
||||
// it exists
|
||||
alreadyPresentImageLayer = this.imageLayers.get(layerName);
|
||||
|
||||
// Notify that this image layer has been replaced by the wasm part
|
||||
if (alreadyPresentImageLayer && alreadyPresentImageLayer.added === true) {
|
||||
ALEvent.HIPS_LAYER_REMOVED.dispatchedTo(this.aladinDiv, { layer: alreadyPresentImageLayer });
|
||||
}
|
||||
|
||||
alreadyPresentImageLayer.added = false;
|
||||
this.imageLayers.delete(layerName);
|
||||
}
|
||||
|
||||
imageLayer.added = true;
|
||||
|
||||
this.imageLayers.set(layerName, imageLayer);
|
||||
|
||||
// select the layer if he is on top
|
||||
//if (idxOverlayLayer == -1) {
|
||||
this.selectLayer(layerName);
|
||||
//}
|
||||
this.selectLayer(layerName);
|
||||
|
||||
ALEvent.HIPS_LAYER_ADDED.dispatchedTo(this.aladinDiv, { layer: imageLayer });
|
||||
}
|
||||
@@ -1893,33 +1894,6 @@ export let View = (function () {
|
||||
})
|
||||
}
|
||||
|
||||
// The survey at layer must have been added to the view!
|
||||
View.prototype.renameLayer = function(layer, newLayer) {
|
||||
if (layer === newLayer) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Throw an exception if either the first or the second layers are not in the stack
|
||||
this.wasm.renameLayer(layer, newLayer);
|
||||
|
||||
let imageLayer = this.imageLayers.get(layer);
|
||||
imageLayer.layer = newLayer;
|
||||
|
||||
// Change in overlaylayers
|
||||
const idx = this.overlayLayers.findIndex(overlayLayer => overlayLayer == layer);
|
||||
this.overlayLayers[idx] = newLayer;
|
||||
// Change in imageLayers
|
||||
this.imageLayers.delete(layer);
|
||||
this.imageLayers.set(newLayer, imageLayer);
|
||||
|
||||
if (this.selectedLayer === layer) {
|
||||
this.selectedLayer = newLayer;
|
||||
}
|
||||
|
||||
// Tell the layer hierarchy has changed
|
||||
ALEvent.HIPS_LAYER_RENAMED.dispatchedTo(this.aladinDiv, { layer, newLayer });
|
||||
}
|
||||
|
||||
View.prototype.swapLayers = function(firstLayer, secondLayer) {
|
||||
// Throw an exception if either the first or the second layers are not in the stack
|
||||
this.wasm.swapLayers(firstLayer, secondLayer);
|
||||
|
||||
@@ -517,6 +517,8 @@ export class HiPSBrowserBox extends Box {
|
||||
}
|
||||
|
||||
_show(options) {
|
||||
this._requestMOCServer();
|
||||
|
||||
// Regenerate a new layer name
|
||||
this.layer = (options && options.layer) || Utils.uuidv4();
|
||||
super._show(options)
|
||||
|
||||
@@ -295,13 +295,16 @@ import { TogglerActionButton } from "../Button/Toggler.js";
|
||||
this.pixelSettingsContent.set('maxcut', +maxCut.toFixed(4))
|
||||
this.pixelSettingsContent.set('stretch', stretch)
|
||||
let fmtInput = this.pixelSettingsContent.getInput('fmt')
|
||||
|
||||
fmtInput.innerHTML = '';
|
||||
|
||||
for (const option of layer.getAvailableFormats()) {
|
||||
fmtInput.innerHTML += "<option>" + option + "</option>";
|
||||
if (layer.getAvailableFormats()) {
|
||||
|
||||
for (const option of layer.getAvailableFormats()) {
|
||||
fmtInput.innerHTML += "<option>" + option + "</option>";
|
||||
}
|
||||
fmtInput.value = layer.imgFormat;
|
||||
}
|
||||
fmtInput.value = layer.imgFormat;
|
||||
|
||||
|
||||
this.colorSettingsContent.set('cmap', colormap);
|
||||
this.colorSettingsContent.set('reverse', reversed);
|
||||
|
||||
@@ -964,6 +964,7 @@ export class OverlayStackBox extends Box {
|
||||
},
|
||||
});
|
||||
|
||||
let prevOpacity = null;
|
||||
let showBtn = ActionButton.createSmallSizedIconBtn({
|
||||
icon: {
|
||||
url: layer.getOpacity() === 0.0 ? hideIconUrl : showIconUrl,
|
||||
@@ -979,12 +980,15 @@ export class OverlayStackBox extends Box {
|
||||
|
||||
let opacity = layer.getOpacity();
|
||||
if (opacity === 0.0) {
|
||||
layer.setOpacity(1.0);
|
||||
let newOpacity = prevOpacity || 1.0;
|
||||
prevOpacity = null;
|
||||
layer.setOpacity(newOpacity);
|
||||
btn.update({
|
||||
icon: { monochrome: true, url: showIconUrl },
|
||||
tooltip: { content: "Hide" },
|
||||
});
|
||||
} else {
|
||||
prevOpacity = opacity;
|
||||
layer.setOpacity(0.0);
|
||||
btn.update({
|
||||
icon: { monochrome: true, url: hideIconUrl },
|
||||
|
||||
@@ -137,10 +137,17 @@ export class Tree extends DOMElement {
|
||||
let numFilteringMatching = this.numChildMatchingFilter(child, true);
|
||||
let numTotal = this.numChildMatchingFilter(child, false);
|
||||
|
||||
elt.innerHTML = label + ` (${numFilteringMatching}/${numTotal})`
|
||||
let name = label;
|
||||
elt.innerHTML = name + ` (${numFilteringMatching}/${numTotal})`
|
||||
|
||||
if (numFilteringMatching == 0) {
|
||||
elt.style.display = "none";
|
||||
} else {
|
||||
elt.style.display = "block";
|
||||
}
|
||||
}
|
||||
|
||||
elt.style.color = this.hasChildLocatedInFov(child) ? 'green' : 'orange';
|
||||
elt.style.color = this.hasChildLocatedInFov(child) ? 'yellowgreen' : 'orange';
|
||||
|
||||
child.label = label;
|
||||
child.parent = node;
|
||||
@@ -194,13 +201,13 @@ export class Tree extends DOMElement {
|
||||
if (isLeaf) {
|
||||
// Check if its ID is found in the view
|
||||
if (this.highlight) {
|
||||
elt.style.color = this.highlight.includes(child.ID) ? 'green' : 'orange';
|
||||
elt.style.color = this.highlight.includes(child.ID) ? 'yellowgreen' : 'orange';
|
||||
}
|
||||
} else {
|
||||
// we see a parent, we must determine:
|
||||
// * its color: he has at least 1 child inside the FoV => green
|
||||
// * the number of children matching the filter params
|
||||
elt.style.color = this.hasChildLocatedInFov(child) ? 'green' : 'orange';
|
||||
elt.style.color = this.hasChildLocatedInFov(child) ? 'yellowgreen' : 'orange';
|
||||
|
||||
// we see a parent, we must determine:
|
||||
// * its color: he has at least 1 child inside the FoV => green
|
||||
@@ -210,6 +217,12 @@ export class Tree extends DOMElement {
|
||||
|
||||
let name = elt.innerText.split('(');
|
||||
elt.innerHTML = name[0] + ` (${numFilteringMatching}/${numTotal})`
|
||||
|
||||
if (numFilteringMatching == 0) {
|
||||
elt.style.display = "none";
|
||||
} else {
|
||||
elt.style.display = "block";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -248,6 +261,11 @@ export class Tree extends DOMElement {
|
||||
|
||||
let name = elt.innerText.split('(');
|
||||
elt.innerHTML = name[0] + ` (${numFilteringMatching}/${numTotal})`
|
||||
if (numFilteringMatching == 0) {
|
||||
elt.style.display = "none";
|
||||
} else {
|
||||
elt.style.display = "block";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user