Changeset 95815 in spip-zone


Ignore:
Timestamp:
Mar 6, 2016, 9:45:17 PM (4 years ago)
Author:
bystrano@…
Message:

meilleure gestion des changements de pré-sélections

Location:
_plugins_/massicot/trunk
Files:
3 added
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/massicot/trunk/javascripts/formulaireMassicoterImage.js

    r95780 r95815  
    7979                                        y1: 0,
    8080                                        y2: img.height()
    81                                 });
     81                                }, zoom);
    8282                        } else {
    8383                                maj_image(zoom);
     
    9494
    9595                        if (mode_dimensions_forcees) {
    96                                 selection = forcer_dimensions_selection(selection);
     96                                selection = forcer_dimensions_selection(selection, zoom);
    9797                        }
    9898
     
    147147                        mode_dimensions_forcees = true;
    148148
    149                         // TODO ne pas changer de zoom ni de sélection si on est
    150                         // déjà aux bonnes dimensions.
    151 
    152149                        format = format.split(':');
    153150                        forcer_largeur = parseInt(format[0], 10);
    154151                        forcer_hauteur = parseInt(format[1], 10);
    155                         zoom = calculer_zoom_min();
    156 
    157                         maj_image(zoom);
    158 
    159                         slider.slider('option', 'min', zoom);
    160                         slider.slider('option', 'value', zoom);
     152
     153                        slider.slider('option', 'min', calculer_zoom_min());
    161154
    162155                        imgAreaSelector.setOptions({
     
    166159                        });
    167160
    168                         selection_initiale = forcer_dimensions_selection({
    169                                 x1: 0,
    170                                 x2: img.width(),
    171                                 y1: 0,
    172                                 y2: img.height()
    173                         });
     161                        selection_initiale = forcer_dimensions_selection(
     162                                imgAreaSelector.getSelection(),
     163                                zoom
     164                        );
     165
    174166                        maj_selection(selection_initiale);
    175167
     
    286278           essayeant de rester le plus proche possible de la sélection
    287279           passée en paramètre. On essaie de garder le même centre. */
    288         function forcer_dimensions_selection(selection) {
    289 
    290                 var centre = {
    291                                 x: (selection.x2 + selection.x1) / 2,
    292                                 y: (selection.y2 + selection.y1) / 2
    293                         },
    294                         x1 = Math.round(Math.max(0, centre.x - (forcer_largeur / 2))),
    295                         x2 = x1 + forcer_largeur,
    296                         y1 = Math.round(Math.max(0, centre.y - (forcer_hauteur / 2))),
    297                         y2 = y1 + forcer_hauteur;
    298 
    299                 selection = {
     280        function forcer_dimensions_selection(selection, zoom) {
     281
     282                var x1 = selection.x1,
     283                        x2 = selection.x2,
     284                        y1 = selection.y1,
     285                        y2 = selection.y2,
     286                        zoom_max = Math.min(
     287                                (largeur_image * zoom) / forcer_largeur,
     288                                (hauteur_image * zoom) / forcer_hauteur
     289                        ),
     290                        echelle_x = (x2 - x1) / forcer_largeur,
     291                        echelle_y = (y2 - y1) / forcer_hauteur,
     292                        echelle = Math.min(
     293                                Math.max(zoom, (echelle_x + echelle_y) / 2),
     294                                zoom_max
     295                        ),
     296                        largeur_selection = forcer_largeur * echelle,
     297                        hauteur_selection = forcer_hauteur * echelle,
     298                        centre = {
     299                                x: (x2 + x1) / 2,
     300                                y: (y2 + y1) / 2
     301                        };
     302
     303                x1 = Math.round(Math.max(0, centre.x - (largeur_selection / 2)));
     304                x2 = Math.round(x1 + largeur_selection);
     305                y1 = Math.round(Math.max(0, centre.y - (hauteur_selection / 2)));
     306                y2 = Math.round(y1 + hauteur_selection);
     307
     308                if (x2 > largeur_image) {
     309                        x1 = x1 - (x2 - largeur_image);
     310                        x2 = largeur_image;
     311                }
     312                if (y2 > hauteur_image) {
     313                        y1 = y1 - (y2 - hauteur_image);
     314                        y2 = hauteur_image;
     315                }
     316
     317                return {
    300318                        x1: x1,
    301319                        x2: x2,
     
    303321                        y2: y2
    304322                };
    305 
    306                 return selection;
    307323        }
    308324
Note: See TracChangeset for help on using the changeset viewer.