Package org.adamtacy.client.ui.effects.impl.browsers

Source Code of org.adamtacy.client.ui.effects.impl.browsers.EffectImplementationOpera

/*
* Copyright 2008-2009 Adam Tacy <adam.tacy AT gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.adamtacy.client.ui.effects.impl.browsers;

import org.adamtacy.client.ui.Canvas;
import org.adamtacy.client.ui.NEffectPanel;

import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;

/**
* Deferred binding class allowing access to low level effect functionality for
* Opera. Class extends the standard implementation, overriding the reflect()
* method to allow Opera to handle reflecting an image in its own way.
*
* @author Adam Tacy
* @version 3.0
*/
public class EffectImplementationOpera extends EffectImplementationStandard {
 
  /**
   * In Opera case, just set the colour if it is #rrggbb or rgb(r,g,b)
   * if it's rgba(r,g,b,a) then make it rgb(r,g,b)
   * @param effectElement
   * @param styleComponentToChange
   * @param colour
   */
  public void setColour(Element effectElement, String styleComponentToChange,
      String colour) {
    if (colour.startsWith("rgba")){
      String t3 = "rgb" + colour.substring(4,(colour.lastIndexOf(","))) + ")";
      colour = t3;
    }
    effectElement.getStyle().setProperty(styleComponentToChange, colour);
//    DOM.setStyleAttribute((com.google.gwt.user.client.Element) effectElement,
//        styleComponentToChange, colour);   
  }
 
  @Override
  protected native void reflect(Element ct, Element img, int canvasHeight,
      double opacity)/*-{
              var imgWidth = img.width;
              var imgHeight = img.height;
              ct.width = imgWidth;
              ct.height = canvasHeight;
              var context = ct.getContext('2d');
            context.save();
            context.translate(0, imgHeight-1);
            context.scale(1, -1);
            context.drawImage(img, 0, 0, imgWidth, imgHeight);
            context.restore();
            context.globalCompositeOperation = 'destination-out';
            var gradient = context.createLinearGradient(0, 0, 0, imgHeight);
            gradient.addColorStop(0, 'rgba(255, 255, 255, '+(1-opacity)+')');
            var length =  (canvasHeight/imgHeight);
            gradient.addColorStop(length, 'rgba(255, 255, 255, 1.0)');
            gradient.addColorStop(1, 'rgba(255, 255, 255, 1.0)');
            context.fillStyle = gradient;
            context.fillRect(0,0,imgWidth,canvasHeight);
            //context.fill();
          }-*/;

  /**
   * Reflects an image
   */
  @Override
  public void reflectImage(NEffectPanel thePanel, int height, double opacity,
      int gap, boolean setUp) {

    DockPanel container;
    Widget w;
    Canvas v;
    SimplePanel gapPanel;

    if (setUp) {
      w = (Image) ((DockPanel) thePanel.getPanelWidget()).getWidget(0);
      v = (Canvas) ((DockPanel) thePanel.getPanelWidget()).getWidget(WHERE_IS_REFLECTION);
      v.setSize(1, 1);
      // v = new Canvas();
      container = (DockPanel) thePanel.getPanelWidget();
      // Remove from panel now as this may make any animations look much
      // smoother
      // If not, there is a danger on slow(er) systems that the reflection hangs
      // out from image until re-drawn.
      container.remove(WHERE_IS_REFLECTION);
    } else {
      container = new DockPanel();
      w = getReflectedImage(thePanel, setUp);
      v = new Canvas();
    }

    gapPanel = new SimplePanel();
    gapPanel.setWidth("100%");
    gapPanel.add(new HTML("&nbsp;"));
    gapPanel.setHeight(gap + "px");

    int imgHeight = w.getOffsetHeight();
    int canvasHeight = (int) ((imgHeight * height) / 100);

    reflect(v.getElement(), w.getElement(), canvasHeight, opacity);

    if (setUp) {
      container.add(v, DockPanel.SOUTH);
    } else {
      container.add(w, DockPanel.NORTH);
      container.add(v, DockPanel.SOUTH);
      thePanel.add(container);
    }
    container.add(gapPanel, DockPanel.CENTER);
    container.getElement().getStyle().setProperty("overflow", "hidden");
    //DOM.setElementAttribute(container.getElement(), "overflow", "hidden");
    container.setHeight(imgHeight + canvasHeight + "px");
  }

}
TOP

Related Classes of org.adamtacy.client.ui.effects.impl.browsers.EffectImplementationOpera

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.