Commit Graph

80 Commits (81313dfd354b7ffab385e462d3957d656697fb91)

Author SHA1 Message Date
jp9000 544953c870 UI: Implement transitions and preview/program mode
Implements transitions, and introduces "Studio Mode" which allows live
editing of the same or different scenes while preserving what's
currently being displayed.

Studio Mode offers a number of new features:
  - The ability to edit different scenes or the same scene without
    modifying what's currently being displayed (of course)

  - The ability to set up "quick transitions" with a desired transition
    and duration that can be assigned hotkeys

  - The option to create full copies of all sources in the program scene
    to allow editing of source properties of the same scene live without
    modifying the output, or (by default) just use references.  (Note
    however that certain sources cannot be duplicated, such as capture
    sources, media sources, and device sources)

  - Swap Mode (enabled by default) which swaps the program scene with
    the preview scene when a transition completes

Currently, only non-configurable transitions (transitions without
properties) are listed, and the only transitions available as of this
writing are fade and cut.  In future versions more transitions will be
added, such as swipe, stingers, and many other various sort of
transitions, and the UI will support being able to add/configure/remove
those sort of configurable transitions.
2016-01-26 11:49:56 -08:00
jp9000 b8547aa811 UI: Add menu button (split button) class
When you assign a menu to a normal QPushButton, it becomes a button that
only allows you to have a menu.  This class lets you click the button
and have a menu at the same time.
2016-01-25 17:29:10 -08:00
Palana ddfe6483b3 UI: Add OBS_PROPERTY_FRAME_RATE implementation 2015-11-14 15:57:21 +01:00
jp9000 3422631152 UI: Refactor OBSQTDisplay for windowless context
(Non-compiling commit: windowless-context branch)

This makes it so that OBSQTDisplay now uses/controls an obs_display
object directly (rather than having the owner have to associate an
OBSDisplay with it).  It was separated before because the main window
for the basic UI would was using the "main preview" stuff before the
windowless context and had to be handled differently, so you couldn't
just associate an obs_display object with OBSQTDisplay, meaning that all
"secondary" previews such as properties/filters/etc had to handle the
obs_display alone, which caused a lot of needlessly duplicated code.

Also adds a DisplayCreated signal to allow owners to be able to add
callbacks and such on creation of the actual obs_display context.
2015-08-05 01:07:11 -07:00
jp9000 66f7330a58 UI: Remove properties window UI file (not needed)
The properties window UI file has no point at this time.  It's just a
window with a widget inside of it.
2015-07-20 19:11:35 -07:00
jp9000 b39445f323 UI: Allow QT to be found via cmake variable 2015-07-11 10:11:57 -07:00
Palana 6a136ade4f UI: Add (AAC) audio encoder inspection helpers 2015-07-04 13:30:13 +02:00
jp9000 f9314128ea UI: Add Profiles
Adds setting profiles to the basic user interface.  For each profile, a
subdirectory for the profile will be created in
[config_dir]/obs-studio/basic/profiles which will contain the settings
data for each profile.
2015-07-03 18:35:30 -07:00
jp9000 7d6a12f49e UI: Add scene collections
Adds scene collections to the menu bar, which allows you to duplicate,
rename, remove, or add clean new scene collections.

Scene files are now stored in ./obs-studio/basic/scenes directory with
filesystem-safe names.
2015-07-03 18:33:57 -07:00
jp9000 db9e966e6c UI: Add item widget helper functions
These functions are designed to manually delete item widgets within
other widgets to prevent ->deleteLater from being called on them.  This
prevents the item widgets from being stuck in the event queue, and
prevents references to things like sources from being stuck in the event
queue along with them if they're used in the item widget's class or
functions.
2015-07-02 17:56:03 -07:00
jp9000 39d1cda4e9 UI: Remove dependence on Qt5Network
Qt5Network has been replaced by libcurl.
2015-05-24 16:20:14 -07:00
jp9000 72e3ec7b4c UI: Add RemoteTextThread class
The RemoteTextThread class is a QThread that is used to get text
remotely in a separate thread with libcurl.  This is intended to replace
the Qt5Network classes because of their dependency on OpenSSL, which we
can't distribute.
2015-05-24 16:20:12 -07:00
Palana 369d95dfc3 UI: Add OBSSourceLabel 2015-05-11 20:45:27 +02:00
Palana b33be9fca6 UI: Add OBSHotkey{Edit,Label,Widget}
OBSHotkeyEdit is similar to QKeySequenceEdit, except less terribad on OSX, while
OBSHotkeyWidget provides a container that automagically encapsulates multiple
bindings per hotkey

OBSHotkeyLabel in combination with OBSHotkeyWidget provides mechanisms for
dealing with hotkey pairs (see upcoming usage in window-basic-settings.cpp)
2015-05-11 20:45:27 +02:00
HomeWorld df893dde81 UI: Add SliderAbsoluteSetStyle class
When this class is used in conjunction with a QSlider control, allows
direct setting of the slider handle position when clicking in an area
other than the slider handle.  The default QSlider handle behavior is to
step towards clicked position.
2015-04-11 07:13:30 -07:00
jp9000 2054161717 UI: Add windows exe icon
Adds an icon to the executable file so the executable no longer shows up
without an icon.
2015-04-10 07:27:37 -07:00
jp9000 c68283042c UI: Add fullscreen projector class
This allows viewing a source, scene, or the main preview in a fullscreen
window.
2015-04-10 07:27:36 -07:00
kc5nra b218957f38 UI: Add Format, Audio and Video ComboBoxes
Adds ComboBoxes for selecting format and audio/video
codecs. The ComboBoxes also show only valid codec
combinations for a particular container format.
2015-03-30 18:16:57 -05:00
jp9000 ceba24c7e9 UI: Add user interface for filters 2015-03-25 14:12:00 -07:00
jp9000 ff363bc77b UI: Add QListWidget subclass to emit focus change
The FocusList subclass of QListWidget emits a GotFocus signal when it
gets focus -- used for the filters window to know when a specific filter
list gets focus.
2015-03-25 14:11:59 -07:00
jp9000 642aa7454f UI: Add list item widget w/ visibility checkbox
This is used to allow the user to temporarily disable sources/filters.

For each item in the list box, it displays a visibility checkbox (with
eye icon) that the user can click to disable/re-enable sources or
filters.

I did not end up using the Qt::ItemIsUserCheckable flag with the list
items for a few reasons:

- We could not style the checkbox indicator without qss screwing up
  other parts of the list widget style on certain operating systems

- We could not get the icon to properly invert on active selection like
  the text does on mac/linux, which made it look strange

- Clicking the checkbox too fast would cause it to signal a double-click
  on the icon, opening the properties for a source in the source list
2015-03-25 14:11:58 -07:00
jp9000 399eb6d330 UI: Add 'mute' checkbox style hint 2015-03-25 10:03:24 -07:00
jp9000 53a98ecbe5 UI: Add 'visibility' checkbox
This checkbox gives an 'eye' icon that indicates whether something is
visible or not.  The color of the icon is influenced by the current
style's foreground color.
2015-03-25 10:03:23 -07:00
jp9000 17adf8f35e UI: Add floating point slider control 2015-03-22 19:18:14 -07:00
jp9000 07007bcc6e UI: Refactor output handling
To accommodate multiple types of outputs, there has to be some level of
abstraction.  The BasicOutputHandler structure will give us a way that
we can switch between different output configurations.
2015-02-06 03:17:33 -08:00
Carl Fürstenberg 6095e7ef51 Add SOVERSION to libobs-opengl
Because libobs-opengl is a public library, it's customary to have SONAME
embedded in the library file.  Also remove the prefix override and
remove the prefixing "lib" from the output name.  This also requires us
to pass the library file name to dlopen invocations.
2015-01-13 17:51:38 -08:00
HomeWorld 88333b0f47 UI: Add SourceListWidget - QListWidget subclass
The default behavior of QListWidget is to allow double clicks of any
mouse button, but in certain situations/usage cases this can cause
undesirable results.  As an example: when double-clicking with the right
mouse button on an item in the sources list box, it will open up both
the properties window and the context menu.  Not pretty at all.

This subclass filters out double clicks for any mouse button other than
the left mouse button to fix this issue.
2015-01-05 03:38:18 -08:00
jp9000 2c796e4b7b UI: Add vertical scroll area subclass
The regular scroll area can expand horizontally, but the problem with
this is that sometimes there are controls within it that expand way too
big.

For example, the properties window for window capture can have a list of
windows where the titles of the windows are really really long, and it
causes the properties to extend way too far to the right, making the
window look really unusual.

Another example are the volume controls in the main window that can
expand way to the right if the name of a source is really long, causing
the volume control to stretch way too far to the right, making the
volume controls difficult to use when that happens.

So this just makes it so it sets the maximum width of a scroll area's
internal widget to the actual width of the scroll area, preventing it
from going off the side of the scroll area.
2015-01-03 02:42:57 -08:00
jp9000 824c7b02c9 UI: Add crash report dialog
This crash report dialog is mostly just for the windows crash handling
code.  If a crash occurs, the user will be able to view the crash report
and post it on the forums or give it to a developer for debugging
purposes.
2015-01-03 02:37:21 -08:00
jp9000 6fc52dfb16 UI: Add advanced audio properties dialog
This dialog gives options such as increasing audio past 100%, forcing
the audio of a source to mono, and setting the audio sync offset of a
source (which was an oft-requested feature)
2014-12-28 01:51:56 -08:00
Jake Probst cc2d3b2d1c linux x11: get monitors: use xcb and add fallback if xinerama not found 2014-12-19 21:51:37 -08:00
Palana c9ee436e1c Add UI for remuxing recordings via FFmpeg 2014-10-12 19:56:52 +02:00
Palana e7cfd58e9e Add option to use Sparkle for updates
OBS Sparkle feeds have two extensions to vanilla Sparkle feeds:
- There can be two kinds of items per feed: (zipped) .app and .mpkg
  via <ce:packageType>app|mpkg</ce:packageType> (default is mpkg)
- Feed items can be disabled via <ce:deployed>false</ce:deployed>; these
  items will not be considered for updates unless
  "[General] UpdateToUndeployed=1" is set the global config

Unlike other Sparkle implementations the FeedURL cannot be updated via user
preferences because we support multiple app packages with the same package
identifier but different FeedURL settings on the same machine
2014-10-11 22:17:18 +02:00
Jim 8bfa7398b0 Merge pull request #265 from kc5nra/interaction
Add interaction support to libobs and support for pumping the events/interaction in gui
2014-09-15 16:42:19 -07:00
John Bradley 4221134748 Add interaction gui 2014-09-15 18:29:26 -05:00
jp9000 b4052f81ef Add cmake option to disable user interface
Adds:
ENABLE_UI (on by default) which makes it so that the UI is required, and
will fail if a dependency is not found.  This is on by default because
most people are building it with the user interface, and we'll probably
get a lot of issue reports stating "why is there no executable?" if we
don't have this on by default.

DISABLE_UI which forces the UI off.

If neither are set, then the UI will only be built if the dependencies
for it are found, otherwise the UI will be be ignored.
2014-09-15 14:42:18 -07:00
BtbN 34134bfbf6 Fix AppKit find module 2014-09-15 14:42:18 -07:00
fryshorts d8d0ae46ba Install desktop file and application icon on linux 2014-08-05 21:15:45 +02:00
BtbN 415a698bac Add support for build time dependency copying 2014-07-19 01:38:42 +02:00
BtbN 38c2fc87aa Move all data into the subdir it belongs to
Completely removes the build dir in favor of cmake based build layouting
2014-07-19 01:38:41 +02:00
jp9000 c16e6cc6d7 Add license agreement dialog 2014-07-13 11:40:47 -07:00
jp9000 f0cc386499 Implement status bar
The status bar now displays:
 - Auto-reconnect information (reconnecting and reconnect success)
 - Dropped frames (as well as percentage of total video frames)
 - Duration of session
 - CPU usage of the program
 - Kbp/s

The OBSBasic class is getting a bit big, so I separated out the
status bar code to its own class derived from QStatusBar.
2014-07-06 17:36:46 -07:00
jp9000 452e0695f4 UI: Add scene editing
So, scene editing was interesting (and by interesting I mean
excruciating).  I almost implemented 'manipulator' visuals (ala 3dsmax
for example), and used 3 modes for controlling position/rotation/size,
but in a 2D editing, it felt clunky, so I defaulted back to simply
click-and-drag for movement, and then took a similar though slightly
different looking approach for handling scaling and reszing.

I also added a number of menu item helpers related to positioning,
scaling, rotating, flipping, and resetting the transform back to
default.

There is also a new 'transform' dialog (accessible via menu) which will
allow you to manually edit every single transform variable of a scene
item directly if desired.

If a scene item does not have bounds active, pulling on the sides of a
source will cause it to resize it via base scale rather than by the
bounding box system (if the source resizes that scale will apply).  If
bounds are active, it will modify the bounding box only instead.

How a source scales when a bounding box is active depends on the type of
bounds being used.  You can set it to scale to the inner bounds, the
outer bounds, scale to bounds width only, scale to bounds height only,
and a setting to stretch to bounds (which forces a source to always draw
at the bounding box size rather than be affected by its internal size).
You can also set it to be used as a 'maximum' size, so that the source
doesn't necessarily get scaled unless it extends beyond the bounds.

Like in OBS1, objects will snap to the edges unless the control key is
pressed.  However, this will now happen even if the object is rotated or
oriented in any strange way.  Snapping will also occur when stretching
or changing the bounding box size.
2014-06-15 20:33:13 -07:00
BtbN 7b17f2e96b Update Qt5 usage in CMakeLists 2014-05-19 03:02:57 +02:00
jp9000 5ba8b09c9c Add help menu with log file uploading
Added github gist API uploading to the help menu to help make problems a
bit easier to debug in the future.  It's somewhat vital that this
functionality be implemented before any release in order to analyze any
given problem a user may be experiencing.
2014-05-18 17:44:10 -07:00
jp9000 345c70138e Add 'source selection' dialog
Add a 'source selection' dialog to replace the 'enter a name' dialog.
This new dialog allows you to make new instances of pre-existing sources
so that you can add a pre-existing source to a different scene, or in to
the same scene more than once.

Also started implementing locale.

Comtemplating switching to JSON-based locale later, so we can add things
like descriptions/disambiguation, and so we can use jansson's built-in
hash table when doing the string lookup.
2014-05-10 18:47:48 -07:00
jp9000 52746c2523 Add (temporary terrible) volume controls
- Add volume control

   These volume controls are basically nothing more than sliders.  They
   look terrible and hopefully will be as temporary as they are
   terrible.

 - Allow saving of specific non-user sources via obs_load_source and
   obs_save_source functions.

 - Save data of desktop/mic audio sources (sync data, volume data, etc),
   and load the data on startup.

 - Make it so that a scene is created by default if first time using the
   application.  On certain operating systems where supported, a default
   capture will be created.  Desktop capture on mac, particularly.  Not
   sure what to do about windows because monitor capture on windows 7 is
   completely terrible and is bad to start users off with.
2014-05-03 22:54:38 -07:00
BtbN 075820028f Improve bundle fixup 2014-04-13 11:05:46 -07:00
BtbN a31e938c2b Fix getting the X11 display with the Qt ui 2014-04-03 23:41:22 +02:00
jp9000 d9251f9e87 Add source properties window (very preliminary)
- Add a properties window for sources so that you can now actually edit
   the settings for sources.  Also, display the source by itself in the
   window (Note: not working on mac, and possibly not working on linux).

   When changing the settings for a source, it will call
   obs_source_update on that source when you have modified any values
   automatically.

 - Add a properties 'widget', eventually I want to turn this in to a
   regular nice properties view like you'd see in the designer, but
   right now it just uses a form layout in a QScrollArea with regular
   controls to display the properties.  It's clunky but works for the
   time being.

 - Make it so that swap chains and the main graphics subsystem will
   automatically use at least one backbuffer if none was specified

 - Fix bug where displays weren't added to the main display array

 - Make it so that you can get the properties of a source via the actual
   pointer of a source/encoder/output in addition to being able to look
   up properties via identifier.

 - When registering source types, check for required functions (wasn't
   doing it before).  getheight/getwidth should not be optional if it's
   a video source as well.

 - Add an RAII OBSObj wrapper to obs.hpp for non-reference-counted
   libobs pointers

 - Add an RAII OBSSignal wrapper to obs.hpp for libobs signals to
   automatically disconnect them on destruction

 - Move the "scale and center" calculation in window-basic-main.cpp to
   its own function and in its own source file

 - Add an 'update' callback to WASAPI audio sources
2014-03-23 01:07:54 -07:00