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
|
/*
* Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
*
* 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; version 2 of the
* License.
*
* 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
*/
#pragma once
#include <mforms/base.h>
#include <mforms/view.h>
#include <base/geometry.h>
#include "cairo/cairo.h"
namespace mforms
{
class DrawBox;
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#ifndef SWIG
struct DrawBoxImplPtrs
{
bool (*create)(DrawBox *);
void (*set_needs_repaint)(DrawBox *);
void (*set_needs_repaint_area)(DrawBox *, int, int, int, int);//XXX Windows, Linux
void (*add)(DrawBox *, View *, Alignment alignment);
void (*remove)(DrawBox *, View *);
void (*move)(DrawBox *, View *, int x, int y);
};
struct MFORMS_EXPORT Accessible
{
public:
enum Role
{
RoleNone,
Client,
Pane,
Link,
List,
ListItem,
PushButton,
StaticText,
Text,
Outline,
OutlineButton,
OutlineItem
};
virtual ~Accessible() {};
// This each child class should implement it's own way to get the
// accessible name and role
virtual std::string get_acc_name() = 0;
virtual Role get_acc_role() = 0;
// The rest of the accessible methods are optional on the child
// classes, they must implement them as needed
virtual std::string get_acc_description() { return ""; }
virtual std::string get_acc_value() { return ""; }
virtual int get_acc_child_count() { return 0; }
virtual Accessible* get_acc_child(int index) { return NULL; }
virtual base::Rect get_acc_bounds() { return base::Rect(); }
virtual Accessible* hit_test(int x, int y) { return NULL; }
virtual std::string get_acc_default_action() { return ""; }
virtual void do_default_action() {};
};
#endif
#endif
class MFORMS_EXPORT DrawBox : public View, public Accessible
{
public:
DrawBox();
/** Adds a child view to the box. There's no layout support here. Use a Box if you need that.
* The subview is placed and size according to what is specified for it. */
void add(View *view, Alignment alignment);
/** Removal of a child view. */
void remove(View *view);
/** Move the given child window to a fixed position. Automatically sets the alignment to NoAlign. */
void move(View *child, int x, int y);
virtual void set_layout_dirty(bool value);
void set_padding(int left, int top, int right, int bottom);
void set_needs_repaint();
void set_needs_repaint_area(int x, int y, int w, int h);
#ifndef DOXYGEN_SHOULD_SKIP_THIS
virtual void get_layout_size(int* w, int* h);
#ifndef SWIG
virtual void repaint(cairo_t *cr, int x, int y, int w, int h) {}
virtual void cancel_operation() {};
virtual std::string get_acc_name() { return get_name(); }
virtual base::Rect get_acc_bounds(){ return base::Rect(get_x(), get_y(), get_width(), get_height());}
virtual Role get_acc_role() { return mforms::Accessible::RoleNone; }
#endif
#endif
protected:
DrawBoxImplPtrs *_drawbox_impl;
};
};
|