summaryrefslogtreecommitdiff
path: root/src/user/include/cxx/raleigh/widget.h
blob: de6c5a46e34e528708e9b54855d5c5e81bd8a710 (plain) (blame)
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
#ifndef RALEIGH_WIDGET_H
#define RALEIGH_WIDGET_H

namespace raleigh {
  class widget;
}

#include <raleigh/window.h>
#include <pland/syscall.h>
#include <raleigh/util.h>

namespace raleigh {
  class widget {
  public:
    coord size;

    //set by window class (or parent widget)
    window *w;
    coord window_offset;

    //fewest steps up that a widget can be redrawn without needing its parents
    //if a widget is opaque, it will set this to a pointer to itself, and then call
    //  notify_has_opaque_parent on any children, passing itself as an argument.
    //in notify_has_opaque_parent's handler, it should set this if it isn't already set,
    //  and then call notify_has_opaque_parent on any children (with the opaque parent).
    widget *closest_opaque;

    //called by window class (or parent widget)
    virtual void notify_window_change() = 0;
    virtual void paint(_pixel_t *pixbuf, uint32_t pitch) = 0;
    virtual bool try_handle_click(coord window_coords, enum mouse_packet::mouse_button click_type, bool up) = 0;
    virtual void notify_has_opaque_parent(widget *parent) = 0;
  };
}

#endif