/** * PANDA 3D SOFTWARE * Copyright (c) Carnegie Mellon University. All rights reserved. * * All use of this software is subject to the terms of the revised BSD * license. You should have received a copy of this license along * with this source code in a file named "LICENSE." * * @file windowFramework.h * @author drose * @date 2002-04-02 */ #ifndef WINDOWFRAMEWORK_H #define WINDOWFRAMEWORK_H #include "pandabase.h" #include "nodePath.h" #include "camera.h" #include "graphicsOutput.h" #include "graphicsWindow.h" #include "animControlCollection.h" #include "trackball.h" #include "filename.h" #include "frameRateMeter.h" #include "sceneGraphAnalyzerMeter.h" #include "pointerTo.h" #include "partGroup.h" #include "pvector.h" #include "typedWritableReferenceCount.h" #include "loaderOptions.h" #include "pgSliderBar.h" #include "textNode.h" #include "eventHandler.h" #include "genericAsyncTask.h" class PandaFramework; class AmbientLight; class DirectionalLight; class GraphicsEngine; class GraphicsPipe; class DisplayRegion; /** * This encapsulates the data that is normally associated with a single * window, or with a single display region within a window. (In the case * where a window has been subdivided with split_window(), there may be * multiple WindowFrameworks objects that share the same GraphicsOutput * pointer, but reference different display regions within that window). */ class EXPCL_FRAMEWORK WindowFramework : public TypedWritableReferenceCount { protected: WindowFramework(PandaFramework *panda_framework); WindowFramework(const WindowFramework ©, DisplayRegion *display_region); public: virtual ~WindowFramework(); protected: GraphicsOutput *open_window(const WindowProperties &props, int flags, GraphicsEngine *engine, GraphicsPipe *pipe, GraphicsStateGuardian *gsg = nullptr, const FrameBufferProperties &fbprops = FrameBufferProperties::get_default()); void close_window(); public: INLINE PandaFramework *get_panda_framework() const; INLINE GraphicsWindow *get_graphics_window() const; INLINE GraphicsOutput *get_graphics_output() const; NodePath get_camera_group(); INLINE int get_num_cameras() const; INLINE Camera *get_camera(int n) const; INLINE DisplayRegion *get_display_region_2d() const; INLINE DisplayRegion *get_display_region_3d() const; NodePath get_render(); NodePath get_render_2d(); NodePath get_aspect_2d(); NodePath get_pixel_2d(); NodePath get_mouse(); NodePath get_button_thrower(); void enable_keyboard(); void setup_trackball(); void center_trackball(const NodePath &object); bool load_models(const NodePath &parent, int argc, char *argv[], int first_arg = 1); bool load_models(const NodePath &parent, const pvector &files); NodePath load_model(const NodePath &parent, Filename filename); NodePath load_default_model(const NodePath &parent); void loop_animations(int hierarchy_match_flags = PartGroup::HMF_ok_part_extra | PartGroup::HMF_ok_anim_extra); void stagger_animations(); void next_anim_control(); void set_anim_controls(bool enable); INLINE bool get_anim_controls() const; void adjust_dimensions(); enum BackgroundType { BT_other = 0, BT_default, BT_black, BT_gray, BT_white, BT_none }; enum SplitType { ST_default, ST_horizontal, ST_vertical, }; WindowFramework *split_window(SplitType split_type = ST_default); void set_wireframe(bool enable, bool filled=false); void set_texture(bool enable); void set_two_sided(bool enable); void set_one_sided_reverse(bool enable); void set_lighting(bool enable); void set_perpixel(bool enable); void set_background_type(BackgroundType type); INLINE bool get_wireframe() const; INLINE bool get_wireframe_filled() const; INLINE bool get_texture() const; INLINE bool get_two_sided() const; INLINE bool get_one_sided_reverse() const; INLINE bool get_lighting() const; INLINE bool get_perpixel() const; INLINE BackgroundType get_background_type() const; static TextFont *get_shuttle_controls_font(); NodePath make_camera(); protected: void setup_lights(); private: PT(PandaNode) load_image_as_model(const Filename &filename); void create_anim_controls(); void destroy_anim_controls(); void update_anim_controls(); void setup_shuttle_button(const std::string &label, int index, EventHandler::EventCallbackFunction *func); void back_button(); void pause_button(); void play_button(); void forward_button(); static AsyncTask::DoneStatus st_update_anim_controls(GenericAsyncTask *task, void *data); static void st_back_button(const Event *, void *data); static void st_pause_button(const Event *, void *data); static void st_play_button(const Event *, void *data); static void st_forward_button(const Event *, void *data); private: PandaFramework *_panda_framework; PT(GraphicsOutput) _window; PT(DisplayRegion) _display_region_2d; PT(DisplayRegion) _display_region_3d; NodePath _camera_group; typedef pvector< PT(Camera) > Cameras; Cameras _cameras; NodePath _render; NodePath _render_2d; NodePath _aspect_2d; NodePath _pixel_2d; AnimControlCollection _anim_controls; bool _anim_controls_enabled; int _anim_index; NodePath _anim_controls_group; PT(PGSliderBar) _anim_slider; PT(PGSliderBar) _play_rate_slider; PT(TextNode) _frame_number; PT(GenericAsyncTask) _update_anim_controls_task; NodePath _mouse; NodePath _button_thrower; PT(Trackball) _trackball; NodePath _alight; NodePath _dlight; bool _got_keyboard; bool _got_trackball; bool _got_lights; bool _wireframe_enabled; bool _wireframe_filled; bool _texture_enabled; bool _two_sided_enabled; bool _one_sided_reverse_enabled; bool _lighting_enabled; bool _perpixel_enabled; PT(FrameRateMeter) _frame_rate_meter; PT(SceneGraphAnalyzerMeter) _scene_graph_analyzer_meter; BackgroundType _background_type; static PT(TextFont) _shuttle_controls_font; public: static TypeHandle get_class_type() { return _type_handle; } static void init_type() { TypedWritableReferenceCount::init_type(); register_type(_type_handle, "WindowFramework", TypedWritableReferenceCount::get_class_type()); } virtual TypeHandle get_type() const { return get_class_type(); } virtual TypeHandle force_init_type() {init_type(); return get_class_type();} private: static TypeHandle _type_handle; friend class PandaFramework; }; #include "windowFramework.I" #endif