Fix issue which prevents window from downscaling

Replace Fixed-Container by Layout-Container to
disconnects the window size from the content size.
Otherwise the window size can be increased but not
decreased.
This commit is contained in:
Olaf Schulz 2019-11-12 12:45:16 +01:00
parent 6d347d1729
commit 24ae37e874
3 changed files with 26 additions and 16 deletions

View File

@ -37,7 +37,6 @@ namespace NeoLayoutViewer {
this._width = this.winMain.get_allocated_width(); this._width = this.winMain.get_allocated_width();
this._height = this.winMain.get_allocated_height(); this._height = this.winMain.get_allocated_height();
this.set_size_request(_width, _height); this.set_size_request(_width, _height);
this.set_size(_width, _height);
this.color_event_boxes = (winMain.config.get("color_event_boxes") == "1"); this.color_event_boxes = (winMain.config.get("color_event_boxes") == "1");
@ -48,8 +47,11 @@ namespace NeoLayoutViewer {
private void main_resized(){ private void main_resized(){
int width = this.winMain.get_allocated_width(); int width;
int height = this.winMain.get_allocated_height(); int height;
//width = this.winMain.get_allocated_width();
//height = this.winMain.get_allocated_height();
this.winMain.get_size(out width, out height);
if( this._width == width && this._height == height ){ if( this._width == width && this._height == height ){
return; // to avoid infinite resize live lock... return; // to avoid infinite resize live lock...
@ -63,11 +65,10 @@ namespace NeoLayoutViewer {
this._width = width; this._width = width;
this._height = height; this._height = height;
// Propagate new window width/height to this grid.
// Propagate new window width/height to this grid. (Redundant?!)
this.set_size_request(width, height); this.set_size_request(width, height);
debug("Move cells"); debug("Rescale cells");
move_and_scale_cells(); move_and_scale_cells();
@ -80,11 +81,14 @@ namespace NeoLayoutViewer {
*/ */
public void generateCells() { public void generateCells() {
// Dimensions of unscaled background image
double width_unscaled = (double) winMain.get_unscaled_width(); double width_unscaled = (double) winMain.get_unscaled_width();
double height_unscaled = (double) winMain.get_unscaled_height(); double height_unscaled = (double) winMain.get_unscaled_height();
int width, height; int width, height;
winMain.get_size(out width, out height); // Desirered target size
width = this._width;
height = this._height;
double scaleX = width/width_unscaled; double scaleX = width/width_unscaled;
double scaleY = height/height_unscaled; double scaleY = height/height_unscaled;

View File

@ -258,20 +258,22 @@ namespace NeoLayoutViewer {
int win_width = get_image_width_for_monitor(this.monitor_w); int win_width = get_image_width_for_monitor(this.monitor_w);
int win_height = (backgroundH_unscaled * win_width)/ backgroundW_unscaled; int win_height = (backgroundH_unscaled * win_width)/ backgroundW_unscaled;
//this.set_size_request(1, 1);
this.resize(win_width, win_height); this.resize(win_width, win_height);
this.set_default_size(win_width, win_height);
image.show(); image.show();
var fixed = new Fixed(); var layout = new Layout();
fixed.put(this.image, 0, 0); layout.put(this.image, 0, 0);
#if _NO_WIN #if _NO_WIN
this.key_overlay = new KeyOverlay(this); this.key_overlay = new KeyOverlay(this);
this.key_overlay.show(); this.key_overlay.show();
fixed.put(this.key_overlay, 0, 0); layout.put(this.key_overlay, 0, 0);
#endif #endif
add(fixed); add(layout);
fixed.show(); layout.show();
//Fenstereigenschaften setzen //Fenstereigenschaften setzen
this.key_press_event.connect(on_key_pressed); this.key_press_event.connect(on_key_pressed);
@ -400,7 +402,7 @@ namespace NeoLayoutViewer {
// Check images of layers need to be rescaled // Check images of layers need to be rescaled
if (monitor_rect_dest.width != this.monitor_w && true){ if (monitor_rect_dest.width != this.monitor_w) {
this.monitor_w = monitor_rect_dest.width; this.monitor_w = monitor_rect_dest.width;
int width; int width;
@ -408,7 +410,8 @@ namespace NeoLayoutViewer {
width = get_image_width_for_monitor(this.monitor_w); width = get_image_width_for_monitor(this.monitor_w);
height = get_unscaled_height() * width / get_unscaled_width(); height = get_unscaled_height() * width / get_unscaled_width();
this.resize(width, height); //this.resize(width, height);
this.set_default_size(width, height);
} }
int x, y, w, h; int x, y, w, h;

View File

@ -58,8 +58,11 @@ namespace NeoLayoutViewer {
private void main_resized(){ private void main_resized(){
// Get new window size // Get new window size
int win_width2 = this.winMain.get_allocated_width(); int win_width2;
int win_height2 = this.winMain.get_allocated_height(); int win_height2;
//win_width2 = this.winMain.get_allocated_width();
//win_height2 = this.winMain.get_allocated_height();
this.winMain.get_size(out win_width2, out win_height2);
if (win_width == win_width2 && win_height == win_height2) { if (win_width == win_width2 && win_height == win_height2) {
//debug(@"(ScalingImage $(this.id)) same width $(win_width)"); //debug(@"(ScalingImage $(this.id)) same width $(win_width)");