Unix SampleApp attach/detach fixup and style fixup
Review URL: http://codereview.appspot.com/5972062/
git-svn-id: http://skia.googlecode.com/svn/trunk@3590 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/views/SkOSWindow_Unix.h b/include/views/SkOSWindow_Unix.h
index 40059bf..384cc7b 100644
--- a/include/views/SkOSWindow_Unix.h
+++ b/include/views/SkOSWindow_Unix.h
@@ -21,7 +21,6 @@
size_t fOSWin;
GC fGc;
GLXContext fGLContext;
- bool fGLCreated;
};
class SkOSWindow : public SkWindow {
@@ -62,7 +61,6 @@
void mapWindowAndWait();
SkUnixWindow fUnixWindow;
- bool fGLAttached;
// Needed for GL
XVisualInfo* fVi;
diff --git a/src/views/unix/SkOSWindow_Unix.cpp b/src/views/unix/SkOSWindow_Unix.cpp
index 01bc21c..66b1694 100644
--- a/src/views/unix/SkOSWindow_Unix.cpp
+++ b/src/views/unix/SkOSWindow_Unix.cpp
@@ -32,9 +32,11 @@
const long EVENT_MASK = StructureNotifyMask|ButtonPressMask|ButtonReleaseMask
|ExposureMask|PointerMotionMask|KeyPressMask|KeyReleaseMask;
-SkOSWindow::SkOSWindow(void* unused) : INHERITED(), fGLAttached(false), fVi(0)
-{
+SkOSWindow::SkOSWindow(void* unused)
+ : INHERITED()
+ , fVi(0) {
fUnixWindow.fDisplay = XOpenDisplay(NULL);
+ fUnixWindow.fGLContext = NULL;
Display* dsp = fUnixWindow.fDisplay;
if (dsp) {
// Attempt to create a window that supports GL
@@ -61,27 +63,26 @@
fUnixWindow.fGc = XCreateGC(dsp, fUnixWindow.fWin, 0, NULL);
}
this->resize(WIDTH, HEIGHT);
- fUnixWindow.fGLCreated = false;
}
-SkOSWindow::~SkOSWindow()
-{
- if (fUnixWindow.fDisplay) {
- if (fGLAttached)
+SkOSWindow::~SkOSWindow() {
+ if (NULL != fUnixWindow.fDisplay) {
+ if (NULL != fUnixWindow.fGLContext) {
glXMakeCurrent(fUnixWindow.fDisplay, None, NULL);
- XFreeGC(fUnixWindow.fDisplay, fUnixWindow.fGc);
- if (fUnixWindow.fGLCreated)
glXDestroyContext(fUnixWindow.fDisplay, fUnixWindow.fGLContext);
+ }
+ XFreeGC(fUnixWindow.fDisplay, fUnixWindow.fGc);
XDestroyWindow(fUnixWindow.fDisplay, fUnixWindow.fWin);
XCloseDisplay(fUnixWindow.fDisplay);
fUnixWindow.fDisplay = 0;
}
}
-void SkOSWindow::post_linuxevent()
-{
+void SkOSWindow::post_linuxevent() {
// Put an event in the X queue to fire an SkEvent.
- if (!fUnixWindow.fDisplay) return;
+ if (!fUnixWindow.fDisplay) {
+ return;
+ }
long event_mask = NoEventMask;
XClientMessageEvent event;
event.type = ClientMessage;
@@ -94,8 +95,7 @@
XFlush(fUnixWindow.fDisplay);
}
-void SkOSWindow::loop()
-{
+void SkOSWindow::loop() {
Display* dsp = fUnixWindow.fDisplay;
XSelectInput(dsp, fUnixWindow.fWin, EVENT_MASK);
@@ -122,8 +122,7 @@
case MotionNotify:
this->handleClick(evt.xmotion.x, evt.xmotion.y, SkView::Click::kMoved_State);
break;
- case KeyPress:
- {
+ case KeyPress: {
KeySym keysym = XKeycodeToKeysym(dsp, evt.xkey.keycode, 0);
//SkDebugf("pressed key %i!\n\tKeySym:%i\n", evt.xkey.keycode, XKeycodeToKeysym(dsp, evt.xkey.keycode, 0));
if (keysym == XK_Escape) {
@@ -153,8 +152,7 @@
}
}
-void SkOSWindow::mapWindowAndWait()
-{
+void SkOSWindow::mapWindowAndWait() {
Display* dsp = fUnixWindow.fDisplay;
Window win = fUnixWindow.fWin;
XMapWindow(dsp, win);
@@ -170,50 +168,50 @@
}
-bool SkOSWindow::attach(SkBackEndTypes /* attachType */)
-{
- if (fGLAttached) return true;
- Display* dsp = fUnixWindow.fDisplay;
- if (!dsp || !fVi) return false;
+bool SkOSWindow::attach(SkBackEndTypes /* attachType */) {
+ if (NULL == fUnixWindow.fGLContext) {
+ if (NULL == fUnixWindow.fDisplay || NULL == fVi) {
+ return false;
+ }
- if (!fUnixWindow.fGLCreated) {
- fUnixWindow.fGLContext = glXCreateContext(dsp, fVi, NULL, GL_TRUE);
- fUnixWindow.fGLCreated = true;
- glXMakeCurrent(dsp, fUnixWindow.fWin, fUnixWindow.fGLContext);
- glViewport(0, 0, SkScalarRound(this->width()), SkScalarRound(this->height()));
- glClearColor(0, 0, 0, 0);
- glClearStencil(0);
- glStencilMask(0xffffffff);
- glDisable(GL_SCISSOR_TEST);
- glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+ fUnixWindow.fGLContext = glXCreateContext(fUnixWindow.fDisplay,
+ fVi,
+ NULL,
+ GL_TRUE);
+ if (NULL == fUnixWindow.fGLContext) {
+ return false;
+ }
}
- else
- glXMakeCurrent(dsp, fUnixWindow.fWin, fUnixWindow.fGLContext);
- fGLAttached = true;
-
+ glXMakeCurrent(fUnixWindow.fDisplay,
+ fUnixWindow.fWin,
+ fUnixWindow.fGLContext);
+ glViewport(0, 0,
+ SkScalarRound(this->width()), SkScalarRound(this->height()));
+ glClearColor(0, 0, 0, 0);
+ glClearStencil(0);
+ glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
return true;
}
-void SkOSWindow::detach()
-{
- if (!fUnixWindow.fDisplay || !fGLAttached) return;
- fGLAttached = false;
- // Returns back to normal drawing.
+void SkOSWindow::detach() {
+ if (NULL == fUnixWindow.fDisplay || NULL == fUnixWindow.fGLContext) {
+ return;
+ }
glXMakeCurrent(fUnixWindow.fDisplay, None, NULL);
- // Ensure that we redraw when switching back to raster.
- this->inval(NULL);
+ glXDestroyContext(fUnixWindow.fDisplay, fUnixWindow.fGLContext);
+ fUnixWindow.fGLContext = NULL;
}
-void SkOSWindow::present()
-{
- if (fUnixWindow.fDisplay && fGLAttached) {
+void SkOSWindow::present() {
+ if (NULL != fUnixWindow.fDisplay && NULL != fUnixWindow.fGLContext) {
glXSwapBuffers(fUnixWindow.fDisplay, fUnixWindow.fWin);
}
}
-void SkOSWindow::onSetTitle(const char title[])
-{
- if (!fUnixWindow.fDisplay) return;
+void SkOSWindow::onSetTitle(const char title[]) {
+ if (!fUnixWindow.fDisplay) {
+ return;
+ }
XTextProperty textProp;
textProp.value = (unsigned char*)title;
textProp.format = 8;
@@ -226,19 +224,17 @@
(new SkEvent("inval-imageview", this->getSinkID()))->post();
}
-bool SkOSWindow::onEvent(const SkEvent& evt)
-{
+bool SkOSWindow::onEvent(const SkEvent& evt) {
if (evt.isType("inval-imageview")) {
update(NULL);
- if (!fGLAttached)
- doPaint();
+ if (NULL == fUnixWindow.fGLContext)
+ this->doPaint();
return true;
}
return INHERITED::onEvent(evt);
}
-static bool convertBitmapToXImage(XImage& image, const SkBitmap& bitmap)
-{
+static bool convertBitmapToXImage(XImage& image, const SkBitmap& bitmap) {
sk_bzero(&image, sizeof(image));
int bitsPerPixel = bitmap.bytesPerPixel() * 8;
@@ -269,17 +265,14 @@
XPutImage(fUnixWindow.fDisplay, fUnixWindow.fWin, fUnixWindow.fGc, &image, 0, 0, 0, 0, width, height);
}
-bool SkOSWindow::onHandleChar(SkUnichar)
-{
+bool SkOSWindow::onHandleChar(SkUnichar) {
return false;
}
-bool SkOSWindow::onHandleKey(SkKey key)
-{
+bool SkOSWindow::onHandleKey(SkKey key) {
return false;
}
-bool SkOSWindow::onHandleKeyUp(SkKey key)
-{
+bool SkOSWindow::onHandleKeyUp(SkKey key) {
return false;
}