diff options
Diffstat (limited to 'src/emu/rendlay.h')
-rw-r--r-- | src/emu/rendlay.h | 446 |
1 files changed, 223 insertions, 223 deletions
diff --git a/src/emu/rendlay.h b/src/emu/rendlay.h index d169a860602..b8c6c8cf41b 100644 --- a/src/emu/rendlay.h +++ b/src/emu/rendlay.h @@ -20,14 +20,14 @@ enum item_layer { - ITEM_LAYER_FIRST = 0, - ITEM_LAYER_BACKDROP = ITEM_LAYER_FIRST, - ITEM_LAYER_SCREEN, - ITEM_LAYER_OVERLAY, - ITEM_LAYER_BEZEL, - ITEM_LAYER_CPANEL, - ITEM_LAYER_MARQUEE, - ITEM_LAYER_MAX + ITEM_LAYER_FIRST = 0, + ITEM_LAYER_BACKDROP = ITEM_LAYER_FIRST, + ITEM_LAYER_SCREEN, + ITEM_LAYER_OVERLAY, + ITEM_LAYER_BEZEL, + ITEM_LAYER_CPANEL, + ITEM_LAYER_MARQUEE, + ITEM_LAYER_MAX }; DECLARE_ENUM_OPERATORS(item_layer); @@ -43,140 +43,140 @@ DECLARE_ENUM_OPERATORS(item_layer); // a layout_element is a single named element, which may have multiple components class layout_element { - friend class simple_list<layout_element>; + friend class simple_list<layout_element>; public: - // construction/destruction - layout_element(running_machine &machine, xml_data_node &elemnode, const char *dirname); - virtual ~layout_element(); - - // getters - layout_element *next() const { return m_next; } - const char *name() const { return m_name; } - running_machine &machine() const { return m_machine; } - int default_state() const { return m_defstate; } - int maxstate() const { return m_maxstate; } - render_texture *state_texture(int state); + // construction/destruction + layout_element(running_machine &machine, xml_data_node &elemnode, const char *dirname); + virtual ~layout_element(); + + // getters + layout_element *next() const { return m_next; } + const char *name() const { return m_name; } + running_machine &machine() const { return m_machine; } + int default_state() const { return m_defstate; } + int maxstate() const { return m_maxstate; } + render_texture *state_texture(int state); private: - // a component represents an image, rectangle, or disk in an element - class component - { - friend class layout_element; - friend class simple_list<component>; - - public: - // construction/destruction - component(running_machine &machine, xml_data_node &compnode, const char *dirname); - ~component(); - - // getters - component *next() const { return m_next; } - const render_bounds &bounds() const { return m_bounds; } - - // operations - void draw(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); - - private: - // component types - enum component_type - { - CTYPE_INVALID = 0, - CTYPE_IMAGE, - CTYPE_RECT, - CTYPE_DISK, - CTYPE_TEXT, - CTYPE_LED7SEG, - CTYPE_LED8SEG, - CTYPE_LED14SEG, - CTYPE_LED16SEG, - CTYPE_LED14SEGSC, - CTYPE_LED16SEGSC, - CTYPE_DOTMATRIX, - CTYPE_DOTMATRIX5DOT, - CTYPE_DOTMATRIXDOT, - CTYPE_SIMPLECOUNTER, - CTYPE_REEL, - CTYPE_MAX - }; - - // helpers - void draw_rect(bitmap_argb32 &dest, const rectangle &bounds); - void draw_disk(bitmap_argb32 &dest, const rectangle &bounds); - void draw_text(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds); - void draw_simplecounter(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); - void draw_reel(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); - void draw_beltreel(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); - void load_bitmap(); - void load_reel_bitmap(int number); - void draw_led7seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); - void draw_led8seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); - void draw_led14seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); - void draw_led14segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern); - void draw_led16seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); - void draw_led16segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern); - void draw_dotmatrix(int dots,bitmap_argb32 &dest, const rectangle &bounds, int pattern); - void draw_segment_horizontal_caps(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, int caps, rgb_t color); - void draw_segment_horizontal(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, rgb_t color); - void draw_segment_vertical_caps(bitmap_argb32 &dest, int miny, int maxy, int midx, int width, int caps, rgb_t color); - void draw_segment_vertical(bitmap_argb32 &dest, int miny, int maxy, int midx, int width, rgb_t color); - void draw_segment_diagonal_1(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); - void draw_segment_diagonal_2(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); - void draw_segment_decimal(bitmap_argb32 &dest, int midx, int midy, int width, rgb_t color); - void draw_segment_comma(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); - void apply_skew(bitmap_argb32 &dest, int skewwidth); - - #define MAX_BITMAPS 32 - - // internal state - component * m_next; // link to next component - component_type m_type; // type of component - int m_state; // state where this component is visible (-1 means all states) - render_bounds m_bounds; // bounds of the element - render_color m_color; // color of the element - astring m_string; // string for text components - int m_digits; // number of digits for simple counters - int m_textalign; // text alignment to box - bitmap_argb32 m_bitmap[MAX_BITMAPS]; // source bitmap for images - astring m_dirname; // directory name of image file (for lazy loading) - auto_pointer<emu_file> m_file[MAX_BITMAPS]; // file object for reading image/alpha files - astring m_imagefile[MAX_BITMAPS]; // name of the image file (for lazy loading) - astring m_alphafile[MAX_BITMAPS]; // name of the alpha file (for lazy loading) - bool m_hasalpha[MAX_BITMAPS]; // is there any alpha component present? - - // stuff for fruit machine reels - // basically made up of multiple text strings / gfx - int m_numstops; - astring m_stopnames[MAX_BITMAPS]; - int m_stateoffset; - int m_reelreversed; - int m_numsymbolsvisible; - int m_beltreel; - }; - - // a texture encapsulates a texture for a given element in a given state - class texture - { - public: - texture(); - ~texture(); - - layout_element * m_element; // pointer back to the element - render_texture * m_texture; // texture for this state - int m_state; // associated state number - }; - - // internal helpers - static void element_scale(bitmap_argb32 &dest, bitmap_argb32 &source, const rectangle &sbounds, void *param); - - // internal state - layout_element * m_next; // link to next element - running_machine & m_machine; // reference to the owning machine - astring m_name; // name of this element - simple_list<component> m_complist; // list of components - int m_defstate; // default state of this element - int m_maxstate; // maximum state value for all components - dynamic_array<texture> m_elemtex; // array of element textures used for managing the scaled bitmaps + // a component represents an image, rectangle, or disk in an element + class component + { + friend class layout_element; + friend class simple_list<component>; + + public: + // construction/destruction + component(running_machine &machine, xml_data_node &compnode, const char *dirname); + ~component(); + + // getters + component *next() const { return m_next; } + const render_bounds &bounds() const { return m_bounds; } + + // operations + void draw(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); + + private: + // component types + enum component_type + { + CTYPE_INVALID = 0, + CTYPE_IMAGE, + CTYPE_RECT, + CTYPE_DISK, + CTYPE_TEXT, + CTYPE_LED7SEG, + CTYPE_LED8SEG_GTS1, + CTYPE_LED14SEG, + CTYPE_LED16SEG, + CTYPE_LED14SEGSC, + CTYPE_LED16SEGSC, + CTYPE_DOTMATRIX, + CTYPE_DOTMATRIX5DOT, + CTYPE_DOTMATRIXDOT, + CTYPE_SIMPLECOUNTER, + CTYPE_REEL, + CTYPE_MAX + }; + + // helpers + void draw_rect(bitmap_argb32 &dest, const rectangle &bounds); + void draw_disk(bitmap_argb32 &dest, const rectangle &bounds); + void draw_text(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds); + void draw_simplecounter(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); + void draw_reel(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); + void draw_beltreel(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state); + void load_bitmap(); + void load_reel_bitmap(int number); + void draw_led7seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); + void draw_led8seg_gts1(bitmap_argb32 &dest, const rectangle &bounds, int pattern); + void draw_led14seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); + void draw_led14segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern); + void draw_led16seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern); + void draw_led16segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern); + void draw_dotmatrix(int dots,bitmap_argb32 &dest, const rectangle &bounds, int pattern); + void draw_segment_horizontal_caps(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, int caps, rgb_t color); + void draw_segment_horizontal(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, rgb_t color); + void draw_segment_vertical_caps(bitmap_argb32 &dest, int miny, int maxy, int midx, int width, int caps, rgb_t color); + void draw_segment_vertical(bitmap_argb32 &dest, int miny, int maxy, int midx, int width, rgb_t color); + void draw_segment_diagonal_1(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); + void draw_segment_diagonal_2(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); + void draw_segment_decimal(bitmap_argb32 &dest, int midx, int midy, int width, rgb_t color); + void draw_segment_comma(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color); + void apply_skew(bitmap_argb32 &dest, int skewwidth); + + #define MAX_BITMAPS 32 + + // internal state + component * m_next; // link to next component + component_type m_type; // type of component + int m_state; // state where this component is visible (-1 means all states) + render_bounds m_bounds; // bounds of the element + render_color m_color; // color of the element + astring m_string; // string for text components + int m_digits; // number of digits for simple counters + int m_textalign; // text alignment to box + bitmap_argb32 m_bitmap[MAX_BITMAPS]; // source bitmap for images + astring m_dirname; // directory name of image file (for lazy loading) + auto_pointer<emu_file> m_file[MAX_BITMAPS]; // file object for reading image/alpha files + astring m_imagefile[MAX_BITMAPS]; // name of the image file (for lazy loading) + astring m_alphafile[MAX_BITMAPS]; // name of the alpha file (for lazy loading) + bool m_hasalpha[MAX_BITMAPS]; // is there any alpha component present? + + // stuff for fruit machine reels + // basically made up of multiple text strings / gfx + int m_numstops; + astring m_stopnames[MAX_BITMAPS]; + int m_stateoffset; + int m_reelreversed; + int m_numsymbolsvisible; + int m_beltreel; + }; + + // a texture encapsulates a texture for a given element in a given state + class texture + { + public: + texture(); + ~texture(); + + layout_element * m_element; // pointer back to the element + render_texture * m_texture; // texture for this state + int m_state; // associated state number + }; + + // internal helpers + static void element_scale(bitmap_argb32 &dest, bitmap_argb32 &source, const rectangle &sbounds, void *param); + + // internal state + layout_element * m_next; // link to next element + running_machine & m_machine; // reference to the owning machine + astring m_name; // name of this element + simple_list<component> m_complist; // list of components + int m_defstate; // default state of this element + int m_maxstate; // maximum state value for all components + dynamic_array<texture> m_elemtex; // array of element textures used for managing the scaled bitmaps }; @@ -185,83 +185,83 @@ private: // a layout_view encapsulates a named list of items class layout_view { - friend class simple_list<layout_view>; + friend class simple_list<layout_view>; public: - // an item is a single backdrop, screen, overlay, bezel, cpanel, or marquee item - class item - { - friend class layout_view; - friend class simple_list<item>; - - public: - // construction/destruction - item(running_machine &machine, xml_data_node &itemnode, simple_list<layout_element> &elemlist); - virtual ~item(); - - // getters - item *next() const { return m_next; } - layout_element *element() const { return m_element; } - screen_device *screen() { return m_screen; } - const render_bounds &bounds() const { return m_bounds; } - const render_color &color() const { return m_color; } - int orientation() const { return m_orientation; } - render_container *screen_container(running_machine &machine) const; - bool has_input() const { return bool(m_input_tag); } - const char *input_tag_and_mask(ioport_value &mask) const { mask = m_input_mask; return m_input_tag; } - - // fetch state based on configured source - int state() const; - - private: - // internal state - item * m_next; // link to next item - layout_element * m_element; // pointer to the associated element (non-screens only) - astring m_output_name; // name of this item - astring m_input_tag; // input tag of this item - ioport_value m_input_mask; // input mask of this item - screen_device * m_screen; // pointer to screen - int m_orientation; // orientation of this item - render_bounds m_bounds; // bounds of the item - render_bounds m_rawbounds; // raw (original) bounds of the item - render_color m_color; // color of the item - }; - - // construction/destruction - layout_view(running_machine &machine, xml_data_node &viewnode, simple_list<layout_element> &elemlist); - virtual ~layout_view(); - - // getters - layout_view *next() const { return m_next; } - item *first_item(item_layer layer) const; - const char *name() const { return m_name; } - const render_screen_list &screens() const { return m_screens; } - bool layer_enabled(item_layer layer) const { return m_layenabled[layer]; } - - // - bool has_art() const { return (m_backdrop_list.count() + m_overlay_list.count() + m_bezel_list.count() + m_cpanel_list.count() + m_marquee_list.count() != 0); } - float effective_aspect(render_layer_config config) const { return (config.zoom_to_screen() && m_screens.count() != 0) ? m_scraspect : m_aspect; } - - // operations - void recompute(render_layer_config layerconfig); + // an item is a single backdrop, screen, overlay, bezel, cpanel, or marquee item + class item + { + friend class layout_view; + friend class simple_list<item>; + + public: + // construction/destruction + item(running_machine &machine, xml_data_node &itemnode, simple_list<layout_element> &elemlist); + virtual ~item(); + + // getters + item *next() const { return m_next; } + layout_element *element() const { return m_element; } + screen_device *screen() { return m_screen; } + const render_bounds &bounds() const { return m_bounds; } + const render_color &color() const { return m_color; } + int orientation() const { return m_orientation; } + render_container *screen_container(running_machine &machine) const; + bool has_input() const { return bool(m_input_tag); } + const char *input_tag_and_mask(ioport_value &mask) const { mask = m_input_mask; return m_input_tag; } + + // fetch state based on configured source + int state() const; + + private: + // internal state + item * m_next; // link to next item + layout_element * m_element; // pointer to the associated element (non-screens only) + astring m_output_name; // name of this item + astring m_input_tag; // input tag of this item + ioport_value m_input_mask; // input mask of this item + screen_device * m_screen; // pointer to screen + int m_orientation; // orientation of this item + render_bounds m_bounds; // bounds of the item + render_bounds m_rawbounds; // raw (original) bounds of the item + render_color m_color; // color of the item + }; + + // construction/destruction + layout_view(running_machine &machine, xml_data_node &viewnode, simple_list<layout_element> &elemlist); + virtual ~layout_view(); + + // getters + layout_view *next() const { return m_next; } + item *first_item(item_layer layer) const; + const char *name() const { return m_name; } + const render_screen_list &screens() const { return m_screens; } + bool layer_enabled(item_layer layer) const { return m_layenabled[layer]; } + + // + bool has_art() const { return (m_backdrop_list.count() + m_overlay_list.count() + m_bezel_list.count() + m_cpanel_list.count() + m_marquee_list.count() != 0); } + float effective_aspect(render_layer_config config) const { return (config.zoom_to_screen() && m_screens.count() != 0) ? m_scraspect : m_aspect; } + + // operations + void recompute(render_layer_config layerconfig); private: - // internal state - layout_view * m_next; // pointer to next layout in the list - astring m_name; // name of the layout - float m_aspect; // X/Y of the layout - float m_scraspect; // X/Y of the screen areas - render_screen_list m_screens; // list of active screens - render_bounds m_bounds; // computed bounds of the view - render_bounds m_scrbounds; // computed bounds of the screens within the view - render_bounds m_expbounds; // explicit bounds of the view - bool m_layenabled[ITEM_LAYER_MAX]; // is this layer enabled? - simple_list<item> m_backdrop_list; // list of backdrop items - simple_list<item> m_screen_list; // list of screen items - simple_list<item> m_overlay_list; // list of overlay items - simple_list<item> m_bezel_list; // list of bezel items - simple_list<item> m_cpanel_list; // list of marquee items - simple_list<item> m_marquee_list; // list of marquee items + // internal state + layout_view * m_next; // pointer to next layout in the list + astring m_name; // name of the layout + float m_aspect; // X/Y of the layout + float m_scraspect; // X/Y of the screen areas + render_screen_list m_screens; // list of active screens + render_bounds m_bounds; // computed bounds of the view + render_bounds m_scrbounds; // computed bounds of the screens within the view + render_bounds m_expbounds; // explicit bounds of the view + bool m_layenabled[ITEM_LAYER_MAX]; // is this layer enabled? + simple_list<item> m_backdrop_list; // list of backdrop items + simple_list<item> m_screen_list; // list of screen items + simple_list<item> m_overlay_list; // list of overlay items + simple_list<item> m_bezel_list; // list of bezel items + simple_list<item> m_cpanel_list; // list of marquee items + simple_list<item> m_marquee_list; // list of marquee items }; @@ -270,23 +270,23 @@ private: // a layout_file consists of a list of elements and a list of views class layout_file { - friend class simple_list<layout_file>; + friend class simple_list<layout_file>; public: - // construction/destruction - layout_file(running_machine &machine, xml_data_node &rootnode, const char *dirname); - virtual ~layout_file(); + // construction/destruction + layout_file(running_machine &machine, xml_data_node &rootnode, const char *dirname); + virtual ~layout_file(); - // getters - layout_file *next() const { return m_next; } - layout_element *first_element() const { return m_elemlist.first(); } - layout_view *first_view() const { return m_viewlist.first(); } + // getters + layout_file *next() const { return m_next; } + layout_element *first_element() const { return m_elemlist.first(); } + layout_view *first_view() const { return m_viewlist.first(); } private: - // internal state - layout_file * m_next; // pointer to the next file in the list - simple_list<layout_element> m_elemlist; // list of shared layout elements - simple_list<layout_view> m_viewlist; // list of views + // internal state + layout_file * m_next; // pointer to the next file in the list + simple_list<layout_element> m_elemlist; // list of shared layout elements + simple_list<layout_view> m_viewlist; // list of views }; |