various design adjustments to the timeslider
@@ -31,6 +31,7 @@ h1 {
|
||||
/** Most GWT widgets already have a style name defined */
|
||||
.gwt-DialogBox {
|
||||
width: 400px;
|
||||
z-index: 20;
|
||||
}
|
||||
|
||||
.dialogVPanel {
|
||||
|
||||
@@ -34,10 +34,10 @@ import com.sap.sailing.gwt.ui.client.TimePanel;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.PositionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.components.SettingsDialog;
|
||||
|
||||
public class RaceMapPanel extends FormPanel implements EventDisplayer, TimeListener, ProvidesResize, RequiresResize,
|
||||
@@ -157,16 +157,16 @@ public class RaceMapPanel extends FormPanel implements EventDisplayer, TimeListe
|
||||
break;
|
||||
}
|
||||
|
||||
sailingService.getLegTimePositions(selectedRace.getRaceIdentifier(),
|
||||
new AsyncCallback<List<LegTimepointDTO>>() {
|
||||
sailingService.getRaceTimesInfo(selectedRace.getRaceIdentifier(),
|
||||
new AsyncCallback<RaceTimesInfoDTO>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error obtaining leg timepoints: " + caught.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<LegTimepointDTO> legTimepoints) {
|
||||
timePanel.setLegMarkers(legTimepoints);
|
||||
public void onSuccess(RaceTimesInfoDTO legTimepoints) {
|
||||
timePanel.setLegMarkers(legTimepoints.getLegTimes());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -11,6 +11,12 @@ public interface ClientResources extends ClientBundle {
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/play.png")
|
||||
ImageResource playIcon();
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/pause.png")
|
||||
ImageResource pauseIcon();
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/timeslider-pause-icon.png")
|
||||
ImageResource timesliderPauseIcon();
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/timeslider-play-active-icon.png")
|
||||
ImageResource timesliderPlayActiveIcon();
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/timeslider-play-inactive-icon.png")
|
||||
ImageResource timesliderPlayInactiveIcon();
|
||||
}
|
||||
@@ -21,11 +21,11 @@ import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.GPSFixDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDTO;
|
||||
@@ -62,7 +62,7 @@ public interface SailingService extends RemoteService {
|
||||
Map<CompetitorDTO, List<GPSFixDTO>> getBoatPositions(RaceIdentifier raceIdentifier, Map<CompetitorDTO, Date> from,
|
||||
Map<CompetitorDTO, Date> to, boolean extrapolate) throws NoWindException;
|
||||
|
||||
List<LegTimepointDTO> getLegTimePositions(RaceIdentifier raceIdentifier);
|
||||
RaceTimesInfoDTO getRaceTimesInfo(RaceIdentifier raceIdentifier);
|
||||
|
||||
List<MarkDTO> getMarkPositions(RaceIdentifier raceIdentifier, Date date);
|
||||
|
||||
|
||||
@@ -20,12 +20,12 @@ import com.sap.sailing.gwt.ui.shared.GPSFixDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceInLeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDTO;
|
||||
@@ -108,7 +108,7 @@ public interface SailingServiceAsync {
|
||||
Map<CompetitorDTO, Date> from, Map<CompetitorDTO, Date> to,
|
||||
boolean extrapolate, AsyncCallback<Map<CompetitorDTO, List<GPSFixDTO>>> callback);
|
||||
|
||||
void getLegTimePositions(RaceIdentifier raceIdentifier, AsyncCallback<List<LegTimepointDTO>> callback);
|
||||
void getRaceTimesInfo(RaceIdentifier raceIdentifier, AsyncCallback<RaceTimesInfoDTO> callback);
|
||||
|
||||
void getMarkPositions(RaceIdentifier raceIdentifier, Date date, AsyncCallback<List<MarkDTO>> asyncCallback);
|
||||
|
||||
|
||||
@@ -18,13 +18,14 @@ import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.FormPanel;
|
||||
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Image;
|
||||
import com.google.gwt.user.client.ui.IntegerBox;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.RequiresResize;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.shared.components.SettingsDialog;
|
||||
import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent;
|
||||
@@ -32,7 +33,6 @@ import com.sap.sailing.gwt.ui.shared.controls.slider.SliderBar;
|
||||
|
||||
public class TimePanel extends FormPanel implements Component<TimePanelSettings>, TimeListener, PlayStateListener, RequiresResize {
|
||||
private final Timer timer;
|
||||
private final Button playPauseButton;
|
||||
private final IntegerBox playSpeedBox;
|
||||
private final Label timeDelayLabel;
|
||||
private final Label timeLabel;
|
||||
@@ -43,6 +43,9 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
|
||||
private final StringMessages stringMessages;
|
||||
private final DateTimeFormat dateFormatter = DateTimeFormat.getFormat(DateTimeFormat.PredefinedFormat.DATE_FULL);
|
||||
private final DateTimeFormat timeFormatter = DateTimeFormat.getFormat("HH:mm:ss");
|
||||
private final ImageResource playButtonImg;
|
||||
private final ImageResource pauseButtonImg;
|
||||
private final Image playPauseImage;
|
||||
|
||||
private static ClientResources resources = GWT.create(ClientResources.class);
|
||||
|
||||
@@ -68,6 +71,10 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
|
||||
VerticalPanel vp = new VerticalPanel();
|
||||
vp.setSize("100%", "100%");
|
||||
|
||||
playButtonImg = resources.timesliderPlayActiveIcon();
|
||||
pauseButtonImg = resources.timesliderPauseIcon();
|
||||
playPauseImage = new Image(playButtonImg);
|
||||
|
||||
sliderBar = new SliderBar();
|
||||
sliderBar.setEnabled(true);
|
||||
sliderBar.setLabelFormatter(new SliderBar.LabelFormatter() {
|
||||
@@ -102,8 +109,9 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
|
||||
FlowPanel playControlPanel = new FlowPanel();
|
||||
playControlPanel.setStyleName("timePanel-controls-play");
|
||||
controlsPanel.add(playControlPanel);
|
||||
playPauseButton = new Button(">");
|
||||
playPauseButton.addClickHandler(new ClickHandler() {
|
||||
|
||||
|
||||
playPauseImage.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
if (TimePanel.this.timer.isPlaying()) {
|
||||
@@ -113,7 +121,7 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
|
||||
}
|
||||
}
|
||||
});
|
||||
playControlPanel.add(playPauseButton);
|
||||
playControlPanel.add(playPauseImage);
|
||||
|
||||
// current date and time control
|
||||
FlowPanel timeControlPanel = new FlowPanel();
|
||||
@@ -258,21 +266,13 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
|
||||
}
|
||||
}
|
||||
|
||||
public void setLegMarkers(List<LegTimepointDTO> legTimepoints) {
|
||||
public void setLegMarkers(List<LegTimesInfoDTO> legTimepoints) {
|
||||
if(sliderBar.isMinMaxInitialized()) {
|
||||
sliderBar.clearMarkers();
|
||||
|
||||
for (LegTimepointDTO legTimepointDTO : legTimepoints) {
|
||||
for (LegTimesInfoDTO legTimepointDTO : legTimepoints) {
|
||||
sliderBar.addMarker(legTimepointDTO.name, new Double(legTimepointDTO.firstPassingDate.getTime()));
|
||||
|
||||
}
|
||||
// Double minValue = sliderBar.getMinValue();
|
||||
// Double maxValue = sliderBar.getMaxValue();
|
||||
// int legCount = 5;
|
||||
// double diff = (maxValue - minValue) / (double) legCount;
|
||||
// for(int i = 0; i < legCount; i++) {
|
||||
// sliderBar.addMarker("L" + (i + 1), minValue + i * diff);
|
||||
// }
|
||||
sliderBar.redraw();
|
||||
}
|
||||
}
|
||||
@@ -286,7 +286,10 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
|
||||
|
||||
@Override
|
||||
public void playStateChanged(boolean isPlaying) {
|
||||
playPauseButton.setText(isPlaying ? "||" : ">");
|
||||
if(isPlaying)
|
||||
playPauseImage.setResource(pauseButtonImg);
|
||||
else
|
||||
playPauseImage.setResource(playButtonImg);
|
||||
}
|
||||
|
||||
public TimePanelSettings getSettings() {
|
||||
|
||||
@@ -37,8 +37,8 @@ import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.UserDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.components.ComponentViewer;
|
||||
@@ -229,16 +229,18 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
|
||||
}
|
||||
break;
|
||||
}
|
||||
sailingService.getLegTimePositions(selectedRace.getRaceIdentifier(),
|
||||
new AsyncCallback<List<LegTimepointDTO>>() {
|
||||
sailingService.getRaceTimesInfo(selectedRace.getRaceIdentifier(),
|
||||
new AsyncCallback<RaceTimesInfoDTO>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error obtaining leg timepoints: " + caught.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<LegTimepointDTO> legTimepoints) {
|
||||
timePanel.setLegMarkers(legTimepoints);
|
||||
public void onSuccess(RaceTimesInfoDTO racesTimesInfo) {
|
||||
timePanel.setLegMarkers(racesTimesInfo.getLegTimes());
|
||||
if (racesTimesInfo.getStartOfRace() != null)
|
||||
timer.setTime(racesTimesInfo.getStartOfRace().getTime());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -111,13 +111,14 @@ import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardRowDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegEntryDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LegTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.PositionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceInLeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SpeedWithBearingDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
|
||||
@@ -748,11 +749,17 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LegTimepointDTO> getLegTimePositions(RaceIdentifier raceIdentifier) {
|
||||
List<LegTimepointDTO> result = new ArrayList<LegTimepointDTO>();
|
||||
public RaceTimesInfoDTO getRaceTimesInfo(RaceIdentifier raceIdentifier) {
|
||||
RaceTimesInfoDTO result = null;
|
||||
|
||||
TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
result = new RaceTimesInfoDTO();
|
||||
List<LegTimesInfoDTO> legTimes = new ArrayList<LegTimesInfoDTO>();
|
||||
result.setLegTimes(legTimes);
|
||||
|
||||
Iterable<TrackedLeg> trackedLegs = trackedRace.getTrackedLegs();
|
||||
Date lastLegPassingTime = null;
|
||||
int i = 1;
|
||||
for (TrackedLeg trackedLeg : trackedLegs) {
|
||||
if(i == 1) {
|
||||
@@ -778,9 +785,12 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
} else {
|
||||
currentCompetitorsInTime++;
|
||||
if(currentCompetitorsInTime == enoughCompetitors) {
|
||||
LegTimepointDTO legTimepointDTO = new LegTimepointDTO("L0");
|
||||
legTimepointDTO.firstPassingDate = currentMarkPassing.getTimePoint().asDate();
|
||||
result.add(legTimepointDTO);
|
||||
Date passingDate = currentMarkPassing.getTimePoint().asDate();
|
||||
LegTimesInfoDTO legTimepointDTO = new LegTimesInfoDTO("S");
|
||||
legTimepointDTO.firstPassingDate = passingDate;
|
||||
legTimes.add(legTimepointDTO);
|
||||
result.setStartOfRace(passingDate);
|
||||
lastLegPassingTime = passingDate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -791,10 +801,22 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
|
||||
Waypoint to = trackedLeg.getLeg().getTo();
|
||||
Iterable<MarkPassing> markPassings = trackedRace.getMarkPassingsInOrder(to);
|
||||
if(markPassings != null) {
|
||||
MarkPassing firstPassing = markPassings.iterator().next();
|
||||
LegTimepointDTO legTimepointDTO = new LegTimepointDTO("L" + i++);
|
||||
legTimepointDTO.firstPassingDate = firstPassing.getTimePoint().asDate();
|
||||
result.add(legTimepointDTO);
|
||||
// ensure the passing date is in the right time order
|
||||
Iterator<MarkPassing> iterator = markPassings.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
MarkPassing currentMarkPassing = iterator.next();
|
||||
Date currentPassingDate = currentMarkPassing.getTimePoint().asDate();
|
||||
if (lastLegPassingTime == null)
|
||||
lastLegPassingTime = currentPassingDate;
|
||||
|
||||
if (currentPassingDate.after(lastLegPassingTime)) {
|
||||
LegTimesInfoDTO legTimepointDTO = new LegTimesInfoDTO("L" + i++);
|
||||
legTimepointDTO.firstPassingDate = currentPassingDate;
|
||||
legTimes.add(legTimepointDTO);
|
||||
lastLegPassingTime = currentPassingDate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,14 +4,14 @@ import java.util.Date;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
|
||||
public class LegTimepointDTO extends NamedDTO implements IsSerializable {
|
||||
public class LegTimesInfoDTO extends NamedDTO implements IsSerializable {
|
||||
public Date firstPassingDate;
|
||||
|
||||
public Date lastPassingDate;
|
||||
|
||||
public LegTimepointDTO() {}
|
||||
public LegTimesInfoDTO() {}
|
||||
|
||||
public LegTimepointDTO(String name) {
|
||||
public LegTimesInfoDTO(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
import com.sap.sailing.domain.common.RaceIdentifier;
|
||||
|
||||
public class RaceTimesInfoDTO implements IsSerializable {
|
||||
private RaceIdentifier raceIdentifier;
|
||||
|
||||
private List<LegTimesInfoDTO> legTimes;
|
||||
|
||||
private Date startOfRace;
|
||||
private Date startOfTracking;
|
||||
private Date endOfTracking;
|
||||
private Date endOfRace;
|
||||
|
||||
public RaceTimesInfoDTO() {}
|
||||
|
||||
public RaceIdentifier getRaceIdentifier() {
|
||||
return raceIdentifier;
|
||||
}
|
||||
|
||||
public void setRaceIdentifier(RaceIdentifier raceIdentifier) {
|
||||
this.raceIdentifier = raceIdentifier;
|
||||
}
|
||||
|
||||
public List<LegTimesInfoDTO> getLegTimes() {
|
||||
return legTimes;
|
||||
}
|
||||
|
||||
public void setLegTimes(List<LegTimesInfoDTO> legTimes) {
|
||||
this.legTimes = legTimes;
|
||||
}
|
||||
|
||||
public Date getStartOfRace() {
|
||||
return startOfRace;
|
||||
}
|
||||
|
||||
public void setStartOfRace(Date startOfRace) {
|
||||
this.startOfRace = startOfRace;
|
||||
}
|
||||
|
||||
public Date getStartOfTracking() {
|
||||
return startOfTracking;
|
||||
}
|
||||
|
||||
public void setStartOfTracking(Date startOfTracking) {
|
||||
this.startOfTracking = startOfTracking;
|
||||
}
|
||||
|
||||
public Date getEndOfTracking() {
|
||||
return endOfTracking;
|
||||
}
|
||||
|
||||
public void setEndOfTracking(Date endOfTracking) {
|
||||
this.endOfTracking = endOfTracking;
|
||||
}
|
||||
|
||||
public Date getEndOfRace() {
|
||||
return endOfRace;
|
||||
}
|
||||
|
||||
public void setEndOfRace(Date endOfRace) {
|
||||
this.endOfRace = endOfRace;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -285,8 +285,6 @@ public final class CollapsablePanel extends Composite implements HasWidgets.ForI
|
||||
|
||||
public Iterator<Widget> iterator() {
|
||||
return null;
|
||||
// return WidgetIterators.createWidgetIterator(this,
|
||||
// new Widget[] {getContent()});
|
||||
}
|
||||
|
||||
public boolean remove(Widget w) {
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
}
|
||||
|
||||
.gwt-SliderBar-shell .gwt-SliderBar-line {
|
||||
border: 1px solid #21a0e4;
|
||||
background-color: #f2f8fc;
|
||||
border: 1px solid #919191;
|
||||
background-color: #818181;
|
||||
height: 4px;
|
||||
width: 98%;
|
||||
top: 22pt;
|
||||
@@ -28,7 +28,7 @@
|
||||
top: 16pt;
|
||||
width: 1px;
|
||||
height: 6pt;
|
||||
background: black;
|
||||
background: #919191;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 492 B |
|
Before Width: | Height: | Size: 603 B After Width: | Height: | Size: 603 B |
|
Before Width: | Height: | Size: 691 B After Width: | Height: | Size: 691 B |
|
Before Width: | Height: | Size: 536 B After Width: | Height: | Size: 536 B |