/usr/include/gnash/asobj/InteractiveObject.h is in gnash-dev 0.8.11~git20160109-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | //
// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
// Free Software Foundation, Inc
//
// 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, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#ifndef GNASH_INTERACTIVE_DISPLAY_OBJECT_H
#define GNASH_INTERACTIVE_DISPLAY_OBJECT_H
#include <vector>
#include <cassert>
#include "DisplayObject.h" // for inheritance
#include "log.h"
#include "as_object.h" // for getRoot()
namespace gnash {
class StaticText;
namespace SWF {
class TextRecord;
}
}
namespace gnash {
/// The base class for interactive objects.
//
/// Objects of type InteractiveObject can receive focus, mouse events,
/// and key events for user interaction.
//
/// Derived classes include TextField, Button, and MovieClip.
class InteractiveObject : public DisplayObject
{
public:
InteractiveObject(as_object* object, DisplayObject* parent)
:
DisplayObject(getRoot(*object), object, parent)
{
// It's a bit too late for this assertion as we've already
// deferenced it. All InteractiveObjects are AS-referenceable,
// so they must have an object.
assert(object);
}
virtual ~InteractiveObject() {}
/// Render this InteractiveObject
virtual void display(Renderer& renderer, const Transform& xform) = 0;
/// Whether the DisplayObject can handle a mouse event.
//
/// @return true if the DisplayObject can handle mouse
/// events
virtual bool mouseEnabled() const = 0;
/// ActionScript property of Buttons and MovieClips altering mouse handling
virtual bool trackAsMenu() {
return false;
}
/// Allow extraction of static text.
//
/// Default returns 0, implemented only for DefineText though
/// DisplayObject.
virtual StaticText* getStaticText(std::vector<const SWF::TextRecord*>&,
size_t&) {
return nullptr;
}
/// Returns local, untransformed bounds of this DisplayObject in TWIPS
//
/// Container DisplayObjects (sprite and buttons) return the composite
/// bounds of all their children, appropriately transformed with
/// their local SWFMatrix.
virtual SWFRect getBounds() const = 0;
/// \brief
/// Return the topmost entity covering the given point
/// and enabled to receive mouse events.
//
/// Return NULL if no "active" entity is found under the pointer.
///
/// Coordinates of the point are given in parent's coordinate space.
/// This means that in order to convert the point to the local coordinate
/// space you need to apply an inverse transformation using this
/// DisplayObject SWFMatrix. Example:
///
/// point p(x,y);
/// getMatrix().transform_by_inverse(p);
/// -- p is now in local coordinates
///
/// Don't blame me for this mess, I'm just trying to document the existing
/// functions ... --strk
///
/// @param x
/// X ordinate of the pointer, in parent's coordinate space.
///
/// @param y
/// Y ordinate of the pointer, in parent's coordiante space.
///
virtual InteractiveObject* topmostMouseEntity(std::int32_t /*x*/,
std::int32_t /*y*/) = 0;
/// Called whenever a mouse event affects this InteractiveObject.
//
/// All InteractiveObjects (Button, MovieClip, TextField) can handle
/// mouse input, so must override this function.
virtual void mouseEvent(const event_id& id) = 0;
/// Return true if the given point falls in this DisplayObject's shape
//
/// Point coordinates are in world TWIPS
///
/// The default implementation warns about a missing
/// override and invokes pointInBounds().
///
///
virtual bool pointInShape(std::int32_t x, std::int32_t y) const
{
log_error("Character %s did not override pointInShape() - "
"using pointInBounds() instead", typeid(*this).name());
return pointInBounds(x, y);
}
void add_invalidated_bounds(InvalidatedRanges& ranges, bool force) = 0;
};
} // namespace gnash
#endif
// Local Variables:
// mode: C++
// indent-tabs-mode: t
// End:
|