mirror of https://github.com/aseprite/aseprite.git
Merge she::LockedSurface/NonDisposableSurface with she::Surface
This commit is contained in:
parent
d49d37302c
commit
0abe01c5f4
|
@ -1,5 +1,5 @@
|
|||
// Aseprite
|
||||
// Copyright (C) 2001-2015 David Capello
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
|
@ -33,7 +33,6 @@
|
|||
#include "doc/palette.h"
|
||||
#include "gfx/border.h"
|
||||
#include "gfx/region.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
#include "she/system.h"
|
||||
#include "ui/button.h"
|
||||
|
@ -457,8 +456,7 @@ she::Surface* BrushPopup::createSurfaceForBrush(const BrushRef& origBrush)
|
|||
delete palette;
|
||||
}
|
||||
else {
|
||||
she::ScopedSurfaceLock lock(surface);
|
||||
lock->clear();
|
||||
surface->clear();
|
||||
}
|
||||
|
||||
return surface;
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
#include "gfx/rect.h"
|
||||
#include "gfx/size.h"
|
||||
#include "she/font.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
#include "she/system.h"
|
||||
#include "ui/intern.h"
|
||||
|
@ -504,9 +503,9 @@ she::Surface* SkinTheme::sliceSheet(she::Surface* sur, const gfx::Rect& bounds)
|
|||
sur = she::instance()->createRgbaSurface(bounds.w, bounds.h);
|
||||
|
||||
{
|
||||
she::ScopedSurfaceLock src(m_sheet);
|
||||
she::ScopedSurfaceLock dst(sur);
|
||||
src->blitTo(dst, bounds.x, bounds.y, 0, 0, bounds.w, bounds.h);
|
||||
she::SurfaceLock lockSrc(m_sheet);
|
||||
she::SurfaceLock lockDst(sur);
|
||||
m_sheet->blitTo(sur, bounds.x, bounds.y, 0, 0, bounds.w, bounds.h);
|
||||
}
|
||||
|
||||
sur->applyScale(guiscale());
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Aseprite
|
||||
// Copyright (C) 2001-2015 David Capello
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
|
@ -17,7 +17,6 @@
|
|||
#include "app/ui/skin/skin_theme.h"
|
||||
#include "app/ui/skin/style.h"
|
||||
#include "she/font.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
#include "she/system.h"
|
||||
#include "ui/intern.h"
|
||||
|
@ -918,11 +917,11 @@ void Tabs::createFloatingOverlay(Tab* tab)
|
|||
|
||||
// Fill the surface with pink color
|
||||
{
|
||||
she::ScopedSurfaceLock lock(surface);
|
||||
she::SurfaceLock lock(surface);
|
||||
#ifdef USE_ALLEG4_BACKEND
|
||||
lock->fillRect(gfx::rgba(255, 0, 255), gfx::Rect(0, 0, surface->width(), surface->height()));
|
||||
surface->fillRect(gfx::rgba(255, 0, 255), gfx::Rect(0, 0, surface->width(), surface->height()));
|
||||
#else
|
||||
lock->fillRect(gfx::rgba(0, 0, 0, 0), gfx::Rect(0, 0, surface->width(), surface->height()));
|
||||
surface->fillRect(gfx::rgba(0, 0, 0, 0), gfx::Rect(0, 0, surface->width(), surface->height()));
|
||||
#endif
|
||||
}
|
||||
{
|
||||
|
@ -933,16 +932,16 @@ void Tabs::createFloatingOverlay(Tab* tab)
|
|||
#ifdef USE_ALLEG4_BACKEND
|
||||
// Make pink parts transparent (TODO remove this hack when we change the back-end to Skia)
|
||||
{
|
||||
she::ScopedSurfaceLock lock(surface);
|
||||
she::SurfaceLock lock(surface);
|
||||
|
||||
for (int y=0; y<surface->height(); ++y)
|
||||
for (int x=0; x<surface->width(); ++x) {
|
||||
gfx::Color c = lock->getPixel(x, y);
|
||||
gfx::Color c = surface->getPixel(x, y);
|
||||
c = (c != gfx::rgba(255, 0, 255, 0) &&
|
||||
c != gfx::rgba(255, 0, 255, 255) ?
|
||||
gfx::rgba(gfx::getr(c), gfx::getg(c), gfx::getb(c), 255):
|
||||
gfx::ColorNone);
|
||||
lock->putPixel(c, x, y);
|
||||
surface->putPixel(c, x, y);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Aseprite Document Library
|
||||
// Copyright (c) 2001-2015 David Capello
|
||||
// Copyright (c) 2001-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -18,7 +18,6 @@
|
|||
#include "doc/rgbmap.h"
|
||||
#include "she/surface.h"
|
||||
#include "she/surface_format.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
|
@ -71,7 +70,7 @@ uint32_t convert_color_to_surface<BitmapTraits, she::kRgbaSurfaceFormat>(color_t
|
|||
}
|
||||
|
||||
template<typename ImageTraits, typename AddressType>
|
||||
void convert_image_to_surface_templ(const Image* image, she::LockedSurface* dst,
|
||||
void convert_image_to_surface_templ(const Image* image, she::Surface* dst,
|
||||
int src_x, int src_y, int dst_x, int dst_y, int w, int h, const Palette* palette, const she::SurfaceFormatData* fd)
|
||||
{
|
||||
const LockImageBits<ImageTraits> bits(image, gfx::Rect(src_x, src_y, w, h));
|
||||
|
@ -105,7 +104,7 @@ struct Address24bpp
|
|||
};
|
||||
|
||||
template<typename ImageTraits>
|
||||
void convert_image_to_surface_selector(const Image* image, she::LockedSurface* surface,
|
||||
void convert_image_to_surface_selector(const Image* image, she::Surface* surface,
|
||||
int src_x, int src_y, int dst_x, int dst_y, int w, int h, const Palette* palette, const she::SurfaceFormatData* fd)
|
||||
{
|
||||
switch (fd->bitsPerPixel) {
|
||||
|
@ -156,26 +155,26 @@ void convert_image_to_surface(const Image* image, const Palette* palette,
|
|||
w = dstBounds.w;
|
||||
h = dstBounds.h;
|
||||
|
||||
she::ScopedSurfaceLock dst(surface);
|
||||
she::SurfaceLock lockDst(surface);
|
||||
she::SurfaceFormatData fd;
|
||||
dst->getFormat(&fd);
|
||||
surface->getFormat(&fd);
|
||||
|
||||
switch (image->pixelFormat()) {
|
||||
|
||||
case IMAGE_RGB:
|
||||
convert_image_to_surface_selector<RgbTraits>(image, dst, src_x, src_y, dst_x, dst_y, w, h, palette, &fd);
|
||||
convert_image_to_surface_selector<RgbTraits>(image, surface, src_x, src_y, dst_x, dst_y, w, h, palette, &fd);
|
||||
break;
|
||||
|
||||
case IMAGE_GRAYSCALE:
|
||||
convert_image_to_surface_selector<GrayscaleTraits>(image, dst, src_x, src_y, dst_x, dst_y, w, h, palette, &fd);
|
||||
convert_image_to_surface_selector<GrayscaleTraits>(image, surface, src_x, src_y, dst_x, dst_y, w, h, palette, &fd);
|
||||
break;
|
||||
|
||||
case IMAGE_INDEXED:
|
||||
convert_image_to_surface_selector<IndexedTraits>(image, dst, src_x, src_y, dst_x, dst_y, w, h, palette, &fd);
|
||||
convert_image_to_surface_selector<IndexedTraits>(image, surface, src_x, src_y, dst_x, dst_y, w, h, palette, &fd);
|
||||
break;
|
||||
|
||||
case IMAGE_BITMAP:
|
||||
convert_image_to_surface_selector<BitmapTraits>(image, dst, src_x, src_y, dst_x, dst_y, w, h, palette, &fd);
|
||||
convert_image_to_surface_selector<BitmapTraits>(image, surface, src_x, src_y, dst_x, dst_y, w, h, palette, &fd);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -478,9 +478,9 @@ void Alleg4Display::recreateSurface()
|
|||
m_surface = newSurface;
|
||||
}
|
||||
|
||||
NonDisposableSurface* Alleg4Display::getSurface()
|
||||
Surface* Alleg4Display::getSurface()
|
||||
{
|
||||
return static_cast<NonDisposableSurface*>(m_surface);
|
||||
return m_surface;
|
||||
}
|
||||
|
||||
void Alleg4Display::flip(const gfx::Rect& bounds)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// SHE library
|
||||
// Copyright (C) 2012-2015 David Capello
|
||||
// Copyright (C) 2012-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -27,7 +27,7 @@ namespace she {
|
|||
int scale() const override;
|
||||
void setScale(int scale) override;
|
||||
void recreateSurface();
|
||||
NonDisposableSurface* getSurface() override;
|
||||
Surface* getSurface() override;
|
||||
void flip(const gfx::Rect& bounds) override;
|
||||
void maximize() override;
|
||||
bool isMaximized() const override;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// SHE library
|
||||
// Copyright (C) 2012-2015 David Capello
|
||||
// Copyright (C) 2012-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -80,23 +80,27 @@ inline gfx::Color from_allegro(int color_depth, int color)
|
|||
Alleg4Surface::Alleg4Surface(BITMAP* bmp, DestroyFlag destroy)
|
||||
: m_bmp(bmp)
|
||||
, m_destroy(destroy)
|
||||
, m_lock(0)
|
||||
{
|
||||
}
|
||||
|
||||
Alleg4Surface::Alleg4Surface(int width, int height, DestroyFlag destroy)
|
||||
: m_bmp(create_bitmap(width, height))
|
||||
, m_destroy(destroy)
|
||||
, m_lock(0)
|
||||
{
|
||||
}
|
||||
|
||||
Alleg4Surface::Alleg4Surface(int width, int height, int bpp, DestroyFlag destroy)
|
||||
: m_bmp(create_bitmap_ex(bpp, width, height))
|
||||
, m_destroy(destroy)
|
||||
, m_lock(0)
|
||||
{
|
||||
}
|
||||
|
||||
Alleg4Surface::~Alleg4Surface()
|
||||
{
|
||||
ASSERT(m_lock == 0);
|
||||
if (m_destroy & DestroyHandle) {
|
||||
if (m_bmp)
|
||||
destroy_bitmap(m_bmp);
|
||||
|
@ -157,10 +161,18 @@ bool Alleg4Surface::intersectClipRect(const gfx::Rect& rc)
|
|||
m_bmp->ct < m_bmp->cb);
|
||||
}
|
||||
|
||||
LockedSurface* Alleg4Surface::lock()
|
||||
void Alleg4Surface::lock()
|
||||
{
|
||||
acquire_bitmap(m_bmp);
|
||||
return this;
|
||||
ASSERT(m_lock >= 0);
|
||||
if (m_lock++ == 0)
|
||||
acquire_bitmap(m_bmp);
|
||||
}
|
||||
|
||||
void Alleg4Surface::unlock()
|
||||
{
|
||||
ASSERT(m_lock > 0);
|
||||
if (--m_lock == 0)
|
||||
release_bitmap(m_bmp);
|
||||
}
|
||||
|
||||
void Alleg4Surface::setDrawMode(DrawMode mode, int param)
|
||||
|
@ -198,23 +210,6 @@ void* Alleg4Surface::nativeHandle()
|
|||
return reinterpret_cast<void*>(m_bmp);
|
||||
}
|
||||
|
||||
// LockedSurface implementation
|
||||
|
||||
int Alleg4Surface::lockedWidth() const
|
||||
{
|
||||
return m_bmp->w;
|
||||
}
|
||||
|
||||
int Alleg4Surface::lockedHeight() const
|
||||
{
|
||||
return m_bmp->h;
|
||||
}
|
||||
|
||||
void Alleg4Surface::unlock()
|
||||
{
|
||||
release_bitmap(m_bmp);
|
||||
}
|
||||
|
||||
void Alleg4Surface::clear()
|
||||
{
|
||||
clear_to_color(m_bmp, 0);
|
||||
|
@ -358,7 +353,7 @@ void Alleg4Surface::fillRect(gfx::Color color, const gfx::Rect& rc)
|
|||
solid_mode();
|
||||
}
|
||||
|
||||
void Alleg4Surface::blitTo(LockedSurface* dest, int srcx, int srcy, int dstx, int dsty, int width, int height) const
|
||||
void Alleg4Surface::blitTo(Surface* dest, int srcx, int srcy, int dstx, int dsty, int width, int height) const
|
||||
{
|
||||
ASSERT(m_bmp);
|
||||
ASSERT(dest);
|
||||
|
@ -379,12 +374,12 @@ void Alleg4Surface::scrollTo(const gfx::Rect& rc, int dx, int dy)
|
|||
rc.w, rc.h);
|
||||
}
|
||||
|
||||
void Alleg4Surface::drawSurface(const LockedSurface* src, int dstx, int dsty)
|
||||
void Alleg4Surface::drawSurface(const Surface* src, int dstx, int dsty)
|
||||
{
|
||||
draw_sprite(m_bmp, static_cast<const Alleg4Surface*>(src)->m_bmp, dstx, dsty);
|
||||
}
|
||||
|
||||
void Alleg4Surface::drawRgbaSurface(const LockedSurface* src, int dstx, int dsty)
|
||||
void Alleg4Surface::drawRgbaSurface(const Surface* src, int dstx, int dsty)
|
||||
{
|
||||
set_alpha_blender();
|
||||
draw_trans_sprite(m_bmp, static_cast<const Alleg4Surface*>(src)->m_bmp, dstx, dsty);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// SHE library
|
||||
// Copyright (C) 2012-2015 David Capello
|
||||
// Copyright (C) 2012-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -11,12 +11,11 @@
|
|||
#include <allegro.h>
|
||||
|
||||
#include "she/surface.h"
|
||||
#include "she/common/locked_surface.h"
|
||||
#include "she/common/generic_surface.h"
|
||||
|
||||
namespace she {
|
||||
|
||||
class Alleg4Surface : public Surface
|
||||
, public CommonLockedSurface {
|
||||
class Alleg4Surface : public GenericSurface<Surface> {
|
||||
public:
|
||||
enum DestroyFlag {
|
||||
None = 0,
|
||||
|
@ -38,15 +37,11 @@ namespace she {
|
|||
gfx::Rect getClipBounds() override;
|
||||
void setClipBounds(const gfx::Rect& rc) override;
|
||||
bool intersectClipRect(const gfx::Rect& rc) override;
|
||||
LockedSurface* lock() override;
|
||||
void lock() override;
|
||||
void unlock() override;
|
||||
void setDrawMode(DrawMode mode, int param) override;
|
||||
void applyScale(int scale) override;
|
||||
void* nativeHandle() override;
|
||||
|
||||
// LockedSurface implementation
|
||||
int lockedWidth() const override;
|
||||
int lockedHeight() const override;
|
||||
void unlock() override;
|
||||
void clear() override;
|
||||
uint8_t* getData(int x, int y) const override;
|
||||
void getFormat(SurfaceFormatData* formatData) const override;
|
||||
|
@ -57,14 +52,15 @@ namespace she {
|
|||
void drawLine(gfx::Color color, const gfx::Point& a, const gfx::Point& b) override;
|
||||
void drawRect(gfx::Color color, const gfx::Rect& rc) override;
|
||||
void fillRect(gfx::Color color, const gfx::Rect& rc) override;
|
||||
void blitTo(LockedSurface* dest, int srcx, int srcy, int dstx, int dsty, int width, int height) const override;
|
||||
void blitTo(Surface* dest, int srcx, int srcy, int dstx, int dsty, int width, int height) const override;
|
||||
void scrollTo(const gfx::Rect& rc, int dx, int dy) override;
|
||||
void drawSurface(const LockedSurface* src, int dstx, int dsty) override;
|
||||
void drawRgbaSurface(const LockedSurface* src, int dstx, int dsty) override;
|
||||
void drawSurface(const Surface* src, int dstx, int dsty) override;
|
||||
void drawRgbaSurface(const Surface* src, int dstx, int dsty) override;
|
||||
|
||||
private:
|
||||
BITMAP* m_bmp;
|
||||
DestroyFlag m_destroy;
|
||||
int m_lock;
|
||||
};
|
||||
|
||||
} // namespace she
|
||||
|
|
|
@ -4,14 +4,12 @@
|
|||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
||||
#ifndef SHE_COMMON_LOCKED_SURFACE_H
|
||||
#define SHE_COMMON_LOCKED_SURFACE_H
|
||||
#ifndef SHE_COMMON_GENERIC_SURFACE_H
|
||||
#define SHE_COMMON_GENERIC_SURFACE_H
|
||||
#pragma once
|
||||
|
||||
#include "gfx/clip.h"
|
||||
#include "she/common/font.h"
|
||||
#include "she/locked_surface.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/common/sprite_sheet_font.h"
|
||||
|
||||
namespace she {
|
||||
|
||||
|
@ -52,12 +50,13 @@ gfx::Color blend(const gfx::Color backdrop, gfx::Color src)
|
|||
|
||||
} // anoynmous namespace
|
||||
|
||||
class CommonLockedSurface : public LockedSurface {
|
||||
template<typename Base>
|
||||
class GenericSurface : public Base {
|
||||
public:
|
||||
|
||||
void drawColoredRgbaSurface(const LockedSurface* src, gfx::Color fg, gfx::Color bg, const gfx::Clip& clipbase) override {
|
||||
void drawColoredRgbaSurface(const Surface* src, gfx::Color fg, gfx::Color bg, const gfx::Clip& clipbase) override {
|
||||
gfx::Clip clip(clipbase);
|
||||
if (!clip.clip(lockedWidth(), lockedHeight(), src->lockedWidth(), src->lockedHeight()))
|
||||
if (!clip.clip(width(), height(), src->width(), src->height()))
|
||||
return;
|
||||
|
||||
SurfaceFormatData format;
|
||||
|
@ -94,8 +93,9 @@ public:
|
|||
|
||||
gfx::Rect charBounds = ssFont->getCharBounds(chr);
|
||||
if (!charBounds.isEmpty()) {
|
||||
ScopedSurfaceLock lock(ssFont->getSurfaceSheet());
|
||||
drawColoredRgbaSurface(lock, fg, bg, gfx::Clip(x, y, charBounds));
|
||||
Surface* sheet = ssFont->getSurfaceSheet();
|
||||
SurfaceLock lock(sheet);
|
||||
drawColoredRgbaSurface(sheet, fg, bg, gfx::Clip(x, y, charBounds));
|
||||
}
|
||||
}
|
||||
|
|
@ -12,8 +12,6 @@
|
|||
#include "base/string.h"
|
||||
#include "gfx/rect.h"
|
||||
#include "she/font.h"
|
||||
#include "she/locked_surface.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
|
||||
#include <vector>
|
||||
|
@ -77,10 +75,10 @@ public:
|
|||
SpriteSheetFont* font = new SpriteSheetFont;
|
||||
font->m_sheet = sur;
|
||||
|
||||
ScopedSurfaceLock surLock(sur);
|
||||
SurfaceLock lock(sur);
|
||||
gfx::Rect bounds(0, 0, 1, 1);
|
||||
|
||||
while (font->findChar(surLock, sur->width(), sur->height(), bounds)) {
|
||||
while (font->findChar(sur, sur->width(), sur->height(), bounds)) {
|
||||
font->m_chars.push_back(bounds);
|
||||
bounds.x += bounds.w;
|
||||
}
|
||||
|
@ -90,7 +88,7 @@ public:
|
|||
|
||||
private:
|
||||
|
||||
bool findChar(const LockedSurface* sur, int width, int height, gfx::Rect& bounds) {
|
||||
bool findChar(const Surface* sur, int width, int height, gfx::Rect& bounds) {
|
||||
gfx::Color keyColor = sur->getPixel(0, 0);
|
||||
|
||||
while (sur->getPixel(bounds.x, bounds.y) == keyColor) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// SHE library
|
||||
// Copyright (C) 2012-2015 David Capello
|
||||
// Copyright (C) 2012-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -16,7 +16,6 @@
|
|||
|
||||
namespace she {
|
||||
|
||||
class NonDisposableSurface;
|
||||
class Surface;
|
||||
class Font;
|
||||
|
||||
|
@ -46,7 +45,7 @@ namespace she {
|
|||
|
||||
// Returns the main surface to draw into this display.
|
||||
// You must not dispose this surface.
|
||||
virtual NonDisposableSurface* getSurface() = 0;
|
||||
virtual Surface* getSurface() = 0;
|
||||
|
||||
// Flips all graphics in the surface to the real display.
|
||||
virtual void flip(const gfx::Rect& bounds) = 0;
|
||||
|
|
|
@ -1,58 +0,0 @@
|
|||
// SHE library
|
||||
// Copyright (C) 2012-2013, 2015 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
||||
#ifndef SHE_LOCKED_SURFACE_H_INCLUDED
|
||||
#define SHE_LOCKED_SURFACE_H_INCLUDED
|
||||
#pragma once
|
||||
|
||||
#include "gfx/color.h"
|
||||
#include "gfx/fwd.h"
|
||||
#include "she/surface_format.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace gfx {
|
||||
class Clip;
|
||||
}
|
||||
|
||||
namespace she {
|
||||
|
||||
class Font;
|
||||
|
||||
class LockedSurface {
|
||||
public:
|
||||
virtual ~LockedSurface() { }
|
||||
virtual int lockedWidth() const = 0;
|
||||
virtual int lockedHeight() const = 0;
|
||||
virtual void unlock() = 0;
|
||||
virtual void clear() = 0;
|
||||
|
||||
virtual uint8_t* getData(int x, int y) const = 0;
|
||||
virtual void getFormat(SurfaceFormatData* formatData) const = 0;
|
||||
|
||||
virtual gfx::Color getPixel(int x, int y) const = 0;
|
||||
virtual void putPixel(gfx::Color color, int x, int y) = 0;
|
||||
|
||||
virtual void drawHLine(gfx::Color color, int x, int y, int w) = 0;
|
||||
virtual void drawVLine(gfx::Color color, int x, int y, int h) = 0;
|
||||
virtual void drawLine(gfx::Color color, const gfx::Point& a, const gfx::Point& b) = 0;
|
||||
|
||||
virtual void drawRect(gfx::Color color, const gfx::Rect& rc) = 0;
|
||||
virtual void fillRect(gfx::Color color, const gfx::Rect& rc) = 0;
|
||||
|
||||
virtual void blitTo(LockedSurface* dest, int srcx, int srcy, int dstx, int dsty, int width, int height) const = 0;
|
||||
virtual void scrollTo(const gfx::Rect& rc, int dx, int dy) = 0;
|
||||
virtual void drawSurface(const LockedSurface* src, int dstx, int dsty) = 0;
|
||||
virtual void drawRgbaSurface(const LockedSurface* src, int dstx, int dsty) = 0;
|
||||
virtual void drawColoredRgbaSurface(const LockedSurface* src, gfx::Color fg, gfx::Color bg, const gfx::Clip& clip) = 0;
|
||||
|
||||
virtual void drawChar(Font* font, gfx::Color fg, gfx::Color bg, int x, int y, int chr) = 0;
|
||||
virtual void drawString(Font* font, gfx::Color fg, gfx::Color bg, int x, int y, const std::string& str) = 0;
|
||||
};
|
||||
|
||||
} // namespace she
|
||||
|
||||
#endif
|
|
@ -1,29 +0,0 @@
|
|||
// SHE library
|
||||
// Copyright (C) 2012-2013 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
||||
#ifndef SHE_SCOPED_SURFACE_LOCK_H_INCLUDED
|
||||
#define SHE_SCOPED_SURFACE_LOCK_H_INCLUDED
|
||||
#pragma once
|
||||
|
||||
#include "she/surface.h"
|
||||
#include "she/locked_surface.h"
|
||||
|
||||
namespace she {
|
||||
|
||||
class ScopedSurfaceLock {
|
||||
public:
|
||||
ScopedSurfaceLock(Surface* surface) : m_lock(surface->lock()) { }
|
||||
~ScopedSurfaceLock() { m_lock->unlock(); }
|
||||
|
||||
LockedSurface* operator->() { return m_lock; }
|
||||
operator LockedSurface*() { return m_lock; }
|
||||
private:
|
||||
LockedSurface* m_lock;
|
||||
};
|
||||
|
||||
} // namespace she
|
||||
|
||||
#endif
|
|
@ -1,5 +1,5 @@
|
|||
// SHE library
|
||||
// Copyright (C) 2012-2015 David Capello
|
||||
// Copyright (C) 2012-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -14,9 +14,7 @@
|
|||
#include "she/event.h"
|
||||
#include "she/event_queue.h"
|
||||
#include "she/font.h"
|
||||
#include "she/locked_surface.h"
|
||||
#include "she/scoped_handle.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
#include "she/system.h"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// SHE library
|
||||
// Copyright (C) 2012-2015 David Capello
|
||||
// Copyright (C) 2012-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -100,9 +100,9 @@ void SkiaDisplay::setScale(int scale)
|
|||
m_window.setScale(scale);
|
||||
}
|
||||
|
||||
NonDisposableSurface* SkiaDisplay::getSurface()
|
||||
Surface* SkiaDisplay::getSurface()
|
||||
{
|
||||
return static_cast<NonDisposableSurface*>(m_surface);
|
||||
return m_surface;
|
||||
}
|
||||
|
||||
// Flips all graphics in the surface to the real display. Returns
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// SHE library
|
||||
// Copyright (C) 2012-2015 David Capello
|
||||
// Copyright (C) 2012-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -39,7 +39,7 @@ public:
|
|||
|
||||
// Returns the main surface to draw into this display.
|
||||
// You must not dispose this surface.
|
||||
NonDisposableSurface* getSurface() override;
|
||||
Surface* getSurface() override;
|
||||
|
||||
// Flips all graphics in the surface to the real display.
|
||||
void flip(const gfx::Rect& bounds) override;
|
||||
|
|
|
@ -10,8 +10,6 @@
|
|||
|
||||
#include "gfx/clip.h"
|
||||
#include "she/common/sprite_sheet_font.h"
|
||||
#include "she/locked_surface.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
|
||||
#include "SkBitmap.h"
|
||||
#include "SkCanvas.h"
|
||||
|
@ -31,17 +29,18 @@ inline SkIRect to_skia(const gfx::Rect& rc) {
|
|||
return SkIRect::MakeXYWH(rc.x, rc.y, rc.w, rc.h);
|
||||
}
|
||||
|
||||
class SkiaSurface : public NonDisposableSurface
|
||||
, public LockedSurface {
|
||||
class SkiaSurface : public Surface {
|
||||
public:
|
||||
SkiaSurface() : m_surface(nullptr)
|
||||
, m_canvas(nullptr) {
|
||||
, m_canvas(nullptr)
|
||||
, m_lock(0) {
|
||||
}
|
||||
|
||||
SkiaSurface(SkSurface* surface)
|
||||
: m_surface(surface)
|
||||
, m_canvas(nullptr)
|
||||
, m_clip(0, 0, width(), height())
|
||||
, m_lock(0)
|
||||
{
|
||||
ASSERT(m_surface);
|
||||
if (m_surface)
|
||||
|
@ -49,6 +48,7 @@ public:
|
|||
}
|
||||
|
||||
~SkiaSurface() {
|
||||
ASSERT(m_lock == 0);
|
||||
if (!m_surface)
|
||||
delete m_canvas;
|
||||
}
|
||||
|
@ -155,9 +155,16 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
LockedSurface* lock() override {
|
||||
m_bitmap.lockPixels();
|
||||
return this;
|
||||
void lock() override {
|
||||
ASSERT(m_lock >= 0);
|
||||
if (m_lock++ == 0)
|
||||
m_bitmap.lockPixels();
|
||||
}
|
||||
|
||||
void unlock() override {
|
||||
ASSERT(m_lock > 0);
|
||||
if (--m_lock == 0)
|
||||
m_bitmap.unlockPixels();
|
||||
}
|
||||
|
||||
void applyScale(int scaleFactor) override {
|
||||
|
@ -183,20 +190,6 @@ public:
|
|||
return (void*)this;
|
||||
}
|
||||
|
||||
// LockedSurface impl
|
||||
|
||||
int lockedWidth() const override {
|
||||
return width();
|
||||
}
|
||||
|
||||
int lockedHeight() const override {
|
||||
return height();
|
||||
}
|
||||
|
||||
void unlock() override {
|
||||
m_bitmap.unlockPixels();
|
||||
}
|
||||
|
||||
void clear() override {
|
||||
m_canvas->clear(0);
|
||||
}
|
||||
|
@ -321,11 +314,12 @@ public:
|
|||
m_canvas->drawIRect(to_skia(rc), m_paint);
|
||||
}
|
||||
|
||||
void blitTo(LockedSurface* dest, int srcx, int srcy, int dstx, int dsty, int width, int height) const override {
|
||||
void blitTo(Surface* dest, int srcx, int srcy, int dstx, int dsty, int width, int height) const override {
|
||||
SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
|
||||
std::vector<uint32_t> pixels(width * height * 4);
|
||||
m_canvas->readPixels(info, (void*)&pixels[0], 4*width, srcx, srcy);
|
||||
((SkiaSurface*)dest)->m_canvas->writePixels(info, (void*)&pixels[0], 4*width, dstx, dsty);
|
||||
static_cast<SkiaSurface*>(dest)
|
||||
->m_canvas->writePixels(info, (void*)&pixels[0], 4*width, dstx, dsty);
|
||||
}
|
||||
|
||||
void scrollTo(const gfx::Rect& rc, int dx, int dy) override {
|
||||
|
@ -336,6 +330,7 @@ public:
|
|||
return;
|
||||
|
||||
if (m_surface) {
|
||||
SurfaceLock lock(this);
|
||||
blitTo(this, clip.src.x, clip.src.y, clip.dst.x, clip.dst.y, clip.size.w, clip.size.h);
|
||||
return;
|
||||
}
|
||||
|
@ -366,7 +361,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void drawSurface(const LockedSurface* src, int dstx, int dsty) override {
|
||||
void drawSurface(const Surface* src, int dstx, int dsty) override {
|
||||
gfx::Clip clip(dstx, dsty, 0, 0,
|
||||
((SkiaSurface*)src)->width(),
|
||||
((SkiaSurface*)src)->height());
|
||||
|
@ -385,7 +380,7 @@ public:
|
|||
SkCanvas::kStrict_SrcRectConstraint);
|
||||
}
|
||||
|
||||
void drawRgbaSurface(const LockedSurface* src, int dstx, int dsty) override {
|
||||
void drawRgbaSurface(const Surface* src, int dstx, int dsty) override {
|
||||
gfx::Clip clip(dstx, dsty, 0, 0,
|
||||
((SkiaSurface*)src)->width(),
|
||||
((SkiaSurface*)src)->height());
|
||||
|
@ -404,9 +399,9 @@ public:
|
|||
SkCanvas::kStrict_SrcRectConstraint);
|
||||
}
|
||||
|
||||
void drawColoredRgbaSurface(const LockedSurface* src, gfx::Color fg, gfx::Color bg, const gfx::Clip& clipbase) override {
|
||||
void drawColoredRgbaSurface(const Surface* src, gfx::Color fg, gfx::Color bg, const gfx::Clip& clipbase) override {
|
||||
gfx::Clip clip(clipbase);
|
||||
if (!clip.clip(lockedWidth(), lockedHeight(), src->lockedWidth(), src->lockedHeight()))
|
||||
if (!clip.clip(width(), height(), src->width(), src->height()))
|
||||
return;
|
||||
|
||||
SkRect srcRect = SkRect::Make(SkIRect::MakeXYWH(clip.src.x, clip.src.y, clip.size.w, clip.size.h));
|
||||
|
@ -437,8 +432,9 @@ public:
|
|||
|
||||
gfx::Rect charBounds = commonFont->getCharBounds(chr);
|
||||
if (!charBounds.isEmpty()) {
|
||||
ScopedSurfaceLock lock(commonFont->getSurfaceSheet());
|
||||
drawColoredRgbaSurface(lock, fg, bg, gfx::Clip(x, y, charBounds));
|
||||
Surface* sheet = commonFont->getSurfaceSheet();
|
||||
SurfaceLock lock(sheet);
|
||||
drawColoredRgbaSurface(sheet, fg, bg, gfx::Clip(x, y, charBounds));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -476,6 +472,7 @@ private:
|
|||
SkCanvas* m_canvas;
|
||||
SkPaint m_paint;
|
||||
gfx::Rect m_clip;
|
||||
int m_lock;
|
||||
};
|
||||
|
||||
} // namespace she
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// SHE library
|
||||
// Copyright (C) 2012-2013, 2015 David Capello
|
||||
// Copyright (C) 2012-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -8,11 +8,20 @@
|
|||
#define SHE_SURFACE_H_INCLUDED
|
||||
#pragma once
|
||||
|
||||
#include "gfx/color.h"
|
||||
#include "gfx/fwd.h"
|
||||
#include "she/surface_format.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace gfx {
|
||||
class Clip;
|
||||
}
|
||||
|
||||
namespace she {
|
||||
|
||||
class LockedSurface;
|
||||
class Font;
|
||||
class SurfaceLock;
|
||||
|
||||
enum class DrawMode {
|
||||
Solid,
|
||||
|
@ -34,16 +43,43 @@ namespace she {
|
|||
|
||||
virtual void setDrawMode(DrawMode mode, int param = 0) = 0;
|
||||
|
||||
virtual LockedSurface* lock() = 0;
|
||||
virtual void lock() = 0;
|
||||
virtual void unlock() = 0;
|
||||
|
||||
virtual void clear() = 0;
|
||||
|
||||
virtual uint8_t* getData(int x, int y) const = 0;
|
||||
virtual void getFormat(SurfaceFormatData* formatData) const = 0;
|
||||
|
||||
virtual gfx::Color getPixel(int x, int y) const = 0;
|
||||
virtual void putPixel(gfx::Color color, int x, int y) = 0;
|
||||
|
||||
virtual void drawHLine(gfx::Color color, int x, int y, int w) = 0;
|
||||
virtual void drawVLine(gfx::Color color, int x, int y, int h) = 0;
|
||||
virtual void drawLine(gfx::Color color, const gfx::Point& a, const gfx::Point& b) = 0;
|
||||
|
||||
virtual void drawRect(gfx::Color color, const gfx::Rect& rc) = 0;
|
||||
virtual void fillRect(gfx::Color color, const gfx::Rect& rc) = 0;
|
||||
|
||||
virtual void blitTo(Surface* dest, int srcx, int srcy, int dstx, int dsty, int width, int height) const = 0;
|
||||
virtual void scrollTo(const gfx::Rect& rc, int dx, int dy) = 0;
|
||||
virtual void drawSurface(const Surface* src, int dstx, int dsty) = 0;
|
||||
virtual void drawRgbaSurface(const Surface* src, int dstx, int dsty) = 0;
|
||||
virtual void drawColoredRgbaSurface(const Surface* src, gfx::Color fg, gfx::Color bg, const gfx::Clip& clip) = 0;
|
||||
|
||||
virtual void drawChar(Font* font, gfx::Color fg, gfx::Color bg, int x, int y, int chr) = 0;
|
||||
virtual void drawString(Font* font, gfx::Color fg, gfx::Color bg, int x, int y, const std::string& str) = 0;
|
||||
|
||||
virtual void applyScale(int scaleFactor) = 0;
|
||||
virtual void* nativeHandle() = 0;
|
||||
};
|
||||
|
||||
class NonDisposableSurface : public Surface {
|
||||
class SurfaceLock {
|
||||
public:
|
||||
virtual ~NonDisposableSurface() { }
|
||||
SurfaceLock(Surface* surface) : m_surface(surface) { m_surface->lock(); }
|
||||
~SurfaceLock() { m_surface->unlock(); }
|
||||
private:
|
||||
virtual void dispose() = 0;
|
||||
Surface* m_surface;
|
||||
};
|
||||
|
||||
} // namespace she
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
#include "gfx/size.h"
|
||||
#include "she/display.h"
|
||||
#include "she/font.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
#include "she/system.h"
|
||||
#include "ui/manager.h"
|
||||
|
@ -83,32 +82,32 @@ void Graphics::setDrawMode(DrawMode mode, int param)
|
|||
|
||||
gfx::Color Graphics::getPixel(int x, int y)
|
||||
{
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
return dst->getPixel(m_dx+x, m_dy+y);
|
||||
she::SurfaceLock lock(m_surface);
|
||||
return m_surface->getPixel(m_dx+x, m_dy+y);
|
||||
}
|
||||
|
||||
void Graphics::putPixel(gfx::Color color, int x, int y)
|
||||
{
|
||||
dirty(gfx::Rect(m_dx+x, m_dy+y, 1, 1));
|
||||
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
dst->putPixel(color, m_dx+x, m_dy+y);
|
||||
she::SurfaceLock lock(m_surface);
|
||||
m_surface->putPixel(color, m_dx+x, m_dy+y);
|
||||
}
|
||||
|
||||
void Graphics::drawHLine(gfx::Color color, int x, int y, int w)
|
||||
{
|
||||
dirty(gfx::Rect(m_dx+x, m_dy+y, w, 1));
|
||||
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
dst->drawHLine(color, m_dx+x, m_dy+y, w);
|
||||
she::SurfaceLock lock(m_surface);
|
||||
m_surface->drawHLine(color, m_dx+x, m_dy+y, w);
|
||||
}
|
||||
|
||||
void Graphics::drawVLine(gfx::Color color, int x, int y, int h)
|
||||
{
|
||||
dirty(gfx::Rect(m_dx+x, m_dy+y, 1, h));
|
||||
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
dst->drawVLine(color, m_dx+x, m_dy+y, h);
|
||||
she::SurfaceLock lock(m_surface);
|
||||
m_surface->drawVLine(color, m_dx+x, m_dy+y, h);
|
||||
}
|
||||
|
||||
void Graphics::drawLine(gfx::Color color, const gfx::Point& _a, const gfx::Point& _b)
|
||||
|
@ -117,8 +116,8 @@ void Graphics::drawLine(gfx::Color color, const gfx::Point& _a, const gfx::Point
|
|||
gfx::Point b(m_dx+_b.x, m_dy+_b.y);
|
||||
dirty(gfx::Rect(a, b));
|
||||
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
dst->drawLine(color, a, b);
|
||||
she::SurfaceLock lock(m_surface);
|
||||
m_surface->drawLine(color, a, b);
|
||||
}
|
||||
|
||||
void Graphics::drawRect(gfx::Color color, const gfx::Rect& rcOrig)
|
||||
|
@ -127,8 +126,8 @@ void Graphics::drawRect(gfx::Color color, const gfx::Rect& rcOrig)
|
|||
rc.offset(m_dx, m_dy);
|
||||
dirty(rc);
|
||||
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
dst->drawRect(color, rc);
|
||||
she::SurfaceLock lock(m_surface);
|
||||
m_surface->drawRect(color, rc);
|
||||
}
|
||||
|
||||
void Graphics::fillRect(gfx::Color color, const gfx::Rect& rcOrig)
|
||||
|
@ -137,8 +136,8 @@ void Graphics::fillRect(gfx::Color color, const gfx::Rect& rcOrig)
|
|||
rc.offset(m_dx, m_dy);
|
||||
dirty(rc);
|
||||
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
dst->fillRect(color, rc);
|
||||
she::SurfaceLock lock(m_surface);
|
||||
m_surface->fillRect(color, rc);
|
||||
}
|
||||
|
||||
void Graphics::fillRegion(gfx::Color color, const gfx::Region& rgn)
|
||||
|
@ -163,27 +162,27 @@ void Graphics::drawSurface(she::Surface* surface, int x, int y)
|
|||
{
|
||||
dirty(gfx::Rect(m_dx+x, m_dy+y, surface->width(), surface->height()));
|
||||
|
||||
she::ScopedSurfaceLock src(surface);
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
dst->drawSurface(src, m_dx+x, m_dy+y);
|
||||
she::SurfaceLock lockSrc(surface);
|
||||
she::SurfaceLock lockDst(m_surface);
|
||||
m_surface->drawSurface(surface, m_dx+x, m_dy+y);
|
||||
}
|
||||
|
||||
void Graphics::drawRgbaSurface(she::Surface* surface, int x, int y)
|
||||
{
|
||||
dirty(gfx::Rect(m_dx+x, m_dy+y, surface->width(), surface->height()));
|
||||
|
||||
she::ScopedSurfaceLock src(surface);
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
dst->drawRgbaSurface(src, m_dx+x, m_dy+y);
|
||||
she::SurfaceLock lockSrc(surface);
|
||||
she::SurfaceLock lockDst(m_surface);
|
||||
m_surface->drawRgbaSurface(surface, m_dx+x, m_dy+y);
|
||||
}
|
||||
|
||||
void Graphics::drawColoredRgbaSurface(she::Surface* surface, gfx::Color color, int x, int y)
|
||||
{
|
||||
dirty(gfx::Rect(m_dx+x, m_dy+y, surface->width(), surface->height()));
|
||||
|
||||
she::ScopedSurfaceLock src(surface);
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
dst->drawColoredRgbaSurface(src, color, gfx::ColorNone,
|
||||
she::SurfaceLock lockSrc(surface);
|
||||
she::SurfaceLock lockDst(m_surface);
|
||||
m_surface->drawColoredRgbaSurface(surface, color, gfx::ColorNone,
|
||||
gfx::Clip(m_dx+x, m_dy+y, 0, 0, surface->width(), surface->height()));
|
||||
}
|
||||
|
||||
|
@ -191,9 +190,9 @@ void Graphics::blit(she::Surface* srcSurface, int srcx, int srcy, int dstx, int
|
|||
{
|
||||
dirty(gfx::Rect(m_dx+dstx, m_dy+dsty, w, h));
|
||||
|
||||
she::ScopedSurfaceLock src(srcSurface);
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
src->blitTo(dst, srcx, srcy, m_dx+dstx, m_dy+dsty, w, h);
|
||||
she::SurfaceLock lockSrc(srcSurface);
|
||||
she::SurfaceLock lockDst(m_surface);
|
||||
srcSurface->blitTo(m_surface, srcx, srcy, m_dx+dstx, m_dy+dsty, w, h);
|
||||
}
|
||||
|
||||
void Graphics::setFont(she::Font* font)
|
||||
|
@ -205,8 +204,8 @@ void Graphics::drawChar(int chr, gfx::Color fg, gfx::Color bg, int x, int y)
|
|||
{
|
||||
dirty(gfx::Rect(gfx::Point(m_dx+x, m_dy+y), measureChar(chr)));
|
||||
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
dst->drawChar(m_font, fg, bg, m_dx+x, m_dy+y, chr);
|
||||
she::SurfaceLock lock(m_surface);
|
||||
m_surface->drawChar(m_font, fg, bg, m_dx+x, m_dy+y, chr);
|
||||
}
|
||||
|
||||
void Graphics::drawString(const std::string& str, gfx::Color fg, gfx::Color bg, const gfx::Point& ptOrig)
|
||||
|
@ -214,14 +213,14 @@ void Graphics::drawString(const std::string& str, gfx::Color fg, gfx::Color bg,
|
|||
gfx::Point pt(m_dx+ptOrig.x, m_dy+ptOrig.y);
|
||||
dirty(gfx::Rect(pt.x, pt.y, m_font->textLength(str), m_font->height()));
|
||||
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
dst->drawString(m_font, fg, bg, pt.x, pt.y, str);
|
||||
she::SurfaceLock lock(m_surface);
|
||||
m_surface->drawString(m_font, fg, bg, pt.x, pt.y, str);
|
||||
}
|
||||
|
||||
void Graphics::drawUIString(const std::string& str, gfx::Color fg, gfx::Color bg, const gfx::Point& pt,
|
||||
bool drawUnderscore)
|
||||
{
|
||||
she::ScopedSurfaceLock dst(m_surface);
|
||||
she::SurfaceLock lock(m_surface);
|
||||
base::utf8_const_iterator it(str.begin()), end(str.end());
|
||||
int x = m_dx+pt.x;
|
||||
int y = m_dy+pt.y;
|
||||
|
@ -236,14 +235,14 @@ void Graphics::drawUIString(const std::string& str, gfx::Color fg, gfx::Color bg
|
|||
underscored_w = m_font->charWidth(*it);
|
||||
}
|
||||
}
|
||||
dst->drawChar(m_font, fg, bg, x, y, *it);
|
||||
m_surface->drawChar(m_font, fg, bg, x, y, *it);
|
||||
x += m_font->charWidth(*it);
|
||||
++it;
|
||||
}
|
||||
|
||||
y += m_font->height();
|
||||
if (drawUnderscore && underscored_w > 0) {
|
||||
dst->fillRect(fg,
|
||||
m_surface->fillRect(fg,
|
||||
gfx::Rect(underscored_x, y, underscored_w, guiscale()));
|
||||
y += guiscale();
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
#include "she/display.h"
|
||||
#include "she/event.h"
|
||||
#include "she/event_queue.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
#include "she/system.h"
|
||||
#include "ui/intern.h"
|
||||
|
@ -573,7 +572,7 @@ void Manager::enqueueMessage(Message* msg)
|
|||
#ifdef REPORT_EVENTS
|
||||
if (msg->type() == kKeyDownMessage ||
|
||||
msg->type() == kKeyUpMessage) {
|
||||
int mods = (int)static_cast<KeyMessage*>(msg)->keyModifiers();
|
||||
int mods = (int)static_cast<KeyMessage*>(msg)->modifiers();
|
||||
TRACE("Key%s scancode=%d unicode=%d mods=%s%s%s\n",
|
||||
(msg->type() == kKeyDownMessage ? "Down": "Up"),
|
||||
static_cast<KeyMessage*>(msg)->scancode(),
|
||||
|
@ -715,8 +714,8 @@ void Manager::setMouse(Widget* widget)
|
|||
std::cout << "Manager::setMouse ";
|
||||
if (widget) {
|
||||
std::cout << typeid(*widget).name();
|
||||
if (!widget->getId().empty())
|
||||
std::cout << " (" << widget->getId() << ")";
|
||||
if (!widget->id().empty())
|
||||
std::cout << " (" << widget->id() << ")";
|
||||
}
|
||||
else {
|
||||
std::cout << "null";
|
||||
|
@ -1257,8 +1256,8 @@ void Manager::pumpQueue()
|
|||
|
||||
std::cout << "Event " << msg->type() << " (" << string << ") "
|
||||
<< "for " << typeid(*widget).name();
|
||||
if (!widget->getId().empty())
|
||||
std::cout << " (" << widget->getId() << ")";
|
||||
if (!widget->id().empty())
|
||||
std::cout << " (" << widget->id() << ")";
|
||||
std::cout << std::endl;
|
||||
}
|
||||
#endif
|
||||
|
@ -1270,7 +1269,7 @@ void Manager::pumpQueue()
|
|||
continue;
|
||||
|
||||
PaintMessage* paintMsg = static_cast<PaintMessage*>(msg);
|
||||
she::NonDisposableSurface* surface = m_display->getSurface();
|
||||
she::Surface* surface = m_display->getSurface();
|
||||
gfx::Rect oldClip = surface->getClipBounds();
|
||||
|
||||
if (surface->intersectClipRect(paintMsg->rect())) {
|
||||
|
@ -1285,8 +1284,8 @@ void Manager::pumpQueue()
|
|||
|
||||
#ifdef DEBUG_PAINT_EVENTS
|
||||
{
|
||||
she::ScopedSurfaceLock lock(surface);
|
||||
lock->fillRect(gfx::rgba(0, 0, 255), paintMsg->rect());
|
||||
she::SurfaceLock lock(surface);
|
||||
surface->fillRect(gfx::rgba(0, 0, 255), paintMsg->rect());
|
||||
}
|
||||
|
||||
if (m_display)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Aseprite UI Library
|
||||
// Copyright (C) 2001-2015 David Capello
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -11,8 +11,6 @@
|
|||
#include "ui/manager.h"
|
||||
|
||||
#include "she/display.h"
|
||||
#include "she/locked_surface.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
#include "she/system.h"
|
||||
|
||||
|
@ -30,13 +28,14 @@ void move_region(Manager* manager, const Region& region, int dx, int dy)
|
|||
if (!display)
|
||||
return;
|
||||
|
||||
she::ScopedSurfaceLock lock(display->getSurface());
|
||||
she::Surface* surface = display->getSurface();
|
||||
she::SurfaceLock lock(surface);
|
||||
std::size_t nrects = region.size();
|
||||
|
||||
// Blit directly screen to screen.
|
||||
if (nrects == 1) {
|
||||
gfx::Rect rc = region[0];
|
||||
lock->scrollTo(rc, dx, dy);
|
||||
surface->scrollTo(rc, dx, dy);
|
||||
|
||||
rc.offset(dx, dy);
|
||||
Manager::getDefault()->dirtyRect(rc);
|
||||
|
@ -45,28 +44,27 @@ void move_region(Manager* manager, const Region& region, int dx, int dy)
|
|||
else if (nrects > 1) {
|
||||
std::vector<she::Surface*> images(nrects);
|
||||
Region::const_iterator it, begin=region.begin(), end=region.end();
|
||||
she::Surface* sur;
|
||||
int c;
|
||||
|
||||
for (c=0, it=begin; it != end; ++it, ++c) {
|
||||
const Rect& rc = *it;
|
||||
sur = system->createSurface(rc.w, rc.h);
|
||||
she::Surface* tmpSur = system->createSurface(rc.w, rc.h);
|
||||
{
|
||||
she::ScopedSurfaceLock surlock(sur);
|
||||
lock->blitTo(surlock, rc.x, rc.y, 0, 0, rc.w, rc.h);
|
||||
she::SurfaceLock tmpSurLock(tmpSur);
|
||||
surface->blitTo(tmpSur, rc.x, rc.y, 0, 0, rc.w, rc.h);
|
||||
}
|
||||
images[c] = sur;
|
||||
images[c] = tmpSur;
|
||||
}
|
||||
|
||||
for (c=0, it=begin; it != end; ++it, ++c) {
|
||||
gfx::Rect rc((*it).x+dx, (*it).y+dy, (*it).w, (*it).h);
|
||||
sur = images[c];
|
||||
she::Surface* tmpSur = images[c];
|
||||
{
|
||||
she::ScopedSurfaceLock surlock(sur);
|
||||
surlock->blitTo(lock, 0, 0, rc.x, rc.y, rc.w, rc.h);
|
||||
she::SurfaceLock tmpSurLock(tmpSur);
|
||||
tmpSur->blitTo(surface, 0, 0, rc.x, rc.y, rc.w, rc.h);
|
||||
manager->dirtyRect(rc);
|
||||
}
|
||||
sur->dispose();
|
||||
tmpSur->dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Aseprite UI Library
|
||||
// Copyright (C) 2001-2013, 2015 David Capello
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -10,8 +10,7 @@
|
|||
|
||||
#include "ui/overlay.h"
|
||||
|
||||
#include "she/locked_surface.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
#include "she/system.h"
|
||||
#include "ui/manager.h"
|
||||
|
||||
|
@ -55,13 +54,13 @@ gfx::Rect Overlay::bounds() const
|
|||
return gfx::Rect(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
void Overlay::drawOverlay(she::LockedSurface* screen)
|
||||
void Overlay::drawOverlay(she::Surface* screen)
|
||||
{
|
||||
if (!m_surface)
|
||||
return;
|
||||
|
||||
she::ScopedSurfaceLock lockedSurface(m_surface);
|
||||
screen->drawRgbaSurface(lockedSurface, m_pos.x, m_pos.y);
|
||||
she::SurfaceLock lock(m_surface);
|
||||
screen->drawRgbaSurface(m_surface, m_pos.x, m_pos.y);
|
||||
|
||||
Manager::getDefault()->dirtyRect(
|
||||
gfx::Rect(m_pos.x, m_pos.y,
|
||||
|
@ -74,7 +73,7 @@ void Overlay::moveOverlay(const gfx::Point& newPos)
|
|||
m_pos = newPos;
|
||||
}
|
||||
|
||||
void Overlay::captureOverlappedArea(she::LockedSurface* screen)
|
||||
void Overlay::captureOverlappedArea(she::Surface* screen)
|
||||
{
|
||||
if (!m_surface)
|
||||
return;
|
||||
|
@ -82,12 +81,12 @@ void Overlay::captureOverlappedArea(she::LockedSurface* screen)
|
|||
if (!m_overlap)
|
||||
m_overlap = she::instance()->createSurface(m_surface->width(), m_surface->height());
|
||||
|
||||
she::ScopedSurfaceLock lock(m_overlap);
|
||||
screen->blitTo(lock, m_pos.x, m_pos.y, 0, 0,
|
||||
she::SurfaceLock lock(m_overlap);
|
||||
screen->blitTo(m_overlap, m_pos.x, m_pos.y, 0, 0,
|
||||
m_overlap->width(), m_overlap->height());
|
||||
}
|
||||
|
||||
void Overlay::restoreOverlappedArea(she::LockedSurface* screen)
|
||||
void Overlay::restoreOverlappedArea(she::Surface* screen)
|
||||
{
|
||||
if (!m_surface)
|
||||
return;
|
||||
|
@ -95,9 +94,9 @@ void Overlay::restoreOverlappedArea(she::LockedSurface* screen)
|
|||
if (!m_overlap)
|
||||
return;
|
||||
|
||||
she::ScopedSurfaceLock lock(m_overlap);
|
||||
lock->blitTo(screen, 0, 0, m_pos.x, m_pos.y,
|
||||
m_overlap->width(), m_overlap->height());
|
||||
she::SurfaceLock lock(m_overlap);
|
||||
m_overlap->blitTo(screen, 0, 0, m_pos.x, m_pos.y,
|
||||
m_overlap->width(), m_overlap->height());
|
||||
|
||||
Manager::getDefault()->dirtyRect(
|
||||
gfx::Rect(m_pos.x, m_pos.y,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Aseprite UI Library
|
||||
// Copyright (C) 2001-2013, 2015 David Capello
|
||||
// Copyright (C) 2001-2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -14,7 +14,6 @@
|
|||
|
||||
namespace she {
|
||||
class Surface;
|
||||
class LockedSurface;
|
||||
}
|
||||
|
||||
namespace ui {
|
||||
|
@ -34,10 +33,10 @@ namespace ui {
|
|||
const gfx::Point& position() const { return m_pos; }
|
||||
gfx::Rect bounds() const;
|
||||
|
||||
void captureOverlappedArea(she::LockedSurface* screen);
|
||||
void restoreOverlappedArea(she::LockedSurface* screen);
|
||||
void captureOverlappedArea(she::Surface* screen);
|
||||
void restoreOverlappedArea(she::Surface* screen);
|
||||
|
||||
void drawOverlay(she::LockedSurface* screen);
|
||||
void drawOverlay(she::Surface* screen);
|
||||
void moveOverlay(const gfx::Point& newPos);
|
||||
|
||||
bool operator<(const Overlay& other) const {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Aseprite UI Library
|
||||
// Copyright (C) 2001-2013, 2015 David Capello
|
||||
// Copyright (C) 2001-2013, 2015, 2016 David Capello
|
||||
//
|
||||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
@ -11,7 +11,7 @@
|
|||
#include "ui/overlay_manager.h"
|
||||
|
||||
#include "she/display.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
#include "ui/manager.h"
|
||||
#include "ui/overlay.h"
|
||||
|
||||
|
@ -66,9 +66,9 @@ void OverlayManager::captureOverlappedAreas()
|
|||
return;
|
||||
|
||||
she::Surface* displaySurface = manager->getDisplay()->getSurface();
|
||||
she::ScopedSurfaceLock lockedDisplaySurface(displaySurface);
|
||||
she::SurfaceLock lock(displaySurface);
|
||||
for (Overlay* overlay : *this)
|
||||
overlay->captureOverlappedArea(lockedDisplaySurface);
|
||||
overlay->captureOverlappedArea(displaySurface);
|
||||
}
|
||||
|
||||
void OverlayManager::restoreOverlappedAreas()
|
||||
|
@ -78,9 +78,9 @@ void OverlayManager::restoreOverlappedAreas()
|
|||
return;
|
||||
|
||||
she::Surface* displaySurface = manager->getDisplay()->getSurface();
|
||||
she::ScopedSurfaceLock lockedDisplaySurface(displaySurface);
|
||||
she::SurfaceLock lock(displaySurface);
|
||||
for (Overlay* overlay : *this)
|
||||
overlay->restoreOverlappedArea(lockedDisplaySurface);
|
||||
overlay->restoreOverlappedArea(displaySurface);
|
||||
}
|
||||
|
||||
void OverlayManager::drawOverlays()
|
||||
|
@ -90,9 +90,9 @@ void OverlayManager::drawOverlays()
|
|||
return;
|
||||
|
||||
she::Surface* displaySurface = manager->getDisplay()->getSurface();
|
||||
she::ScopedSurfaceLock lockedDisplaySurface(displaySurface);
|
||||
she::SurfaceLock lock(displaySurface);
|
||||
for (Overlay* overlay : *this)
|
||||
overlay->drawOverlay(lockedDisplaySurface);
|
||||
overlay->drawOverlay(displaySurface);
|
||||
}
|
||||
|
||||
} // namespace ui
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#ifdef DEBUG_SCROLL_EVENTS
|
||||
#include "base/thread.h"
|
||||
#include "she/display.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
#endif
|
||||
|
||||
#include <queue>
|
||||
|
@ -326,9 +326,10 @@ void View::onSetViewScroll(const gfx::Point& pt)
|
|||
display->flip(gfx::Rect(0, 0, display_w(), display_h()));
|
||||
base::this_thread::sleep_for(0.002);
|
||||
{
|
||||
she::ScopedSurfaceLock lock(display->getSurface());
|
||||
she::Surface* surface = display->getSurface();
|
||||
she::SurfaceLock lock(surface);
|
||||
for (const auto& rc : invalidRegion)
|
||||
lock->fillRect(gfx::rgba(255, 0, 0), rc);
|
||||
surface->fillRect(gfx::rgba(255, 0, 0), rc);
|
||||
}
|
||||
if (display)
|
||||
display->flip(gfx::Rect(0, 0, display_w(), display_h()));
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// This file is released under the terms of the MIT license.
|
||||
// Read LICENSE.txt for more information.
|
||||
|
||||
/* #define REPORT_SIGNALS */
|
||||
// #define REPORT_SIGNALS
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
|
@ -15,7 +15,6 @@
|
|||
#include "base/memory.h"
|
||||
#include "she/display.h"
|
||||
#include "she/font.h"
|
||||
#include "she/scoped_surface_lock.h"
|
||||
#include "she/surface.h"
|
||||
#include "she/system.h"
|
||||
#include "ui/init_theme_event.h"
|
||||
|
@ -1055,9 +1054,11 @@ public:
|
|||
|
||||
void operator()(Graphics* graphics) {
|
||||
{
|
||||
she::ScopedSurfaceLock src(m_surface);
|
||||
she::ScopedSurfaceLock dst(she::instance()->defaultDisplay()->getSurface());
|
||||
src->blitTo(dst, 0, 0, m_pt.x, m_pt.y,
|
||||
she::Surface* dst = she::instance()->defaultDisplay()->getSurface();
|
||||
she::SurfaceLock lockSrc(m_surface);
|
||||
she::SurfaceLock lockDst(dst);
|
||||
m_surface->blitTo(
|
||||
dst, 0, 0, m_pt.x, m_pt.y,
|
||||
m_surface->width(), m_surface->height());
|
||||
}
|
||||
m_surface->dispose();
|
||||
|
|
Loading…
Reference in New Issue