コード例 #1
0
        protected virtual void update_value(double newValue, bool bSendEvent)
        {
            double prev = current_value;

            current_value = newValue;

            snapped_value = current_value;

            if (EnableSnapToTicks && TickCount > 0)
            {
                double fTickSpan = 1.0 / (TickCount - 1);
                double fSnapped  = Snapping.SnapToIncrement(snapped_value, fTickSpan);
                fSnapped = MathUtil.Clamp(fSnapped, 0, 1);
                // [RMS] only snap when close enough to tick?
                //double fSnapT = fTickSpan * 0.25;
                //if (Math.Abs(fSnapped - snapped_value) < fSnapT)
                snapped_value = fSnapped;
            }

            update_handle_position();

            if (bSendEvent)
            {
                FUtil.SafeSendEvent(OnValueChanged, this, prev, snapped_value);
            }
        }
コード例 #2
0
        protected virtual void onSliderbarPress(InputEvent e, Vector3f hitPosW)
        {
            double t = get_slider_tx(hitPosW);

            FUtil.SafeSendEvent(OnValueChangeBegin, this, snapped_value);
            update_value(t, true);
        }
コード例 #3
0
 protected void standard_end_capture(InputEvent e, InteractionMode eMode)
 {
     if (eMode == InteractionMode.InHandleDrag || eMode == InteractionMode.InPressDrag)
     {
         FUtil.SafeSendEvent(OnValueChangeEnd, this, snapped_value);
     }
 }
コード例 #4
0
 override public bool EndCapture(InputEvent e)
 {
     if (FindHitGO(e.ray))
     {
         if (sent_click == false)
         {
             // on first click we reset timer
             FUtil.SafeSendEvent(OnClicked, this, new EventArgs());
             sent_click      = true;
             last_click_time = FPlatform.RealTime();
         }
         else
         {
             float delta = FPlatform.RealTime() - last_click_time;
             if (delta < double_click_delay)
             {
                 // if this second click comes fast enough, send doubleclick instead
                 FUtil.SafeSendEvent(OnDoubleClicked, this, new EventArgs());
                 sent_click      = false;
                 last_click_time = 0.0f;
             }
             else
             {
                 // send single-click and reset timer
                 FUtil.SafeSendEvent(OnClicked, this, new EventArgs());
                 sent_click      = true;
                 last_click_time = FPlatform.RealTime();
             }
         }
     }
     return(true);
 }
コード例 #5
0
        protected virtual void update_value(double newValue, bool bSendEvent)
        {
            double prev = current_value;

            current_value = newValue;

            snapped_value = current_value;

            if (TickSnapMode != TickSnapModes.NoSnapping && TickCount > 0)
            {
                if (TickSnapMode == TickSnapModes.AlwaysSnapToNearest)
                {
                    double fTickSpan = 1.0 / (TickCount - 1);
                    double fSnapped  = Snapping.SnapToIncrement(snapped_value, fTickSpan);
                    fSnapped      = MathUtil.Clamp(fSnapped, 0, 1);
                    snapped_value = fSnapped;
                }
                else
                {
                    double fTickSpan = 1.0 / (TickCount - 1);
                    double fSnapped  = Snapping.SnapToIncrement(snapped_value, fTickSpan);
                    if (Math.Abs(fSnapped - snapped_value) < TickSnapThreshold)
                    {
                        snapped_value = fSnapped;
                    }
                }
            }

            update_handle_position();

            if (bSendEvent)
            {
                FUtil.SafeSendEvent(OnValueChanged, this, prev, snapped_value);
            }
        }
コード例 #6
0
        public bool AddOrUpdateKey(Keyframe f)
        {
            if (f.Time < validMin || f.Time > validMax)
            {
                throw new gException("KeyframeSequence.AddKey: time {0} is out of valid range", f.Time);
            }

            IChangeOp change;

            if (Keys.ContainsKey(f.Time))
            {
                Keyframe prev = Keys[f.Time];
                change = new KeyframeUpdateChange()
                {
                    before = prev, after = f, sequence = this
                };
            }
            else
            {
                change = new KeyframeAddRemoveChange()
                {
                    key = f, sequence = this, bAdded = true
                };
            }

            add_or_update_key(f);

            FUtil.SafeSendEvent(ChangeOpEvent, this, change);

            return(true);
        }
コード例 #7
0
 public void Clear()
 {
     real_text  = new SecureString();
     dummy_text = "";
     UpdateText();
     cursor_position = 0;
     FUtil.SafeSendEvent(OnTextChanged, this, dummy_text);
 }
コード例 #8
0
 public void Disconnect()
 {
     foreach (var ui in Children)
     {
         ui.Disconnect();
     }
     FUtil.SafeSendEvent(OnDisconnected, this, EventArgs.Empty);
 }
コード例 #9
0
 public void Disconnect()
 {
     if (bDestroyOnDisconnect)
     {
         dummyGO.Destroy();
     }
     FUtil.SafeSendEvent(OnDisconnected, this, EventArgs.Empty);
 }
コード例 #10
0
 override public bool EndCapture(InputEvent e)
 {
     if (IsGOHit(e.ray, popupMesh))
     {
         FUtil.SafeSendEvent(OnDismissed, this, new EventArgs());
     }
     return(true);
 }
コード例 #11
0
 override public bool EndCapture(InputEvent e)
 {
     if (eInterMode == InteractionMode.InCustom)
     {
         custom_end_capture(e);
     }
     else if (eInterMode == InteractionMode.InHandleDrag || eInterMode == InteractionMode.InPressDrag)
     {
         FUtil.SafeSendEvent(OnValueChangeEnd, this, snapped_value);
     }
     return(true);
 }
コード例 #12
0
        public void PopCharacter()
        {
            if (real_text.Length > 0)
            {
                real_text.RemoveAt(real_text.Length - 1);
                dummy_text = dummy_text.Substring(0, real_text.Length);

                UpdateText();
                cursor_position = MathUtil.Clamp(cursor_position - 1, 0, dummy_text.Length);

                FUtil.SafeSendEvent(OnTextChanged, this, dummy_text);
            }
        }
コード例 #13
0
 public bool RemoveKey(double time)
 {
     if (Keys.ContainsKey(time))
     {
         Keyframe f = Keys[time];
         remove_key(time);
         FUtil.SafeSendEvent(ChangeOpEvent, this,
                             new KeyframeAddRemoveChange()
         {
             key = f, sequence = this, bAdded = false
         });
         return(true);
     }
     return(false);
 }
コード例 #14
0
 public bool UpdateKey(Keyframe f)
 {
     if (Keys.ContainsKey(f.Time))
     {
         Keyframe  prev   = Keys[f.Time];
         IChangeOp change = new KeyframeUpdateChange()
         {
             before = prev, after = f, sequence = this
         };
         Keys[f.Time] = f;
         FUtil.SafeSendEvent(ChangeOpEvent, this, change);
         return(true);
     }
     return(false);
 }
コード例 #15
0
        public bool AppendCharacter(char c)
        {
            if (CharacterValidatorF != null && CharacterValidatorF(c) == false)
            {
                return(false);
            }

            real_text.AppendChar(c);
            dummy_text += "*";

            UpdateText();
            cursor_position = MathUtil.Clamp(cursor_position + 1, 0, dummy_text.Length);

            FUtil.SafeSendEvent(OnTextChanged, this, dummy_text);
            return(true);
        }
コード例 #16
0
 override public bool EndCapture(InputEvent e)
 {
     if (FindHitGO(e.ray))
     {
         if (EnableClickToDismiss)
         {
             Dismiss();
         }
         else
         {
             // send single-click and reset timer
             FUtil.SafeSendEvent(OnClicked, this, new EventArgs());
         }
     }
     return(true);
 }
コード例 #17
0
        virtual public void Disconnect()
        {
            // we could get this while we are in an active capture, if selection
            // changes. in that case we need to terminate gracefully.
            if (activeWidget != null)
            {
                EndCapture(null);
            }

            if (targetWrapper != null)
            {
                targetWrapper.Target.OnTransformModified -= onTransformModified;
            }

            FUtil.SafeSendEvent(OnDisconnected, this, EventArgs.Empty);
        }
コード例 #18
0
 void update_progress(double newValue, bool bSendEvent)
 {
     if (newValue != current_progress)
     {
         double prev = current_progress;
         current_progress = newValue;
         update_geometry();
         if (bSendEvent)
         {
             FUtil.SafeSendEvent(OnProgressChanged, this, prev, current_progress);
             if (current_progress == max_progress)
             {
                 FUtil.SafeSendEvent(OnProgressCompleted, this, max_progress);
             }
         }
     }
 }
コード例 #19
0
        public bool SetText(string newText, bool bFromUserInput = true)
        {
            string validated = validate_text(text, newText);

            if (validated != text)
            {
                text = validated;
                UpdateText();
                FUtil.SafeSendEvent(OnTextChanged, this, text);
                if (bFromUserInput)
                {
                    FUtil.SafeSendEvent(OnTextEdited, this, text);
                }
                return(true);
            }
            return(false);
        }
コード例 #20
0
        public bool AddKey(Keyframe f)
        {
            if (f.Time < validMin || f.Time > validMax)
            {
                throw new gException("KeyframeSequence.AddKey: time {0} is out of valid range", f.Time);
            }
            if (Keys.ContainsKey(f.Time))
            {
                throw new gException("KeyframeSequence.AddKey: key already exists at time {0}!", f.Time);
            }

            add_or_update_key(f);
            FUtil.SafeSendEvent(ChangeOpEvent, this,
                                new KeyframeAddRemoveChange()
            {
                key = f, sequence = this, bAdded = true
            });

            return(true);
        }
コード例 #21
0
        void begin_editing()
        {
            // start capturing input
            if (OverrideDefaultInputHandling == false)
            {
                HUDTextEntryTarget entry = new HUDTextEntryTarget(this);
                if (Parent.Context.RequestTextEntry(entry))
                {
                    active_entry = entry;
                    FUtil.SafeSendEvent(OnBeginTextEditing, this);
                    bgMesh.SetMaterial(activeBackgroundMaterial);
                    start_active_time = FPlatform.RealTime();
                    cursor_position   = text.Length;

                    entry.OnTextEditingEnded += (s, e) => {
                        bgMesh.SetMaterial(backgroundMaterial);
                        active_entry = null;
                        FUtil.SafeSendEvent(OnEndTextEditing, this);
                    };
                }
            }
        }
コード例 #22
0
        public void ApplyTransformation(Func <Frame3f, Frame3f> TransformF)
        {
            List <IChangeOp> changes = new List <IChangeOp>();

            foreach (Keyframe k in Keys.Values)
            {
                IChangeOp change = new KeyframeUpdateChange()
                {
                    sequence = this, before = k,
                    after    = new Keyframe(k.Time, TransformF(k.Frame))
                };
                changes.Add(change);
            }

            for (int i = 0; i < changes.Count; ++i)
            {
                changes[i].Apply();
                FUtil.SafeSendEvent(ChangeOpEvent, this, changes[i]);
            }

            FUtil.SafeSendEvent(ModifiedEvent, this, null);
        }
コード例 #23
0
        override public bool EndCapture(InputEvent e)
        {
            if (Parent == null)
            {
                DebugUtil.Log(2, "HUDLabel.EndCapture: our parent went invalid while we were capturing!");
                return(true);
            }

            if (FindHitGO(e.ray))
            {
                if (sent_click == false)
                {
                    // on first click we reset timer
                    FUtil.SafeSendEvent(OnClicked, this, new EventArgs());
                    sent_click      = true;
                    last_click_time = FPlatform.RealTime();
                }
                else
                {
                    float delta = FPlatform.RealTime() - last_click_time;
                    if (delta < double_click_delay)
                    {
                        // if this second click comes fast enough, send doubleclick instead
                        FUtil.SafeSendEvent(OnDoubleClicked, this, new EventArgs());
                        sent_click      = false;
                        last_click_time = 0.0f;
                    }
                    else
                    {
                        // send single-click and reset timer
                        FUtil.SafeSendEvent(OnClicked, this, new EventArgs());
                        sent_click      = true;
                        last_click_time = FPlatform.RealTime();
                    }
                }
            }
            return(true);
        }
コード例 #24
0
        public virtual void Disconnect()
        {
            // we could get this while we are in an active capture, if selection
            // changes. in that case we need to terminate gracefully.
            if (activeWidget != null)
            {
                EndCapture(null);
            }
            foreach (var w in Widgets)
            {
                w.Value.Disconnect();
            }
            Widgets.Clear();

            if (targetWrapper != null)
            {
                targetWrapper.Target.OnTransformModified -= onTransformModified;
            }

            // if we created an internal group SO, get rid of it
            if (internalGroupSO != null)
            {
                internalGroupSO.RemoveAllChildren();
                parentScene.RemoveSceneObject(internalGroupSO, true);
                internalGroupSO = null;
            }
            // same for xform
            if (internalXFormSO != null)
            {
                internalXFormSO.DisconnectTarget();
                parentScene.RemoveSceneObject(internalXFormSO, true);
                internalXFormSO = null;
            }

            FUtil.SafeSendEvent(OnDisconnected, this, EventArgs.Empty);
        }
コード例 #25
0
 public void selected(object sender)
 {
     FUtil.SafeSendEvent(OnSelected, sender, new EventArgs());
 }
コード例 #26
0
 protected virtual void OnSelectionChanged(EventArgs e)
 {
     FUtil.SafeSendEvent(SelectionChangedEvent, this, e);
 }
コード例 #27
0
 void on_double_clicked()
 {
     FUtil.SafeSendEvent(OnDoubleClicked, this, new EventArgs());
 }
コード例 #28
0
        void on_clicked()
        {
            begin_editing();

            FUtil.SafeSendEvent(OnClicked, this, new EventArgs());
        }
コード例 #29
0
 void add_or_update_key(Keyframe f)
 {
     Keys[f.Time] = f;
     FUtil.SafeSendEvent(ModifiedEvent, this, null);
 }
コード例 #30
0
 void remove_key(double time)
 {
     Keys.Remove(time);
     FUtil.SafeSendEvent(ModifiedEvent, this, null);
 }