VideoPage.xaml.h 8.29 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/**************************************************************************
* Copyright (C) 2016 by Savoir-faire Linux                                *
* Author: Jger Nicolas <nicolas.jager@savoirfairelinux.com>              *
* Author: Traczyk Andreas <andreas.traczyk@savoirfairelinux.com>          *
*                                                                         *
* This program is free software; you can redistribute it and/or modify    *
* it under the terms of the GNU General Public License as published by    *
* the Free Software Foundation; either version 3 of the License, or       *
* (at your option) any later version.                                     *
*                                                                         *
* This program is distributed in the hope that it will be useful,         *
* but WITHOUT ANY WARRANTY; without even the implied warranty of          *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
* GNU General Public License for more details.                            *
*                                                                         *
* You should have received a copy of the GNU General Public License       *
* along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
**************************************************************************/
19 20
#pragma once

Nicolas Jager's avatar
Nicolas Jager committed
21
#include "VideoPage.g.h"
22
#include "MessageTextPage.xaml.h"
Nicolas Jager's avatar
Nicolas Jager committed
23

24 25
using namespace Platform;
using namespace Concurrency;
26
using namespace Windows::Media;
Nicolas Jager's avatar
Nicolas Jager committed
27
using namespace Windows::Media::Capture;
28
using namespace Windows::Graphics::Imaging;
Nicolas Jager's avatar
Nicolas Jager committed
29
using namespace Windows::UI::Xaml::Navigation;
atraczyk's avatar
atraczyk committed
30
using namespace Windows::UI::Xaml;
31
using namespace Windows::UI::Xaml::Media;
atraczyk's avatar
atraczyk committed
32 33
using namespace Windows::ApplicationModel::Core;
using namespace Windows::Devices::Enumeration;
34
using namespace Windows::UI::Xaml::Input;
atraczyk's avatar
atraczyk committed
35

Nicolas Jager's avatar
Nicolas Jager committed
36 37 38 39 40
namespace RingClientUWP
{
/* delegate */
delegate void PressHangUpCall();
delegate void PauseCall();
41
delegate void ChatPanelCall(); // used ?
Nicolas Jager's avatar
Nicolas Jager committed
42 43 44 45 46 47 48 49 50 51 52 53 54 55
delegate void AddContactCall();
delegate void TransferCall();
delegate void SwitchMicrophoneStateCall();
delegate void SwitchVideoStateCall();
delegate void ReccordVideoCall();
delegate void QualityVideoLevelCall();

namespace Views
{

public ref class VideoPage sealed
{
public:
    VideoPage();
56

57
    void updatePageContent();
58
    void SetBuffer(uint8_t* buf, int width, int height);
59

60 61 62
    property bool barFading {
        bool get(){ return barFading_; }
        void set(bool value) { barFading_ = value; }
Nicolas Jager's avatar
Nicolas Jager committed
63 64
    }

65
    void scrollDown();
66
    void screenVideo(bool state);
67

Nicolas Jager's avatar
Nicolas Jager committed
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
protected:
    virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override;

internal:
    /* events */
    event PressHangUpCall^ pressHangUpCall;
    event PauseCall^ pauseCall;
    event ChatPanelCall^ chatPanelCall;
    event AddContactCall^ addContactCall;
    event TransferCall^ transferCall;
    event SwitchMicrophoneStateCall^ switchMicrophoneStateCall;
    event SwitchVideoStateCall^ switchVideoStateCall;
    event ReccordVideoCall^ reccordVideoCall;
    event QualityVideoLevelCall^ qualityVideoLevelCall;

private:
    bool barFading_;
85 86 87 88 89 90 91 92 93
    String^ lastMessageText;
    bool showSmartInfo;
    EventRegistrationToken videoPage_InputHandlerToken;

    DispatcherTimer^ callTimerUpdater;

    VideoFrame^ videoFrame;
    SoftwareBitmap^ softwareBitmap;
    Video::VideoRendererWrapper^ currentRendererWrapper;
94

95 96
    // For transforming the preview image
    double userPreviewHeightModifier = 0.0;
97 98
    double lastUserPreviewHeightModifier;
    bool isMovingPreview = false;
99
    bool isResizingPreview = false;
100 101 102 103
    bool isHoveringOnResizer = false;
    enum class Quadrant {
        SE, SW, NW, NE
    } quadrant = Quadrant::SE, lastQuadrant = Quadrant::SE;
104 105 106
    TransformGroup^ PreviewImage_transforms;
    MatrixTransform^ PreviewImage_previousTransform;
    CompositeTransform^ PreviewImage_deltaTransform;
Nicolas Jager's avatar
Nicolas Jager committed
107

108 109 110 111 112 113 114 115 116
    // Chat panel transformations
    bool isChatPanelOpen = false;
    bool isResizingChatPanel = false;
    double chatPanelSize = 176;
    double lastchatPanelSize;
    enum class Orientation {
        Horizontal, Vertical
    } chtBoxOrientation = Orientation::Vertical;

atraczyk's avatar
atraczyk committed
117
    Concurrency::task<void> WriteFrameAsSoftwareBitmapAsync(String^ id, uint8_t* buf, int width, int height);
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
    void _sendBtn__Click(Platform::Object^ sender, RoutedEventArgs^ e);
    void sendMessage();
    void Button_Click(Object^ sender, RoutedEventArgs^ e);
    void _btnCancel__Click(Object^ sender, RoutedEventArgs^ e);
    void _btnHangUp__Tapped(Object^ sender, TappedRoutedEventArgs^ e);
    void _btnPause__Tapped(Object^ sender, TappedRoutedEventArgs^ e);
    void _btnChat__Tapped(Object^ sender, TappedRoutedEventArgs^ e);
    void _btnAddFriend__Tapped(Object^ sender, TappedRoutedEventArgs^ e);
    void _btnSwitch__Tapped(Object^ sender, TappedRoutedEventArgs^ e);
    void _btnMicrophone__Tapped(Object^ sender, TappedRoutedEventArgs^ e);
    void _btnMemo__Tapped(Object^ sender, TappedRoutedEventArgs^ e);
    void _btnHQ__Tapped(Object^ sender, TappedRoutedEventArgs^ e);
    void _btnVideo__Tapped(Object^ sender, TappedRoutedEventArgs^ e);
    void _videoControl__PointerMoved(Object^ sender, PointerRoutedEventArgs^ e);
    void btnAny_entered(Object^ sender, PointerRoutedEventArgs^ e);
    void btnAny_exited(Object^ sender, PointerRoutedEventArgs^ e);
    void _btnVideo__Click(Object^ sender, RoutedEventArgs^ e);
    void _btnMicrophone__Click(Object^ sender, RoutedEventArgs^ e);
    void IncomingVideoImage_DoubleTapped(Object^ sender, DoubleTappedRoutedEventArgs^ e);
    void OnincomingMessage(String ^callId, String ^payload);
    void OnincomingVideoMuted(String ^callId, bool state);
139
    void OnsmartInfoUpdated(const std::map<std::string, std::string>& info);
140 141
    void OnstartPreviewing();
    void OnstopPreviewing();
142
    void OnaudioMuted(const std::string &callId, bool state);
143
    void OnvideoMuted(const std::string &callId, bool state);
144 145 146
    void openChatPanel();
    void closeChatPanel();
    void resizeChatPanel();
147 148 149 150 151
    void computeQuadrant();
    void arrangeResizer();
    void anchorPreview();
    void updatePreviewFrameDimensions();
    void InitManipulationTransforms();
152
    void updateCallTimer(Object^ sender, Object^ e);
153 154 155 156
    void PreviewImage_ManipulationDelta(Object^ sender, ManipulationDeltaRoutedEventArgs^ e);
    void PreviewImage_ManipulationCompleted(Object^ sender, ManipulationCompletedRoutedEventArgs^ e);
    void PreviewImageResizer_ManipulationDelta(Object^ sender, ManipulationDeltaRoutedEventArgs^ e);
    void PreviewImageResizer_ManipulationCompleted(Object^ sender, ManipulationCompletedRoutedEventArgs^ e);
157 158
    void _chatPanelResizeBarGrid__ManipulationDelta(Object^ sender, ManipulationDeltaRoutedEventArgs^ e);
    void _chatPanelResizeBarGrid__ManipulationCompleted(Object^ sender, ManipulationCompletedRoutedEventArgs^ e);
159 160 161
    void PreviewImage_PointerReleased(Object^ sender, PointerRoutedEventArgs^ e);
    void PreviewImageResizer_PointerEntered(Object^ sender, PointerRoutedEventArgs^ e);
    void PreviewImageResizer_PointerExited(Object^ sender, PointerRoutedEventArgs^ e);
162 163 164 165 166 167 168 169 170 171
    void PreviewImageResizer_Pressed(Object^ sender, PointerRoutedEventArgs^ e);
    void _btnToggleOrientation__Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e);
    void PreviewImageResizer_PointerReleased(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
    void _chatPanelResizeBarGrid__PointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
    void _chatPanelResizeBarGrid__PointerExited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
    void _chatPanelResizeBarGrid__PointerPressed(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
    void _chatPanelResizeBarGrid__PointerReleased(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
    void _videoContent__SizeChanged(Platform::Object^ sender, Windows::UI::Xaml::SizeChangedEventArgs^ e);
    void _messageTextBox__TextChanged(Platform::Object^ sender, Windows::UI::Xaml::Controls::TextChangedEventArgs^ e);
    void _corewindow__KeyDown(CoreWindow^ sender, KeyEventArgs^ e);
Nicolas Jager's avatar
Nicolas Jager committed
172 173 174
};
}
}