Subversion Repository Public Repository

litesoft

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*
 * Copyright 2007 Mat Gessel <mat.gessel@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.litesoft.GWT.client.widgets.nonpublic.external;

import com.google.gwt.core.client.*;
import com.google.gwt.user.client.*;
import org.litesoft.GWT.client.*;
import org.litesoft.core.*;

public class MousePerformanceFilter extends MouseHandlerWrapper
{
    private static final MoveStrategy s_defaultImpl = (MoveStrategy) GWT.create( MoveStrategy.class );

    private MoveStrategy m_MoveStrategy = s_defaultImpl;

    public MousePerformanceFilter( MouseHandler delegate )
    {
        super( delegate );
    }

    public MoveStrategy getMoveStrategy()
    {
        return m_MoveStrategy;
    }

    public void setMoveStrategy( MoveStrategy impl )
    {
        m_MoveStrategy = impl;
    }

    public void onMouseMove( MouseEvent e )
    {
        getMoveStrategy().step( getDelegate(), e );
    }

    public void onMouseUp( MouseEvent e )
    {
        getMoveStrategy().finish();
        super.onMouseUp( e );
    }

    public static abstract class MoveStrategy
    {
        protected abstract void step( MouseHandler handler, MouseEvent e );

        protected abstract void finish();
    }

    public static class MoveStrategyImmediate extends MoveStrategy
    {
        protected void step( MouseHandler handler, MouseEvent e )
        {
            handler.onMouseMove( e );
        }

        protected void finish()
        {
        }
    }

    public static class MoveStrategyDeferred extends MoveStrategy
    {
        /**
         * Note: the timer is active if this field is not null
         */
        private StepTimer m_timer = null;

        protected void step( MouseHandler handler, MouseEvent moveEvent )
        {
            if ( m_timer != null )
            {
                m_timer.update( moveEvent );
            }
            else
            {
                m_timer = new StepTimer( handler, moveEvent );
                m_timer.schedule( 1 );
            }
        }

        protected void finish()
        {
            if ( m_timer != null )
            {
                m_timer.cancel();
                m_timer.run();
            }
        }

        private class StepTimer extends Timer
        {
            private final MouseHandler m_handler;

            private MouseEvent m_moveEvent;

            public StepTimer( MouseHandler gesture, MouseEvent moveEvent )
            {
                m_handler = gesture;
                update( moveEvent );
            }

            public void update( MouseEvent e )
            {
                m_moveEvent = e;
            }

            public void run()
            {
                m_timer = null;
                m_handler.onMouseMove( m_moveEvent );
            }
        }
    }

    public static class MoveStrategyMozilla extends MoveStrategy
    {
        private final MoveStrategy m_strategy;

        public MoveStrategyMozilla()
        {
            if ( Platform.Other.equals( UserAgent.getInstance().getPlatform() ) )
            {
                m_strategy = new MoveStrategyDeferred();
            }
            else
            {
                m_strategy = new MoveStrategyImmediate();
            }
        }

        protected void step( MouseHandler handler, MouseEvent moveEvent )
        {
            m_strategy.step( handler, moveEvent );
        }

        protected void finish()
        {
            m_strategy.finish();
        }
    }
}

Commits for litesoft/trunk/Java/GWT/Client/src/org/litesoft/GWT/client/widgets/nonpublic/external/MousePerformanceFilter.java

Diff revisions: vs.
Revision Author Commited Message
2 GeorgeS picture GeorgeS Sun 07 Feb, 2010 12:50:58 +0000