⛏️ index : haiku.git

#ifndef _VIEW_BUFFER_H_
#define _VIEW_BUFFER_H_

#include <SupportDefs.h>
#include <View.h>

typedef void (*resize_callback)(int32 width, int32 height, void *data);

class ViewBuffer : public BView {
public:
							ViewBuffer(BRect frame);
virtual						~ViewBuffer();

virtual	void				FrameResized(float new_width, float new_height);
		void				SetResizeCallback(resize_callback callback, void *data);
		status_t			GetSize(int32 *width, int32 *height);

		uint8				ForegroundColor(uint8 attr);
		uint8				BackgroundColor(uint8 attr);
		rgb_color			GetPaletteEntry(uint8 index);

		void				PutGlyph(int32 x, int32 y, uint8 glyph, uint8 attr);
		void				FillGlyph(int32 x, int32 y, int32 width, int32 height, uint8 glyph, uint8 attr);
		void				RenderGlyph(int32 x, int32 y, uint8 glyph, uint8 attr);

virtual	void				Draw(BRect updateRect);

		void				DrawCursor(int32 x, int32 y);
		void				MoveCursor(int32 x, int32 y);

		void				Blit(int32 srcx, int32 srcy, int32 width, int32 height, int32 destx, int32 desty);
		void				Clear(uint8 attr);

private:
		void				_RenderGlyph(int32 x, int32 y, const char* string, uint8 attr, bool fill = true);

		int32				fColumns;
		int32				fRows;

		uint16*				fGlyphGrid;

		resize_callback		fResizeCallback;
		void				*fResizeCallbackData;
		int32				fCursorX;
		int32				fCursorY;

		rgb_color			fPalette[8];
};

#endif