亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? grbeos.cpp

?? Demo for Free type 2.2.1
?? CPP
字號:
/*******************************************************************
 *
 *  grbeos.c  graphics driver for BeOS platform.              0.1
 *
 *  This is the driver for displaying inside a window under BeOS,
 *  used by the graphics utility of the FreeType test suite.
 *
 *  Written by Michael Pfeiffer.
 *  Copyright 2001 by Michael Pfeiffer
 *
 *  This file is part of the FreeType project, and may only be used
 *  modified and distributed under the terms of the FreeType project
 *  license, LICENSE.TXT. By continuing to use, modify or distribute
 *  this file you indicate that you have read the license and
 *  understand and accept it fully.
 *
 ******************************************************************/

#include <be/app/Application.h>
#include <be/app/MessageQueue.h>
#include <be/interface/InterfaceDefs.h>
#include <be/interface/Window.h>
#include <be/interface/View.h>
#include <be/interface/Bitmap.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <grobjs.h>
#include <grdevice.h>

#include "grbeos.h"


/* logging facility */
#include <stdarg.h>

#define  DEBUG

#ifdef DEBUG
#define LOG(x)  LogMessage##x
#else
#define LOG(x)  /* empty */
#endif

#ifdef DEBUG
 static void  LogMessage( const char*  fmt, ... )
 {
   va_list  ap;

   va_start( ap, fmt );
   vfprintf( stderr, fmt, ap );
   va_end( ap );
 }
#endif

 typedef struct  _Translator
 {
   int32   beoskey;
grKey   grkey;

 } Translator;

 static
 Translator  key_translators[] =
 {
   { B_BACKSPACE,   grKeyBackSpace },
   { B_TAB,         grKeyTab       },
   { B_ENTER,       grKeyReturn    },
   { B_ESCAPE,      grKeyEsc       },
   { B_HOME,        grKeyHome      },
   { B_LEFT_ARROW,  grKeyLeft      },
   { B_UP_ARROW,    grKeyUp        },
   { B_RIGHT_ARROW, grKeyRight     },
   { B_DOWN_ARROW,  grKeyDown      },
   { B_PAGE_UP,     grKeyPageUp    },
   { B_PAGE_DOWN,   grKeyPageDown  },
   { B_END,         grKeyEnd       }
 };

 static
 Translator  fkey_translators[] =
 {
   { B_F1_KEY,      grKeyF1        },
   { B_F2_KEY,      grKeyF2        },
   { B_F3_KEY,      grKeyF3        },
   { B_F4_KEY,      grKeyF4        },
   { B_F5_KEY,      grKeyF5        },
   { B_F6_KEY,      grKeyF6        },
   { B_F7_KEY,      grKeyF7        },
   { B_F8_KEY,      grKeyF8        },
   { B_F9_KEY,      grKeyF9        },
   { B_F10_KEY,     grKeyF10       },
   { B_F11_KEY,     grKeyF11       },
   { B_F12_KEY,     grKeyF12       }
 };

 static Translator* find_key(int32 key, Translator t[], int size) {
   for (int i = 0; i < size; i++) {
     if (t[i].beoskey == key) { 
     	return &t[i];
     }
   }
   return NULL;
 }

static const grPixelMode  pixel_modes[] =
{
	gr_pixel_mode_mono,
	gr_pixel_mode_gray
//	gr_pixel_mode_rgb565,
//	gr_pixel_mode_rgb32,
};

class Window;

typedef struct grBeOSSurface_ 
{
  grSurface root;
  Window*   window;
} grBeOSSurface;

class Window : public BWindow {
 private:
  grBeOSSurface* _surface;
  BBitmap*       _offscreen;
  BBitmap*       _bitmap;
  BMessageQueue  _event_queue;
  sem_id         _locker;
  
  class View : public BView {
    BBitmap*       _offscreen;
    BMessageQueue* _event_queue;
    sem_id         _locker;
    
    public:
     View(BBitmap* offscreen, BMessageQueue* event_queue, sem_id locker, BRect r);
     void Draw(BRect r);
     void KeyDown(const char *bytes, int32 numBytes);
  };
  View* _view;
  
 public:
  Window(grBeOSSurface* surface, grBitmap* bitmap);
  ~Window();

  void Refresh(int x, int y, int w, int h);
  int listen_event(int event_mask, grEvent* grevent);
  
  static grSurface*     init_surface(grSurface* surface, grBitmap* bitmap);
  static void           done_surface(grSurface* surface);
  static void           refresh_rectangle(grSurface* surface, int x, int y, int w, int h);
  static void           set_title(grSurface* surface, const char* title);
  static int            listen_event(grSurface* surface, int event_mask, grEvent* grevent);
};

static int init_device();
static void done_device(void);

grDevice  gr_beos_device =
{
  sizeof( grBeOSSurface ),
  "beos",

  init_device,
  done_device,

  (grDeviceInitSurfaceFunc) Window::init_surface,

  0,
  0
};

static int init_device() {
  gr_beos_device.num_pixel_modes = 2;
  gr_beos_device.pixel_modes     = (grPixelMode*) pixel_modes;
  new BApplication("application/x.mp.freetype.test");
  return 0;
}

static void done_device(void) {
  if (be_app) {
    delete be_app;
    be_app = NULL;
  }
}


Window::View::View(BBitmap* offscreen, BMessageQueue* event_queue, sem_id locker, BRect r) :
 BView(r, "", B_FOLLOW_LEFT_RIGHT, B_WILL_DRAW),
 _offscreen(offscreen),
 _event_queue(event_queue),
 _locker(locker) {
 SetViewColor(B_TRANSPARENT_COLOR);
}

void Window::View::Draw(BRect r) {
  DrawBitmap(_offscreen);
}

void Window::View::KeyDown(const char *bytes, int32 numBytes) {
  BMessage* m = Window()->CurrentMessage();
  int32 key;
  if (B_OK == m->FindInt32("key", &key)) {
    Translator* t = NULL;
    if (numBytes == 1) {
	  if (*bytes == B_FUNCTION_KEY) {
        t = find_key(key, fkey_translators, sizeof(fkey_translators)/sizeof(Translator));
      } else {
        t = find_key(*bytes, key_translators, sizeof(key_translators)/sizeof(Translator)); 
      }
    }
    if (t || numBytes == 1) {
	  _event_queue->Lock();
	  if (_event_queue->IsEmpty()) release_sem(_locker);
	  _event_queue->AddMessage(new BMessage(t ? t->grkey : *bytes));
	  _event_queue->Unlock();
	  return;
	}
  } 
  BView::KeyDown(bytes, numBytes);  
}

int Window::listen_event(int event_mask, grEvent* grevent) {
  acquire_sem(_locker);
  _event_queue.Lock();
  BMessage* m = _event_queue.NextMessage();
  if (!_event_queue.IsEmpty()) release_sem(_locker);
  _event_queue.Unlock();
  grevent->type = gr_key_down;
  grevent->key = (grKey)m->what;
  delete m;
  return 0;
}

Window::Window(grBeOSSurface* surface, grBitmap* bitmap) :
 BWindow(BRect(20, 20, 100, 100), "", B_TITLED_WINDOW, B_NOT_CLOSABLE | B_NOT_RESIZABLE | B_NOT_ZOOMABLE) {
  _locker = create_sem(0, "event_locker");
  _surface = surface;
  surface->root.done         = done_surface;
  surface->root.refresh_rect = refresh_rectangle;
  surface->root.set_title    = set_title;
  surface->root.listen_event = listen_event;
  surface->window = this;
  int w = bitmap->width;
  int h = bitmap->rows;
  BRect r(0, 0, w, h);
  switch (bitmap->mode) {
	case gr_pixel_mode_mono:   
	  _bitmap = new BBitmap(r, B_GRAY1);
	  break;
	case gr_pixel_mode_gray:
	  _bitmap = new BBitmap(r, B_CMAP8);
	  break;
	case gr_pixel_mode_rgb565:
	  _bitmap = new BBitmap(r, B_RGB16);
	  break;
	case gr_pixel_mode_rgb32:
	  _bitmap = new BBitmap(r, B_RGB32);
	  break;
	default:
	  LOG(("unsupported mode"));
	  exit(-1);
  }
    
  bitmap->buffer = (unsigned char*)_bitmap->Bits();
  bitmap->pitch  = _bitmap->BytesPerRow();
  _surface->root.bitmap = *bitmap;
  _offscreen = new BBitmap(r, B_RGB32);
  
  _view = new View(_offscreen, &_event_queue, _locker, r);
  AddChild(_view);
  _view->MakeFocus(true);
  ResizeTo(w, h);
  Show();
}

Window::~Window() {
  delete_sem(_locker);
  delete _offscreen; delete _bitmap;
}

void Window::Refresh(int x, int y, int w, int h) {
  int32* d = (int32*)_offscreen->Bits();
  int32* dl = d;
  uint8* s = (uint8*)_bitmap->Bits();
  uint8* sl = s;
  if (Lock()) {
    switch(_surface->root.bitmap.mode) {
 	case gr_pixel_mode_mono:   
	  for (y = 0; y < _surface->root.bitmap.rows; y++) {
	    sl = s;
	    dl = d;
	    for (x = 0; x < _surface->root.bitmap.width; x++) {
	      *dl = *sl ? -1 : 0;
	      sl++; dl++;
	    }
	    s += _bitmap->BytesPerRow();
	    d = (int32*)(((char*)d) + _offscreen->BytesPerRow());
	  } 
	  break;
	case gr_pixel_mode_gray:
	  for (y = 0; y < _surface->root.bitmap.rows; y++) {
	    sl = s;
	    int8* dx = (int8*)d;
	    for (x = 0; x < _surface->root.bitmap.width; x++) {
	      *dx = *sl; dx++;  
	      *dx = *sl; dx++;  
	      *dx = *sl; dx++;  
	      *dx = *sl; dx++;  
	      sl++;
	    }
	    s += _bitmap->BytesPerRow();
	    d = (int32*)(((char*)d) + _offscreen->BytesPerRow());
	  } 
	  break;
	default:
	  fprintf(stderr, "unsupported mode: %d\n", _surface->root.bitmap.mode);
	  break;
    }
    _view->Invalidate();
    Unlock();
  } 
}

grSurface* Window::init_surface( grSurface* surface, grBitmap* bitmap) {
  new Window((grBeOSSurface*) surface, bitmap);
  return surface;
}

void Window::done_surface(grSurface* surface) {
  Window* w = ((grBeOSSurface*)surface)->window;
  if (w->Lock()) {
    w->PostMessage(B_QUIT_REQUESTED); 
    w->Unlock();
  }
}

void Window::refresh_rectangle(grSurface* surface, int x, int y, int w, int h) {
  Window* win = ((grBeOSSurface*)surface)->window;
  win->Refresh(x, y, w, h);
}

void Window::set_title(grSurface* surface, const char* title) {
  Window* win = ((grBeOSSurface*)surface)->window;
  if (win->Lock()) {
    win->SetTitle(title); 
    win->Unlock();
  }  
}

int Window::listen_event(grSurface* surface, int event_mask, grEvent* grevent) {
  Window* win = ((grBeOSSurface*)surface)->window;
  return win->listen_event(event_mask, grevent);
}

/* End */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清精品网站| 久久99国产精品成人| 91精品国产高清一区二区三区蜜臀| 精品一区二区三区影院在线午夜 | 日韩精品亚洲一区二区三区免费| 精品三级在线看| 色94色欧美sute亚洲线路一久 | 在线观看亚洲成人| 国产一区二区电影| 午夜精品久久久久久久久| 亚洲国产成人自拍| 欧美一区二区三区在线观看| 色综合天天综合网天天狠天天 | 欧美电影免费观看完整版| 色婷婷激情综合| av成人动漫在线观看| 韩国女主播一区| 久久精品国产**网站演员| 日韩美女啊v在线免费观看| 精品国产乱码久久久久久老虎 | 精品国产免费一区二区三区四区| 色老综合老女人久久久| 成人免费视频一区| 国产一区不卡精品| 久久99精品国产.久久久久| 午夜精品一区二区三区三上悠亚| 亚洲欧洲在线观看av| 国产欧美日韩不卡免费| 日本伦理一区二区| 视频在线观看91| 成人动漫av在线| 亚洲黄色小说网站| 中文字幕日韩av资源站| 国产色产综合产在线视频| 欧美一区二区视频网站| 欧美日韩一区二区三区在线| 91小视频在线| 色综合天天综合狠狠| 成人黄色网址在线观看| 成人性生交大片免费看视频在线| 精品一区免费av| 精品一区二区三区免费| 久久97超碰国产精品超碰| 青娱乐精品视频在线| 日本欧美在线观看| 蜜桃久久久久久久| 裸体一区二区三区| 精彩视频一区二区| 国产精品一区二区三区乱码| 国产精选一区二区三区| 成人丝袜18视频在线观看| 丁香激情综合国产| 99精品视频在线免费观看| 亚洲免费观看高清完整版在线观看 | 国产电影一区在线| 久久国产成人午夜av影院| 免费日韩伦理电影| 精油按摩中文字幕久久| 国产成人精品一区二| 不卡的av在线播放| 91成人国产精品| 欧美一级黄色片| 国产午夜精品久久久久久久 | 91丨porny丨户外露出| 色94色欧美sute亚洲线路二| 91成人看片片| 日韩视频一区二区| 欧美激情综合网| 一区二区三区四区亚洲| 一道本成人在线| 激情丁香综合五月| 不卡欧美aaaaa| 欧美性大战久久| 日韩一区二区三区电影在线观看| 欧美精品一区二区三区在线播放| 亚洲国产精品99久久久久久久久 | 麻豆91精品视频| 国v精品久久久网| 欧美精品一区二区三区四区| 国产午夜亚洲精品午夜鲁丝片| 中文字幕中文字幕在线一区| 亚洲高清在线视频| 国模娜娜一区二区三区| 99视频精品在线| 91精品国产丝袜白色高跟鞋| 国产欧美一区二区三区网站| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美一区二区大片| 国产精品久久久久永久免费观看 | 欧美伦理影视网| 国产日韩高清在线| 亚洲成a人片在线观看中文| 激情文学综合丁香| 欧美视频一二三区| 国产欧美日韩在线看| 亚洲图片自拍偷拍| 成人免费高清在线| 日韩欧美国产三级电影视频| 亚洲色图视频免费播放| 久草中文综合在线| 91福利视频网站| 国产精品免费av| 激情欧美一区二区| 欧美美女黄视频| 中国色在线观看另类| 美女视频一区在线观看| 色综合天天性综合| 国产人成一区二区三区影院| 日本视频一区二区| 色欧美片视频在线观看| 中文幕一区二区三区久久蜜桃| 日韩精品免费专区| 欧美午夜影院一区| |精品福利一区二区三区| 国产一区二区在线观看视频| 6080午夜不卡| 亚洲国产一区二区三区青草影视| www.日韩av| 国产色综合久久| 国产精品自拍一区| 精品美女在线播放| 日本怡春院一区二区| 欧美日韩国产一级| 亚洲一区免费观看| 91在线观看下载| 中文字幕一区二区在线观看| 国产精品亚洲一区二区三区妖精 | 欧美电影免费提供在线观看| 亚洲国产人成综合网站| 91视频国产资源| 国产精品国产自产拍高清av| 国产91富婆露脸刺激对白| 久久免费看少妇高潮| 久久se精品一区二区| 日韩久久精品一区| 乱一区二区av| 精品国产a毛片| 精品一区二区三区av| 精品久久五月天| 国内一区二区视频| 2023国产精品视频| 国产精品18久久久| 亚洲国产精品av| 91性感美女视频| 一区二区三区日韩精品视频| 日本韩国精品一区二区在线观看| 亚洲精品国产第一综合99久久| 99国产精品99久久久久久| 亚洲女人小视频在线观看| 色婷婷亚洲综合| 亚洲成人7777| 91精品国产91久久综合桃花| 久久国产精品99精品国产| 精品区一区二区| 丁香婷婷综合五月| 国产精品护士白丝一区av| 91成人在线精品| 欧美bbbbb| 久久久五月婷婷| 99久久亚洲一区二区三区青草| 亚洲欧美经典视频| 51精品久久久久久久蜜臀| 狠狠狠色丁香婷婷综合久久五月| 久久久久久久久一| 波多野洁衣一区| 亚洲成a人片综合在线| 精品乱人伦一区二区三区| 成人aa视频在线观看| 一区二区三区欧美日韩| 日韩欧美中文字幕精品| 国产成人av在线影院| 亚洲另类中文字| 91精品国产综合久久久久久久| 国产在线精品一区二区不卡了| 国产精品久久久久久久久免费樱桃| 91黄色激情网站| 美国十次综合导航| 国产精品久久久久久久岛一牛影视| 日本电影亚洲天堂一区| 久久99日本精品| 亚洲美女少妇撒尿| 精品处破学生在线二十三| 97精品国产露脸对白| 麻豆91在线播放| 亚洲精品免费一二三区| 精品卡一卡二卡三卡四在线| 91蝌蚪porny| 激情另类小说区图片区视频区| 亚洲色图视频免费播放| 精品国产sm最大网站| 欧美视频一区二区在线观看| 激情久久久久久久久久久久久久久久| 亚洲精品国产一区二区三区四区在线| 精品国产免费久久| 欧美日韩一级大片网址| 国产成人a级片| 美国精品在线观看| 一区二区三区高清| 国产亚洲人成网站| 日韩一区二区在线观看|